diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..f42fae3 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,5 @@ +# Browsers that we support + +last 3 version +> 0.3% +not dead # no browsers without security updates diff --git a/.editorconfig b/.editorconfig index 8b827c7..2e1b261 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,9 +3,9 @@ root = true [*] charset = utf-8 end_of_line = lf -insert_final_newline = true -indent_style = space indent_size = 4 +indent_style = space +insert_final_newline = true trim_trailing_whitespace = true [*.md] @@ -14,8 +14,8 @@ trim_trailing_whitespace = false [*.{yml,yaml}] indent_size = 2 -[*.vue] -indent_size = 2 - [docker-compose.yml] indent_size = 4 + +[*.vue] +indent_size = 2 diff --git a/.eslintrc.json b/.eslintrc.json index cfdce2b..ecd6075 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,16 +10,16 @@ ], "overrides": [ { - "files": ["*.ts", "*.vue"], - "rules": { - "no-undef": "off" - } + "files": ["*.ts", "*.vue"], + "rules": { + "no-undef": "off" + } }, { - "files": ["*.vue"], - "rules": { - "indent": "off" - } + "files": ["*.vue"], + "rules": { + "indent": "off" + } } ], "parser": "vue-eslint-parser", @@ -37,5 +37,19 @@ "semi": ["error", "always"], "vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }], "vue/one-component-per-file": "off" + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".vue", ".ts", ".d.ts"] + }, + "alias": { + "extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"], + "map": [ + ["~", "./resources/assets"], + ["@", "./node_modules"] + ] + } + } } } diff --git a/.gitattributes b/.gitattributes index 510d996..fcb21d3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -* text=auto +* text=auto eol=lf *.blade.php diff=html *.css diff=css @@ -8,3 +8,4 @@ /.github export-ignore CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore index 60982f1..5b9c9ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,24 @@ -/node_modules -/public/hot -/public/storage -/public/build -/public/medias -/public/uploads -/public/cache -/public/sitemap.xml -/storage/*.key -/vendor .env .env.backup +.env.production .phpunit.result.cache +.stylelintcache +/.fleet +/.idea +/.phpunit.cache +/.vscode +/node_modules +/public/build +/public/cache +/public/hot +/public/sitemap.xml +/public/storage +/storage/*.key +/vendor +auth.json docker-compose.override.yml Homestead.json Homestead.yaml npm-debug.log yarn-error.log -/.idea -/.vscode -auth.json +.npmrc diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0551b08..219a6c1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,13 +1,13 @@ include: - project: 'ldc-web/shared-ci' ref: 'main' - file: 'lint/lint7.3.yml' + file: 'lint/lint.yml' - project: 'ldc-web/shared-ci' ref: 'main' - file: 'security/security7.3.yml' + file: 'security/security.yml' - project: 'ldc-web/shared-ci' ref: 'main' - file: 'build/build7.3.yml' + file: 'build/build.yml' - project: 'ldc-web/shared-ci' ref: 'main' file: 'test/test.yml' @@ -21,4 +21,4 @@ stages: - security - build - test - - deploy \ No newline at end of file + - deploy diff --git a/.stylelintrc.json b/.stylelintrc.json index 85dffe8..99a7c07 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,8 +4,13 @@ "stylelint-config-sass-guidelines", "stylelint-config-idiomatic-order" ], - "plugins": ["stylelint-scss"], - "files": ["**/*.css", "**/*.scss"], + "plugins": [ + "stylelint-scss" + ], + "files": [ + "**/*.css", + "**/*.scss" + ], "ignoreFiles": [ "**/vendor/*.css", "**/vendor/**/*.css", @@ -25,6 +30,10 @@ "order/properties-alphabetical-order": null, "max-nesting-depth": 5, "selector-max-compound-selectors": 5, + "declaration-colon-space-after": "always-single-line", + "function-parentheses-space-inside": "never-single-line", + "declaration-colon-newline-after": null, + "value-list-comma-newline-after": null, "scss/double-slash-comment-empty-line-before": [ "always", { diff --git a/.vscode/settings.json b/.vscode/settings.json index edd4cd7..1f1cde8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,4 @@ { - "peacock.remoteColor": "#006ea3", "workbench.colorCustomizations": { "activityBar.activeBackground": "#0090d6", "activityBar.background": "#0090d6", @@ -18,5 +17,9 @@ "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#006ea399", "titleBar.inactiveForeground": "#e7e7e799" - } + }, + "peacock.remoteColor": "#006ea3", + "intelephense.environment.phpVersion": "8.2.0", + "intelephense.completion.fullyQualifyGlobalConstantsAndFunctions": true, + "intelephense.phpdoc.useFullyQualifiedNames": true } diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a79300..c9f801d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 18/09/2023 +bump laravel 10 + update with base project + # 01/08/2022 init with packages : @@ -7,4 +10,4 @@ with packages : - ldc/web-status-checker-laravel with Google Services keys -with gitlab-ci config file \ No newline at end of file +with gitlab-ci config file diff --git a/app/Console/Commands/CreateAdmin.php b/app/Console/Commands/CreateAdmin.php deleted file mode 100644 index 944fd0d..0000000 --- a/app/Console/Commands/CreateAdmin.php +++ /dev/null @@ -1,90 +0,0 @@ -ask('Type the wanted user email', 'equipe.web@ldc.fr'); - $validator = Validator::make(['email' => $tmp], [ - 'email' => 'required|unique:users,email|email:rfc,dns' - ]); - $validator->validate(); - $email = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid email %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } - } - $name = null; - while (is_null($name)) { - try { - $tmp = $this->ask('Type the wanted user name', 'Admin'); - $validator = Validator::make(['name' => $tmp], [ - 'name' => 'required|min:5,max:255' - ]); - $validator->validate(); - $name = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid name %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } - } - - $password = null; - while ( - ($password = $this->secret( - (!\is_null($password) ? 'Failed to confirm, ' : '') . 'Type the wanted user password' - )) !== $this->secret('Confirm the password') - ) { - continue; - }; - - $admin = new User([ - 'name' => $name, - 'email' => $email, - 'password' => $password - ]); - $admin->saveOrFail(); - - $this->info('User created.'); - return 0; - } -} diff --git a/app/Console/Commands/TestMail.php b/app/Console/Commands/TestMail.php new file mode 100644 index 0000000..3b5bfee --- /dev/null +++ b/app/Console/Commands/TestMail.php @@ -0,0 +1,35 @@ +to('equipe.web@ldc.fr')->subject('Test Email'); + }); + } +} diff --git a/app/Console/Commands/UserCreate.php b/app/Console/Commands/UserCreate.php new file mode 100644 index 0000000..9d39b03 --- /dev/null +++ b/app/Console/Commands/UserCreate.php @@ -0,0 +1,178 @@ +firstname = null; + $this->addFirstname(); + + $this->lastname = null; + $this->addLastname(); + + $this->email = null; + $this->addEmail(); + + $this->password = null; + $this->addPassword(); + + $user = new User([ + 'firstname' => $this->firstname, + 'lastname' => $this->lastname, + 'email' => $this->email, + 'password' => $this->password, + 'last_connection' => Carbon::now(), + ]); + $user->saveOrFail(); + + $this->info('User created 👌'); + + return 0; + } + + /** + * Add a firstname to the user. + * + * @return void + */ + private function addFirstname(): void + { + while (is_null($this->firstname)) { + try { + $tmp = $this->ask('Type the wanted user firstname', 'Admin'); + $validator = Validator::make(['firstname' => $tmp], [ + 'firstname' => 'required|min:3|max:255' + ]); + $validator->validate(); + $this->firstname = $tmp; + } catch (ValidationException $e) { + $this->error(sprintf( + 'Please provide a valid firstname %s', + \implode(',', collect($e->errors())->flatten()->all()) + )); + continue; + } //end try + }; //end while + } + + /** + * Add a lastname to the user. + * + * @return void + */ + private function addLastname(): void + { + while (is_null($this->lastname)) { + try { + $tmp = $this->ask('Type the wanted user lastname', 'Saïtama'); + $validator = Validator::make(['lastname' => $tmp], [ + 'lastname' => 'required|min:3|max:255' + ]); + $validator->validate(); + $this->lastname = $tmp; + } catch (ValidationException $e) { + $this->error(sprintf( + 'Please provide a valid lastname %s', + \implode(',', collect($e->errors())->flatten()->all()) + )); + continue; + } //end try + }; //end while + } + + /** + * Add an email to the user. + * + * @return void + */ + private function addEmail(): void + { + while (is_null($this->email)) { + try { + $tmp = $this->ask('Type the wanted user email', 'equipe.web@ldc.fr'); + $validator = Validator::make(['email' => $tmp], [ + 'email' => 'required|unique:users,email|email:rfc,dns' + ]); + $validator->validate(); + $this->email = $tmp; + } catch (ValidationException $e) { + $this->error(sprintf( + 'Please provide a valid email %s', + \implode(',', collect($e->errors())->flatten()->all()) + )); + continue; + } //end try + }; //end while + } + + /** + * Add a password to the user. + * + * @return void + */ + private function addPassword(): void + { + while ( + ($this->password = $this->secret( + (!\is_null($this->password) ? 'Failed to confirm, ' : '') . 'Type the wanted user password' + )) !== $this->secret('Confirm the password') + ) { + continue; + }; //end while + } +} diff --git a/app/Enums/Advices/AdviceDifficultyEnum.php b/app/Enums/Advices/AdviceDifficultyEnum.php index 41982a5..e906eb4 100644 --- a/app/Enums/Advices/AdviceDifficultyEnum.php +++ b/app/Enums/Advices/AdviceDifficultyEnum.php @@ -2,40 +2,22 @@ namespace App\Enums\Advices; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self easy() - * @method static self medium() - * @method static self hard() - */ -final class AdviceDifficultyEnum extends BaseEnum +enum AdviceDifficultyEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'easy' => 0, - 'medium' => 1, - 'hard' => 2 - ]; - } + use BaseEnum; + + case easy = 0; + case medium = 1; + case hard = 2; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'easy' => trans('Facile'), - 'medium' => trans('Moyen'), - 'hard' => trans('Difficile') - ]; - } + private const LABELS = [ + self::easy->name => 'Facile', + self::medium->name => 'Moyen', + self::hard->name => 'Difficile', + ]; } diff --git a/app/Enums/Advices/AdviceTimeEnum.php b/app/Enums/Advices/AdviceTimeEnum.php index fdb4b2e..cb84c9d 100644 --- a/app/Enums/Advices/AdviceTimeEnum.php +++ b/app/Enums/Advices/AdviceTimeEnum.php @@ -2,70 +2,44 @@ namespace App\Enums\Advices; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self first() - * @method static self second() - * @method static self third() - * @method static self fourth() - */ -final class AdviceTimeEnum extends BaseEnum +enum AdviceTimeEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'first' => 1, - 'second' => 2, - 'third' => 3, - 'fourth' => 4, - ]; - } + use BaseEnum; + + case first = 1; + case second = 2; + case third = 3; + case fourth = 4; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'first' => trans('0 - 30min'), - 'second' => trans('31min - 2h'), - 'third' => trans('2h - 4h'), - 'fourth' => trans('> 4h'), - ]; - } + private const LABELS = [ + self::first->name => '0 - 30min', + self::second->name => '31min - 2h', + self::third->name => '2h - 4h', + self::fourth->name => '> 4h', + ]; /** - * Enum times - * - * @return array + * Optionnal labels definition. */ - protected static function times(): array - { - return [ - 'first' => [0, 30], - 'second' => [31, 120], - 'third' => [120, 240], - 'fourth' => [240, 1440] - ]; - } + private const TIMES = [ + 'first' => [0, 30], + 'second' => [31, 120], + 'third' => [120, 240], + 'fourth' => [240, 1440] + ]; /** - * @param string $attribute - * @return integer|string + * Get time. + * + * @return string */ - public function __get(string $attribute) + public function times(): string { - if ($attribute === 'times') { - return $this->times()[$this->getDefinition()] ?? null; - } - return parent::__get($attribute); + return self::TIMES[$this->name]; } } diff --git a/app/Enums/Advices/AdviceTypeEnum.php b/app/Enums/Advices/AdviceTypeEnum.php index f39e79e..43dfcf2 100644 --- a/app/Enums/Advices/AdviceTypeEnum.php +++ b/app/Enums/Advices/AdviceTypeEnum.php @@ -2,40 +2,22 @@ namespace App\Enums\Advices; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self all() - * @method static self recipes() - * @method static self tips() - */ -final class AdviceTypeEnum extends BaseEnum +enum AdviceTypeEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'all' => 0, - 'recipes' => 1, - 'tips' => 2, - ]; - } + use BaseEnum; + + case all = 0; + case recipes = 1; + case tips = 2; /** - * Enum labels - * - * @return array + * Optionnal labels definition */ - protected static function labels(): array - { - return [ - 'all' => trans('Recettes / Astuces'), - 'recipes' => trans('Recettes'), - 'tips' => trans('Astuces'), - ]; - } + private const LABELS = [ + self::all->name => 'Recettes / Astuces', + self::recipes->name => 'Recettes', + self::tips->name => 'Astuces', + ]; } diff --git a/app/Enums/Contact/ContactActivityEnum.php b/app/Enums/Contact/ContactActivityEnum.php index f255afd..95d970c 100644 --- a/app/Enums/Contact/ContactActivityEnum.php +++ b/app/Enums/Contact/ContactActivityEnum.php @@ -2,49 +2,28 @@ namespace App\Enums\Contact; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self distributeur() - * @method static self restaurationSociale() - * @method static self restaurationCommerciale() - * @method static self boulangeriePatisserie() - * @method static self journaliste() - * @method static self autre() - */ -final class ContactActivityEnum extends BaseEnum +enum ContactActivityEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'distributeur' => 1, - 'restaurationSociale' => 2, - 'restaurationCommerciale' => 3, - 'boulangeriePatisserie' => 4, - 'journaliste' => 5, - 'autre' => 6 - ]; - } + use BaseEnum; + + case distributeur = 1; + case restaurationSociale = 2; + case restaurationCommerciale = 3; + case boulangeriePatisserie = 4; + case journaliste = 5; + case autre = 6; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'distributeur' => trans('Distributeur'), - 'restaurationSociale' => trans('Restauration sociale'), - 'restaurationCommerciale' => trans('Restauration commerciale'), - 'boulangeriePatisserie' => trans('Boulangerie-pâtisserie'), - 'journaliste' => trans('Journaliste'), - 'autre' => trans('Autre'), - ]; - } + private const LABELS = [ + self::distributeur->name => 'Distributeur', + self::restaurationSociale->name => 'Restauration sociale', + self::restaurationCommerciale->name => 'Restauration commerciale', + self::boulangeriePatisserie->name => 'Boulangerie-pâtisserie', + self::journaliste->name => 'Journaliste', + self::autre->name => 'Autre', + ]; } diff --git a/app/Enums/Contact/ContactTimeEnum.php b/app/Enums/Contact/ContactTimeEnum.php index 4224f52..f10a314 100644 --- a/app/Enums/Contact/ContactTimeEnum.php +++ b/app/Enums/Contact/ContactTimeEnum.php @@ -2,40 +2,22 @@ namespace App\Enums\Contact; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self morning() - * @method static self afternoon() - * @method static self anytime() - */ -final class ContactTimeEnum extends BaseEnum +enum ContactTimeEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'morning' => 1, - 'afternoon' => 2, - 'anytime' => 3, - ]; - } + use BaseEnum; + + case morning = 1; + case afternoon = 2; + case anytime = 3; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'morning' => trans('Le matin'), - 'afternoon' => trans('L\'après-midi'), - 'anytime' => trans('À tout moment'), - ]; - } + private const LABELS = [ + self::morning->name => 'Le matin', + self::afternoon->name => 'L\'après-midi', + self::anytime->name => 'À tout moment', + ]; } diff --git a/app/Enums/ExpertiseProducts/ExpertiseProductPageEnum.php b/app/Enums/ExpertiseProducts/ExpertiseProductPageEnum.php index 137e95f..4fcfd71 100644 --- a/app/Enums/ExpertiseProducts/ExpertiseProductPageEnum.php +++ b/app/Enums/ExpertiseProducts/ExpertiseProductPageEnum.php @@ -2,46 +2,26 @@ namespace App\Enums\ExpertiseProducts; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self duck() - * @method static self turkey() - * @method static self rabbit() - * @method static self guineafowl() - * @method static self chicken() - */ -final class ExpertiseProductPageEnum extends BaseEnum +enum ExpertiseProductPageEnum: int { - /** - * Enum values - * - * @return array - */ - protected static function values(): array - { - return [ - 'duck' => 0, - 'turkey' => 1, - 'rabbit' => 2, - 'guineafowl' => 3, - 'chicken' => 4, - ]; - } + use BaseEnum; + + case duck = 0; + case turkey = 1; + case rabbit = 2; + case guineafowl = 3; + case chicken = 4; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'duck' => trans('Canard'), - 'turkey' => trans('Dinde'), - 'rabbit' => trans('Lapin'), - 'guineafowl' => trans('Pintade'), - 'chicken' => trans('Poulet'), - ]; - } + private const LABELS = [ + self::duck->name => 'Canard', + self::turkey->name => 'Dinde', + self::rabbit->name => 'Lapin', + self::guineafowl->name => 'Pintade', + self::chicken->name => 'Poulet', + ]; } diff --git a/app/Enums/NutriscoreEnum.php b/app/Enums/NutriscoreEnum.php index b325c77..66b1327 100644 --- a/app/Enums/NutriscoreEnum.php +++ b/app/Enums/NutriscoreEnum.php @@ -2,52 +2,28 @@ namespace App\Enums; -use Kwaadpepper\Enum\BaseEnum; +use App\Traits\Enums\BaseEnum; -/** - * @method static self noLetter() - * @method static self aLetter() - * @method static self bLetter() - * @method static self cLetter() - * @method static self dLetter() - * @method static self eLetter() - */ -final class NutriscoreEnum extends BaseEnum +enum NutriscoreEnum: int { - // @phpcs:ignore Generic.Commenting.Fixme.TaskFound - // FIXME: faire en sorte de ne pas afficher le nutriscore en front si sa valeur est de 0. + use BaseEnum; + + case noLetter = 0; + case aLetter = 1; + case bLetter = 2; + case cLetter = 3; + case dLetter = 4; + case eLetter = 5; /** - * Enum values - * - * @return array + * Optionnal labels definition. */ - protected static function values(): array - { - return [ - 'noLetter' => 0, - 'aLetter' => 1, - 'bLetter' => 2, - 'cLetter' => 3, - 'dLetter' => 4, - 'eLetter' => 5 - ]; - } - - /** - * Enum labels - * - * @return array - */ - protected static function labels(): array - { - return [ - 'noLetter' => 'Ø', - 'aLetter' => 'A', - 'bLetter' => 'B', - 'cLetter' => 'C', - 'dLetter' => 'D', - 'eLetter' => 'E' - ]; - } + private const LABELS = [ + self::noLetter->name => 'Ø', + self::aLetter->name => 'A', + self::bLetter->name => 'B', + self::cLetter->name => 'C', + self::dLetter->name => 'D', + self::eLetter->name => 'E' + ]; } diff --git a/app/Enums/Pagination/ItemsPerPaginationEnum.php b/app/Enums/Pagination/ItemsPerPaginationEnum.php new file mode 100644 index 0000000..b1682f8 --- /dev/null +++ b/app/Enums/Pagination/ItemsPerPaginationEnum.php @@ -0,0 +1,16 @@ + 0, - 'canard' => 1, - 'canette' => 2, - 'coq' => 3, - 'coquelet' => 4, - 'dinde' => 5, - 'lapin' => 6, - 'pigeonneau' => 7, - 'pintade' => 8, - 'poule' => 9, - 'poulet' => 10, - ]; - } + use BaseEnum; + + case caille = 0; + case canard = 1; + case canette = 2; + case coq = 3; + case coquelet = 4; + case dinde = 5; + case lapin = 6; + case pigeonneau = 7; + case pintade = 8; + case poule = 9; + case poulet = 10; /** - * Enum labels - * - * @return array + * Optionnal labels definition. */ - protected static function labels(): array - { - return [ - 'caille' => trans('Caille'), - 'canard' => trans('Canard'), - 'canette' => trans('Canette'), - 'coq' => trans('Coq'), - 'coquelet' => trans('Coquelet'), - 'dinde' => trans('Dinde'), - 'lapin' => trans('Lapin'), - 'pigeonneau' => trans('Pigeonneau'), - 'pintade' => trans('Pintade'), - 'poule' => trans('Poule'), - 'poulet' => trans('Poulet') - ]; - } + private const LABELS = [ + self::caille->name => 'Caille', + self::canard->name => 'Canard', + self::canette->name => 'Canette', + self::coq->name => 'Coq', + self::coquelet->name => 'Coquelet', + self::dinde->name => 'Dinde', + self::lapin->name => 'Lapin', + self::pigeonneau->name => 'Pigeonneau', + self::pintade->name => 'Pintade', + self::poule->name => 'Poule', + self::poulet->name => 'Poulet' + ]; } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index a7aaec8..220b3d7 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,18 +3,26 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; +use Throwable; class Handler extends ExceptionHandler { + /** + * A list of exception types with their corresponding custom log levels. + * + * @var array, \Psr\Log\LogLevel::*> + */ + protected $levels = []; + /** * A list of the exception types that are not reported. * - * @var array> + * @var array> */ protected $dontReport = []; /** - * A list of the inputs that are never flashed for validation exceptions. + * A list of the inputs that are never flashed to the session on validation exceptions. * * @var array */ @@ -31,7 +39,7 @@ class Handler extends ExceptionHandler */ public function register() { - $this->reportable(function (\Throwable $e) { + $this->reportable(function (Throwable $e) { if (app()->bound('sentry')) { app('sentry')->captureException($e); } diff --git a/app/Http/Controllers/Bo/AdviceController.php b/app/Http/Controllers/Bo/AdviceController.php index 7e7e1d5..4def99a 100644 --- a/app/Http/Controllers/Bo/AdviceController.php +++ b/app/Http/Controllers/Bo/AdviceController.php @@ -21,91 +21,96 @@ class AdviceController extends Controller /** * Display a listing of the resource. * - * @param Request $request - * @return \Illuminate\Http\Response + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { /** @var \Illuminate\Database\Eloquent\Builder $advice */ - $advice = Advice::query(); - $type = $request->type; - $currentType = AdviceTypeEnum::make(\intval($type)); - - $advice->when(isset($type), function ($advice) use ($currentType) { - $advice->where('type', '=', $currentType->value); + $adviceModels = Advice::query(); + $type = $request->type; + $currentType = AdviceTypeEnum::make(\intval($type)); + $adviceModels->when(isset($type), function ($adviceModels) use ($currentType) { + if ($currentType->value() !== AdviceTypeEnum::all->value()) { + $adviceModels->where('type', '=', $currentType->value()); + } }); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $advice, - $request->search, + $adviceModels, + $search, null, 'title' ); } - - $this->sortQuery($advice); $searchFields = trans('Titre'); - $advice = $advice->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($adviceModels); - return view('bo.pages.advice.index', compact('advice', 'currentType', 'searchFields')); + /** Custom pagination */ + $adviceModels = $this->paginate($adviceModels); + + return view('bo.pages.advice.index', compact('adviceModels', 'currentType', 'search', 'searchFields')); } /** * Show the form for creating a new resource. * * @param Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function create(Request $request) + public function create(Request $request): \Illuminate\Contracts\View\View { $advice = new Advice(); $type = $request->type; $currentType = AdviceTypeEnum::make(\intval($type)); $adviceTags = Tag::query()->select(['id', 'label', 'slug'])->get(); $adviceProducts = Product::all(); - $recipeList = Advice::where('type', '=', AdviceTypeEnum::recipes())->get(); - $tipList = Advice::where('type', '=', AdviceTypeEnum::tips())->get(); + $recipeList = Advice::where('type', '=', AdviceTypeEnum::recipes)->get(); + $tipList = Advice::where('type', '=', AdviceTypeEnum::tips)->get(); - $recipeList = collect($recipeList)->each(function (\App\Models\Advice &$value) { + $recipeList = collect($recipeList)->each(function (Advice &$value) { $value->label = $value->title; }); - $tipList = collect($tipList)->each(function (\App\Models\Advice &$value) { + $tipList = collect($tipList)->each(function (Advice &$value) { $value->label = $value->title; }); $recipesSelected = collect([]); $tipsSelected = collect([]); collect($advice->advices)->each(function ($eltAdvice) use (&$recipesSelected, &$tipsSelected) { - if ($eltAdvice->type->value == AdviceTypeEnum::recipes()->value) { + if ($eltAdvice->type->value == AdviceTypeEnum::recipes->value()) { $eltAdvice->label = $eltAdvice->title; $recipesSelected = $recipesSelected->concat([$eltAdvice]); - } elseif ($eltAdvice->type->value == AdviceTypeEnum::tips()->value) { + } elseif ($eltAdvice->type->value == AdviceTypeEnum::tips->value()) { $eltAdvice->label = $eltAdvice->title; $tipsSelected = $tipsSelected->concat([$eltAdvice]); } }); return view('bo.pages.advice.create', [ - 'advice' => $advice, - 'currentType' => $currentType, - 'adviceTags' => $adviceTags, - 'adviceProducts' => $adviceProducts, - 'recipeList' => $recipeList, - 'tipList' => $tipList, + 'adviceModel' => $advice, + 'currentType' => $currentType, + 'adviceTags' => $adviceTags, + 'adviceProducts' => $adviceProducts, + 'recipeList' => $recipeList, + 'tipList' => $tipList, 'recipesSelected' => $recipesSelected, - 'tipsSelected' => $tipsSelected, + 'tipsSelected' => $tipsSelected, ]); } /** * Store a newly created resource in storage. * - * @param \App\Http\Requests\Bo\Advice\StoreAdviceRequest $request - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\Advice\StoreAdviceRequest $request + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreAdviceRequest $request) + public function store(StoreAdviceRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $advice = new Advice(); @@ -120,17 +125,16 @@ class AdviceController extends Controller return redirect() ->route('bo.advice.edit', $advice) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular($currentType->label)] + ->with('success', __( + 'crud.messages.has_been_created', + ['model' => Str::singular($currentType->label())] )); } - return redirect() ->back() - ->with('error', trans( - ':model n\'a pas été créé', - ['model' => Str::singular($currentType->label)] + ->with('error', __( + 'crud.messages.cannot_be_created', + ['model' => Str::singular($currentType->label())] )); }); } @@ -139,27 +143,27 @@ class AdviceController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\Advice $advice - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(Advice $advice) + public function edit(Advice $advice): \Illuminate\Contracts\View\View { $currentType = $advice->type; $adviceTags = Tag::whereNotIn('id', $advice->tags()->pluck('id')) ->select(['id', 'label', 'slug'])->get(); $adviceProducts = Product::all(); $recipeList = Advice::where([ - ['type', '=', AdviceTypeEnum::recipes()], + ['type', '=', AdviceTypeEnum::recipes], ['id', '!=', $advice->id], ])->get(); $tipList = Advice::where([ - ['type', '=', AdviceTypeEnum::tips()], + ['type', '=', AdviceTypeEnum::tips], ['id', '!=', $advice->id], ])->get(); - $recipeList = collect($recipeList)->each(function (\App\Models\Advice &$value) { + $recipeList = collect($recipeList)->each(function (Advice &$value) { $value->label = $value->title; }); - $tipList = collect($tipList)->each(function (\App\Models\Advice &$value) { + $tipList = collect($tipList)->each(function (Advice &$value) { $value->label = $value->title; }); @@ -176,25 +180,25 @@ class AdviceController extends Controller }); return view('bo.pages.advice.edit', [ - 'advice' => $advice, - 'currentType' => $currentType, - 'adviceTags' => $adviceTags, - 'adviceProducts' => $adviceProducts, - 'recipeList' => $recipeList, - 'tipList' => $tipList, + 'adviceModel' => $advice, + 'currentType' => $currentType, + 'adviceTags' => $adviceTags, + 'adviceProducts' => $adviceProducts, + 'recipeList' => $recipeList, + 'tipList' => $tipList, 'recipesSelected' => $recipesSelected, - 'tipsSelected' => $tipsSelected, + 'tipsSelected' => $tipsSelected, ]); } /** * Update the specified resource in storage. * - * @param \App\Http\Requests\Bo\Advice\UpdateAdviceRequest $request - * @param \App\Models\Advice $advice - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\Advice\UpdateAdviceRequest $request + * @param \App\Models\Advice $advice + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateAdviceRequest $request, Advice $advice) + public function update(UpdateAdviceRequest $request, Advice $advice): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $advice) { $advice->tags()->sync(collect($request->tags)->pluck('id')); @@ -209,16 +213,16 @@ class AdviceController extends Controller return redirect() ->route('bo.advice.edit', $advice) ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular($currentType->label)] + 'crud.messages.has_been_updated', + ['model' => Str::singular($currentType->label())] )); } return redirect() ->back() ->with('error', trans( - ':model n\'a pas été mis à jour', - ['model' => Str::singular($currentType->label)] + 'crud.messages.cannot_be_updated', + ['model' => Str::singular($currentType->label())] )); }); } @@ -226,32 +230,32 @@ class AdviceController extends Controller /** * Remove the specified resource from storage. * - * @param \App\Models\Advice $advice - * @return \Illuminate\Http\Response + * @param \App\Models\Advice $advice + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(Advice $advice) + public function destroy(Advice $advice): \Illuminate\Http\RedirectResponse { DB::table('advice_advice')->where($advice->advices()->getRelatedPivotKeyName(), $advice->id)->delete(); $advice->tags()->sync([]); $advice->products()->sync([]); $advice->advices()->sync([]); - $currentType = AdviceTypeEnum::make(\intval($advice->type->value)); + $currentType = AdviceTypeEnum::make(\intval($advice->type->value())); if ($advice->deleteOrFail()) { return redirect() ->route('bo.advice.index', ['type' => $currentType]) ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular($currentType->label)] + 'crud.messages.has_been_deleted', + ['model' => Str::singular($currentType->label())] )); } return redirect() ->back() ->with('error', trans( - ':model n\'a pas été supprimé', - ['model' => Str::singular($currentType->label)] + 'crud.messages.cannot_be_deleted', + ['model' => Str::singular($currentType->label())] )); } } diff --git a/app/Http/Controllers/Bo/Auth/LoginController.php b/app/Http/Controllers/Bo/Auth/LoginController.php index 187f4f3..59b4a71 100644 --- a/app/Http/Controllers/Bo/Auth/LoginController.php +++ b/app/Http/Controllers/Bo/Auth/LoginController.php @@ -3,24 +3,14 @@ namespace App\Http\Controllers\Bo\Auth; use App\Http\Controllers\Controller; -use App\Providers\RouteServiceProvider; +use Illuminate\Contracts\Auth\StatefulGuard; +use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\AuthenticatesUsers; -use Illuminate\Foundation\Auth\ThrottlesLogins; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Session; class LoginController extends Controller { use AuthenticatesUsers; - use ThrottlesLogins; - - /** - * Where to redirect users after login. - * - * @var string - */ - protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. @@ -32,68 +22,33 @@ class LoginController extends Controller $this->middleware('guest:backend')->except('logout'); } + /** + * Get the guard to be used during authentication. + * + * @return \Illuminate\Contracts\Auth\StatefulGuard + */ + protected function guard(): StatefulGuard + { + return Auth::guard('backend'); + } + /** * Show the application's login form. * - * @return \Illuminate\View\View + * @return \Illuminate\Contracts\View\View */ - public function showLoginForm() + public function showLoginForm(): View { return view('bo.auth.login'); } /** - * Attempt to log the user into the application. - * - * @param \Illuminate\Http\Request $request - * @return boolean - */ - protected function attemptLogin(Request $request) - { - return Auth::guard('backend')->attempt( - $this->credentials($request), - $request->filled('remember') - ); - } - - /** - * The user has been authenticated. - * - * @param \Illuminate\Http\Request $request - * @param null $user - * @return mixed - * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing, Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed - */ - protected function authenticated(Request $request, $user) - { - /** @var \App\Models\User|null */ - $user = Auth::guard('backend')->user(); - if ($user) { - $user->last_connection = now(); - $user->saveOrFail(); - Session::flash('info', trans('Vous êtes à présent connecté')); - } - } - - /** - * The user has logged out of the application. - * - * @param \Illuminate\Http\Request $request - * @return mixed - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - protected function loggedOut(Request $request) - { - Session::flash('info', trans('Vous êtes à présent déconnecté')); - } - - /** - * Get the post register / login redirect path. + * Where to redirect users after login. * * @return string */ - public function redirectPath() + protected function redirectTo(): string { - return response()->redirectToRoute('bo.dashboard')->getTargetUrl(); + return response()->redirectToIntended()->getTargetUrl(); } } diff --git a/app/Http/Controllers/Bo/ExpertiseProductController.php b/app/Http/Controllers/Bo/ExpertiseProductController.php index eb8fab3..b886cd9 100644 --- a/app/Http/Controllers/Bo/ExpertiseProductController.php +++ b/app/Http/Controllers/Bo/ExpertiseProductController.php @@ -16,62 +16,68 @@ class ExpertiseProductController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $vips */ - $vips = ExpertiseProduct::query(); + /** @var \Illuminate\Database\Eloquent\Builder $vipModels */ + $vipModels = ExpertiseProduct::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $vips, - $request->search, + $vipModels, + $search, null, 'label', 'title' ); } - - $this->sortQuery($vips); $searchFields = trans('Libellé, Titre'); - $vips = $vips->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($vipModels); - return view('bo.pages.vips.index', compact('vips', 'searchFields')); + /** Custom pagination */ + $vipModels = $this->paginate($vipModels); + + return view('bo.pages.vips.index', compact('vipModels', 'search', 'searchFields')); } /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @param App\Models\ExpertiseProduct $vip + * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(ExpertiseProduct $vip): \Illuminate\Contracts\View\View { - return view('bo.pages.vips.create'); + return view('bo.pages.vips.create', ['vipModel' => $vip]); } /** * Store a newly created resource in storage. * - * @param \App\Http\Requests\Bo\ExpertiseProducts\StoreExpertiseProductRequest $request - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\ExpertiseProducts\StoreExpertiseProductRequest $request + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreExpertiseProductRequest $request) + public function store(StoreExpertiseProductRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $vip = new ExpertiseProduct(); $vip->fill($request->validated()); if ($vip->saveOrFail()) { - return redirect() - ->route('bo.vips.edit', $vip) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular(trans('models.classes.vips'))] - )); + return redirect()->route('bo.vips.edit', $vip->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); } - return back(); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); }); } @@ -79,13 +85,11 @@ class ExpertiseProductController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\ExpertiseProduct $vip - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(ExpertiseProduct $vip) + public function edit(ExpertiseProduct $vip): \Illuminate\Contracts\View\View { - return view('bo.pages.vips.edit', [ - 'vip' => $vip - ]); + return view('bo.pages.vips.edit', ['vipModel' => $vip]); } /** @@ -93,41 +97,45 @@ class ExpertiseProductController extends Controller * * @param \App\Http\Requests\Bo\ExpertiseProduct\UpdateExpertiseProductRequest $request * @param \App\Models\ExpertiseProduct $vip - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateExpertiseProductRequest $request, ExpertiseProduct $vip) - { + public function update( + UpdateExpertiseProductRequest $request, + ExpertiseProduct $vip + ): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $vip) { $vip->fill($request->validated()); if ($vip->saveOrFail()) { - return redirect() - ->route('bo.vips.edit', $vip) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.vips'))] - )); + return redirect()->route('bo.vips.edit', $vip->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); } - return back(); + return redirect()->route('bo.vips.edit', $vip->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); }); } /** * Remove the specified resource from storage. * - * @param \App\Models\ExpertiseProduct $vip - * @return \Illuminate\Http\Response + * @param \App\Models\ExpertiseProduct $vip + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(ExpertiseProduct $vip) + public function destroy(ExpertiseProduct $vip): \Illuminate\Http\RedirectResponse { if ($vip->deleteOrFail()) { - return redirect() - ->route('bo.vips.index') - ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular(trans('models.classes.vips'))] - )); + return redirect()->route('bo.vips.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); } - return back(); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::singular(trans_choice('models.classes.vips', 2)) + ])); } } diff --git a/app/Http/Controllers/Bo/HomeController.php b/app/Http/Controllers/Bo/HomeController.php index 590e6c2..a182c66 100644 --- a/app/Http/Controllers/Bo/HomeController.php +++ b/app/Http/Controllers/Bo/HomeController.php @@ -7,12 +7,12 @@ use App\Http\Controllers\Controller; class HomeController extends Controller { /** - * Dashboard view + * Dashboard view. * - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Illuminate\Contracts\View\View */ - public function dashboard() + public function dashboard(): \Illuminate\Contracts\View\View { - return view('bo.pages.home'); + return view('bo.pages.homepage'); } } diff --git a/app/Http/Controllers/Bo/NewsCategoryController.php b/app/Http/Controllers/Bo/NewsCategoryController.php index e7fef72..60e8252 100644 --- a/app/Http/Controllers/Bo/NewsCategoryController.php +++ b/app/Http/Controllers/Bo/NewsCategoryController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers\Bo; use App\Http\Controllers\Controller; use App\Http\Requests\Bo\NewsCategories\UpdateNewsCategoryRequest; use App\Models\NewsCategory; -use App\Traits\Models\ChangesModelOrder; +use App\Traits\Controllers\ChangesModelOrder; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -18,40 +18,44 @@ class NewsCategoryController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $newscategories */ - $newscategories = NewsCategory::query(); + /** @var \Illuminate\Database\Eloquent\Builder $newscategoryModels */ + $newscategoryModels = NewsCategory::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $newscategories, - $request->search, + $newscategoryModels, + $search, null, 'label' ); } - - $this->sortQuery($newscategories); $searchFields = trans('Libellé'); - $newscategories = $newscategories->get(); + /** Sort columns with a query */ + $this->sortQuery($newscategoryModels); - return view('bo.pages.newscategories.index', compact('newscategories', 'searchFields')); + /** Custom pagination */ + $newscategoryModels = $this->paginate($newscategoryModels); + + return view('bo.pages.newscategories.index', compact('newscategoryModels', 'searchFields')); } /** * Show the form for editing the specified resource. * * @param \App\Models\NewsCategory $newscategory - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(NewsCategory $newscategory) + public function edit(NewsCategory $newscategory): \Illuminate\Contracts\View\View { return view('bo.pages.newscategories.edit', [ - 'newscategory' => $newscategory + 'newscategoryModel' => $newscategory ]); } @@ -60,22 +64,25 @@ class NewsCategoryController extends Controller * * @param \App\Http\Requests\Bo\NewsCategories\UpdateNewsCategoryRequest $request * @param \App\Models\NewsCategory $newscategory - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateNewsCategoryRequest $request, NewsCategory $newscategory) - { + public function update( + UpdateNewsCategoryRequest $request, + NewsCategory $newscategory + ): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $newscategory) { $newscategory->fill($request->validated()); if ($newscategory->saveOrFail()) { - return redirect() - ->route('bo.newscategories.edit', $newscategory) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.newscategories'))] - )); + return redirect()->route('bo.newscategories.edit', $newscategory->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(__('models.classes.newscategories')) + ])); } - return redirect()->back(); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(__('models.classes.newscategories')) + ])); }); } } diff --git a/app/Http/Controllers/Bo/NewsController.php b/app/Http/Controllers/Bo/NewsController.php index 72a6159..b4de532 100644 --- a/app/Http/Controllers/Bo/NewsController.php +++ b/app/Http/Controllers/Bo/NewsController.php @@ -21,17 +21,19 @@ class NewsController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $news */ - $news = News::query(); + /** @var \Illuminate\Database\Eloquent\Builder $newsModels */ + $newsModels = News::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $news, - $request->search, + $newsModels, + $search, null, 'title', 'subtitle', @@ -39,47 +41,55 @@ class NewsController extends Controller 'content2' ); } - - $this->sortQuery($news); $searchFields = trans('Titre, Sous-titre, Contenus'); - $news = $news->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($newsModels); - return view('bo.pages.news.index', compact('news', 'searchFields')); + /** Custom pagination */ + $newsModels = $this->paginate($newsModels); + + return view('bo.pages.news.index', compact('newsModels', 'searchFields')); } /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @param \App\Models\News $news + * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(News $news): \Illuminate\Contracts\View\View { - $news = new News(); + $news = $news ?? new News(); $newsCategories = NewsCategory::all(); $newsProducts = Product::all(); $newsList = News::all(); - $newsList = collect($newsList)->each(function (\App\Models\News &$value) { + $newsList = collect($newsList)->each(function (News &$value) { $value->label = $value->title; }); $newsSelected = collect([]); - collect($news->news ?? [])->each(function (\App\Models\News &$value) use (&$newsSelected) { + collect($news->news ?? [])->each(function (News &$value) use (&$newsSelected) { $value->label = $value->title; $newsSelected = $newsSelected->concat([$value]); }); - return view('bo.pages.news.create', compact('newsCategories', 'newsProducts', 'newsList')); + return view('bo.pages.news.create', [ + 'newsModel' => $news, + 'newsCategories' => $newsCategories, + 'newsProducts' => $newsProducts, + 'newsList' => $newsList, + ]); } /** * Store a newly created resource in storage. * - * @param \App\Http\Requests\Bo\News\StoreNewsRequest $request - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\News\StoreNewsRequest $request + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreNewsRequest $request) + public function store(StoreNewsRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $news = new News(); @@ -90,20 +100,15 @@ class NewsController extends Controller $news->products()->sync($request->products_list); $news->news()->sync($request->news_list); - return redirect() - ->route('bo.news.edit', $news) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->route('bo.news.edit', $news->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(__('models.classes.news')) + ])); } - - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été créé', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(__('models.classes.news')) + ])); }); } @@ -111,9 +116,9 @@ class NewsController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\News $news - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(News $news) + public function edit(News $news): \Illuminate\Contracts\View\View { $newsCategories = NewsCategory::all(); $newsProducts = Product::all(); @@ -130,21 +135,21 @@ class NewsController extends Controller }); return view('bo.pages.news.edit', [ - 'news' => $news, + 'newsModel' => $news, 'newsCategories' => $newsCategories, - 'newsProducts' => $newsProducts, - 'newsList' => $newsList, + 'newsProducts' => $newsProducts, + 'newsList' => $newsList, ]); } /** * Update the specified resource in storage. * - * @param \App\Http\Requests\Bo\News\UpdateNewsRequest $request - * @param \App\Models\News $news - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\News\UpdateNewsRequest $request + * @param \App\Models\News $news + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateNewsRequest $request, News $news) + public function update(UpdateNewsRequest $request, News $news): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $news) { $news->categories()->sync($request->categories_list); @@ -154,30 +159,25 @@ class NewsController extends Controller $news->fill($request->validated()); if ($news->saveOrFail()) { - return redirect() - ->route('bo.news.edit', $news) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->route('bo.news.edit', $news->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(__('models.classes.news')) + ])); } - - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été mis à jour', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->route('bo.news.edit', $news->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(__('models.classes.news')) + ])); }); } /** * Remove the specified resource from storage. * - * @param \App\Models\News $news - * @return \Illuminate\Http\Response + * @param \App\Models\News $news + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(News $news) + public function destroy(News $news): \Illuminate\Http\RedirectResponse { DB::table('news_news')->where($news->news()->getRelatedPivotKeyName(), $news->id)->delete(); $news->categories()->sync([]); @@ -185,19 +185,14 @@ class NewsController extends Controller $news->news()->sync([]); if ($news->deleteOrFail()) { - return redirect() - ->route('bo.news.index') - ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->route('bo.news.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::singular(__('models.classes.news')) + ])); } - - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été supprimé', - ['model' => Str::singular(trans('models.classes.news'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::singular(__('models.classes.news')) + ])); } } diff --git a/app/Http/Controllers/Bo/ProductController.php b/app/Http/Controllers/Bo/ProductController.php index fa8088c..df83701 100644 --- a/app/Http/Controllers/Bo/ProductController.php +++ b/app/Http/Controllers/Bo/ProductController.php @@ -9,7 +9,7 @@ use App\Models\Product; use App\Models\Subrange; use App\Traits\Controllers\HasPicture; use App\Traits\Controllers\UpdateModelStatus; -use App\Traits\Models\ChangesModelOrder; +use App\Traits\Controllers\ChangesModelOrder; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -24,50 +24,58 @@ class ProductController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $products */ - $products = Product::query(); + /** @var \Illuminate\Database\Eloquent\Builder $productModels */ + $productModels = Product::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $products, - $request->search, + $productModels, + $search, null, 'label' ); } - - $this->sortQuery($products); $searchFields = trans('Label'); - $products = $products->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($productModels); - return view('bo.pages.products.index', compact('products', 'searchFields')); + /** Custom pagination */ + $productModels = $this->paginate($productModels); + + return view('bo.pages.products.index', compact('productModels', 'search', 'searchFields')); } /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @param \App\Models\Product $product + * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(Product $product): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $subranges */ - $subranges = Subrange::get(); + /** @var \Illuminate\Database\Eloquent\Builder $subrangeModels */ + $subrangeModels = Subrange::get(); - return view('bo.pages.products.create', compact('subranges')); + return view('bo.pages.products.create', [ + 'productModel' => $product, + 'subrangeModels' => $subrangeModels + ]); } /** * Store a newly created resource in storage. * - * @param \App\Http\Requests\Bo\Products\StoreProductRequest $request - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\Products\StoreProductRequest $request + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreProductRequest $request) + public function store(StoreProductRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $product = new Product(); @@ -75,19 +83,15 @@ class ProductController extends Controller $this->storePictures($request, $product); if ($product->saveOrFail()) { - return redirect() - ->route('bo.products.edit', $product) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->route('bo.products.edit', $product->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(__('models.classes.products')) + ])); } - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été créé', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(__('models.classes.products')) + ])); }); } @@ -95,14 +99,17 @@ class ProductController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\Product $product - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(Product $product) + public function edit(Product $product): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $subranges */ - $subranges = Subrange::get(); + /** @var \Illuminate\Database\Eloquent\Builder $subrangeModels */ + $subrangeModels = Subrange::get(); - return view('bo.pages.products.edit', ['product' => $product], compact('subranges')); + return view('bo.pages.products.edit', [ + 'productModel' => $product, + 'subrangeModels' => $subrangeModels, + ]); } /** @@ -110,55 +117,47 @@ class ProductController extends Controller * * @param \App\Http\Requests\Bo\Products\UpdateProductRequest $request * @param \App\Models\Product $product - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateProductRequest $request, Product $product) + public function update(UpdateProductRequest $request, Product $product): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $product) { $product->fill($request->validated()); $this->storePictures($request, $product); if ($product->saveOrFail()) { - return redirect() - ->route('bo.products.edit', $product) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->route('bo.products.edit', $product->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(__('models.classes.products')) + ])); } - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été mis à jour', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->route('bo.products.edit', $product->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(__('models.classes.products')) + ])); }); } /** * Remove the specified resource from storage. * - * @param \App\Models\Product $product - * @return \Illuminate\Http\Response + * @param \App\Models\Product $product + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(Product $product) + public function destroy(Product $product): \Illuminate\Http\RedirectResponse { $product->advices()->sync([]); $product->news()->sync([]); if ($product->deleteOrFail()) { - return redirect() - ->route('bo.products.index') - ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->route('bo.products.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::singular(__('models.classes.products')) + ])); } - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été supprimé', - ['model' => Str::singular(trans('models.classes.products'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::singular(__('models.classes.products')) + ])); } } diff --git a/app/Http/Controllers/Bo/RangeController.php b/app/Http/Controllers/Bo/RangeController.php index 8d3fb46..106c706 100644 --- a/app/Http/Controllers/Bo/RangeController.php +++ b/app/Http/Controllers/Bo/RangeController.php @@ -5,7 +5,7 @@ namespace App\Http\Controllers\Bo; use App\Http\Controllers\Controller; use App\Http\Requests\Bo\Ranges\UpdateRangeRequest; use App\Models\Range; -use App\Traits\Models\ChangesModelOrder; +use App\Traits\Controllers\ChangesModelOrder; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -18,41 +18,43 @@ class RangeController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $ranges */ - $ranges = Range::query(); + /** @var \Illuminate\Database\Eloquent\Builder $rangeModels */ + $rangeModels = Range::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $ranges, - $request->search, + $rangeModels, + $search, null, 'label' ); } - - $this->sortQuery($ranges); $searchFields = trans('Libellé'); - $ranges = $ranges->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($rangeModels); - return view('bo.pages.ranges.index', compact('ranges', 'searchFields')); + /** Custom pagination */ + $rangeModels = $this->paginate($rangeModels); + + return view('bo.pages.ranges.index', compact('rangeModels', 'search', 'searchFields')); } /** * Show the form for editing the specified resource. * * @param \App\Models\Range $range - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(Range $range) + public function edit(Range $range): \Illuminate\Contracts\View\View { - return view('bo.pages.ranges.edit', [ - 'range' => $range - ]); + return view('bo.pages.ranges.edit', ['rangeModel' => $range]); } /** @@ -60,22 +62,23 @@ class RangeController extends Controller * * @param \App\Http\Requests\Bo\Ranges\UpdateRangeRequest $request * @param \App\Models\Range $range - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateRangeRequest $request, Range $range) + public function update(UpdateRangeRequest $request, Range $range): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $range) { $range->fill($request->validated()); if ($range->saveOrFail()) { - return redirect() - ->route('bo.ranges.edit', $range) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.ranges'))] - )); + return redirect()->route('bo.ranges.edit', $range->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(__('models.classes.ranges')) + ])); } - return redirect()->back(); + return redirect()->route('bo.ranges.edit', $range->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(__('models.classes.ranges')) + ])); }); } } diff --git a/app/Http/Controllers/Bo/SlideController.php b/app/Http/Controllers/Bo/SlideController.php index ba102de..603816f 100644 --- a/app/Http/Controllers/Bo/SlideController.php +++ b/app/Http/Controllers/Bo/SlideController.php @@ -6,7 +6,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Bo\Slides\StoreSlideRequest; use App\Http\Requests\Bo\Slides\UpdateSlideRequest; use App\Models\Slide; -use App\Traits\Models\ChangesModelOrder; +use App\Traits\Controllers\ChangesModelOrder; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -19,62 +19,68 @@ class SlideController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $slides */ - $slides = Slide::query(); + /** @var \Illuminate\Database\Eloquent\Builder $slideModels */ + $slideModels = Slide::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $slides, - $request->search, + $slideModels, + $search, null, 'title', 'content', ); } - - $this->sortQuery($slides); $searchFields = trans('Titre, Contenu'); - $slides = $slides->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($slideModels); - return view('bo.pages.slides.index', compact('slides', 'searchFields')); + /** Custom pagination */ + $slideModels = $this->paginate($slideModels); + + return view('bo.pages.slides.index', compact('slideModels', 'search', 'searchFields')); } /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @param App\Models\Slide $slide + * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(Slide $slide): \Illuminate\Contracts\View\View { - return view('bo.pages.slides.create'); + return view('bo.pages.slides.create', ['slideModel' => $slide]); } /** * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Slides\StoreSlideRequest $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreSlideRequest $request) + public function store(StoreSlideRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $slide = new Slide(); $slide->fill($request->validated()); if ($slide->saveOrFail()) { - return redirect() - ->route('bo.slides.edit', $slide) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular(trans('models.classes.slides'))] - )); + return redirect()->route('bo.slides.edit', $slide->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); } - return back(); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); }); } @@ -82,13 +88,11 @@ class SlideController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\Slide $slide - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(Slide $slide) + public function edit(Slide $slide): \Illuminate\Contracts\View\View { - return view('bo.pages.slides.edit', [ - 'slide' => $slide - ]); + return view('bo.pages.slides.edit', ['slideModel' => $slide]); } /** @@ -96,22 +100,23 @@ class SlideController extends Controller * * @param \App\Http\Requests\Bo\Slides\UpdateSlideRequest $request * @param \App\Models\Slide $slide - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateSlideRequest $request, Slide $slide) + public function update(UpdateSlideRequest $request, Slide $slide): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $slide) { $slide->fill($request->validated()); if ($slide->saveOrFail()) { - return redirect() - ->route('bo.slides.edit', $slide) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.slides'))] - )); + return redirect()->route('bo.slides.edit', $slide->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); } - return redirect()->back(); + return redirect()->route('bo.slides.edit', $slide->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); }); } @@ -119,18 +124,19 @@ class SlideController extends Controller * Remove the specified resource from storage. * * @param \App\Models\Slide $slide - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(Slide $slide) + public function destroy(Slide $slide): \Illuminate\Http\RedirectResponse { if ($slide->deleteOrFail()) { - return redirect() - ->route('bo.slides.index') - ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular(trans('models.classes.slides'))] - )); + return redirect()->route('bo.slides.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); } - return redirect()->back()->with('error', trans('Suppression impossible')); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::singular(__('models.classes.slides')) + ])); } } diff --git a/app/Http/Controllers/Bo/TagController.php b/app/Http/Controllers/Bo/TagController.php index 7b7bb70..bf875c5 100644 --- a/app/Http/Controllers/Bo/TagController.php +++ b/app/Http/Controllers/Bo/TagController.php @@ -16,67 +16,67 @@ class TagController extends Controller * Display a listing of the resource. * * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { - /** @var \Illuminate\Database\Eloquent\Builder $tags */ - $tags = Tag::query(); + /** @var \Illuminate\Database\Eloquent\Builder $tagModels */ + $tagModels = Tag::query(); - if ($request->search) { + /** @var string $search Search field */ + $search = $request->search; + if ($search) { $this->searchQuery( - $tags, - $request->search, + $tagModels, + $search, null, 'label' ); } - - $this->sortQuery($tags); $searchFields = trans('Nom'); - $tags = $tags->paginate(10); + /** Sort columns with a query */ + $this->sortQuery($tagModels); - return view('bo.pages.tags.index', compact('tags', 'searchFields')); + /** Custom pagination */ + $tagModels = $this->paginate($tagModels); + + return view('bo.pages.tags.index', compact('tagModels', 'search', 'searchFields')); } /** * Show the form for creating a new resource. * - * @return \Illuminate\Http\Response + * @param \App\Models\Tag $tag + * @return \Illuminate\Contracts\View\View */ - public function create() + public function create(Tag $tag): \Illuminate\Contracts\View\View { - return view('bo.pages.tags.create'); + return view('bo.pages.tags.create', ['tagModel' => $tag]); } /** * Store a newly created resource in storage. * - * @param \App\Http\Requests\Bo\Tags\StoreTagRequest $request - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\Tags\StoreTagRequest $request + * @return \Illuminate\Http\RedirectResponse */ - public function store(StoreTagRequest $request) + public function store(StoreTagRequest $request): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request) { $tag = new Tag(); $tag->fill($request->validated()); if ($tag->saveOrFail()) { - return redirect() - ->route('bo.tags.edit', $tag) - ->with('success', trans( - ':model a été créé', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->route('bo.tags.edit', $tag->id) + ->with('success', __('crud.messages.has_been_created', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); } - - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été créé', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_created', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); }); } @@ -84,9 +84,9 @@ class TagController extends Controller * Store a newly created resource in storage. * * @param \App\Http\Requests\Bo\Tags\StoreTagRequest $request - * @return \Illuminate\Http\Response + * @return \Illuminate\Http\JsonResponse */ - public function jsonStore(StoreTagRequest $request) + public function jsonStore(StoreTagRequest $request): \Illuminate\Http\JsonResponse { return DB::transaction(function () use ($request) { /** @var \App\Models\Tag */ @@ -101,66 +101,57 @@ class TagController extends Controller * Show the form for editing the specified resource. * * @param \App\Models\Tag $tag - * @return \Illuminate\Http\Response + * @return \Illuminate\Contracts\View\View */ - public function edit(Tag $tag) + public function edit(Tag $tag): \Illuminate\Contracts\View\View { return view('bo.pages.tags.edit', [ - 'tag' => $tag, + 'tagModel' => $tag, ]); } /** * Update the specified resource in storage. * - * @param \App\Http\Requests\Bo\Tags\UpdateTagRequest $request - * @param \App\Models\Tag $tag - * @return \Illuminate\Http\Response + * @param \App\Http\Requests\Bo\Tags\UpdateTagRequest $request + * @param \App\Models\Tag $tag + * @return \Illuminate\Http\RedirectResponse */ - public function update(UpdateTagRequest $request, Tag $tag) + public function update(UpdateTagRequest $request, Tag $tag): \Illuminate\Http\RedirectResponse { return DB::transaction(function () use ($request, $tag) { $tag->fill($request->validated()); if ($tag->saveOrFail()) { - return redirect() - ->route('bo.tags.edit', $tag) - ->with('success', trans( - ':model a été mis à jour', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->route('bo.tags.edit', $tag->id) + ->with('success', __('crud.messages.has_been_updated', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); } - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été mis à jour', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->route('bo.tags.edit', $tag->id) + ->with('error', __('crud.messages.cannot_be_updated', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); }); } /** * Remove the specified resource from storage. * - * @param \App\Models\Tag $tag - * @return \Illuminate\Http\Response + * @param \App\Models\Tag $tag + * @return \Illuminate\Http\RedirectResponse */ - public function destroy(Tag $tag) + public function destroy(Tag $tag): \Illuminate\Http\RedirectResponse { if ($tag->deleteOrFail()) { - return redirect() - ->route('bo.tags.index') - ->with('warning', trans( - ':model a bien été supprimé', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->route('bo.tags.index') + ->with('success', __('crud.messages.has_been_deleted', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); } - - return redirect() - ->back() - ->with('error', trans( - ':model n\'a pas été supprimée', - ['model' => Str::singular(trans('models.classes.tags'))] - )); + return redirect()->back() + ->with('error', __('crud.messages.cannot_be_deleted', [ + 'model' => Str::singular(__('models.classes.tags')) + ])); } } diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 24f290a..cedbec5 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,16 +2,14 @@ namespace App\Http\Controllers; -use App\Enums\Advices\AdviceTypeEnum; -use App\Enums\Products\ProductSpeciesEnum; -use App\Models\Advice; -use App\Models\News; -use App\Models\Product; +use App\Enums\Pagination\ItemsPerPaginationEnum; +use App\Lib\Helpers\ToolboxHelper; +use Illuminate\Contracts\Pagination\LengthAwarePaginator; use Illuminate\Database\Eloquent\Builder; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; -use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Session; use Illuminate\Support\Str; @@ -19,21 +17,19 @@ use Illuminate\Support\Str; class Controller extends BaseController { use AuthorizesRequests; - use DispatchesJobs; use ValidatesRequests; - // Back search methods. - /** * Build Search query on specified fields * splitting search into words or using whole sentence * - * @param Builder $query The eloquent query builder. - * @param string $search The query string. - * @param callable $searchQuery The query string. - * @param string ...$fields Either a simple array or a string - * in case of a string the two fields would be concatenate to make the search. - * @return Builder + * @param \Illuminate\Database\Eloquent\Builder $query The eloquent query builder. + * @param string $search The query string. + * @param callable $searchQuery The query string. + * @param string ...$fields Either a simple array or a string + * in case of a string the two fields + * would be concatenate to make the search. + * @return \Illuminate\Database\Eloquent\Builder */ protected function searchQuery( Builder $query, @@ -64,10 +60,10 @@ class Controller extends BaseController /** * Build query search on all fields * - * @param Builder $query - * @param string $search - * @param array $fields - * @return Builder + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $search + * @param array $fields + * @return \Illuminate\Database\Eloquent\Builder */ private function searchOnFields(Builder $query, string $search, array $fields): Builder { @@ -94,9 +90,9 @@ class Controller extends BaseController /** * Sort columns with a query * - * @param Builder $query - * @param array $ignore - * @return Builder + * @param \Illuminate\Database\Eloquent\Builder $query + * @param array $ignore + * @return \Illuminate\Database\Eloquent\Builder */ protected function sortQuery(Builder $query, array $ignore = []): Builder { @@ -104,11 +100,14 @@ class Controller extends BaseController $table = $query->getModel()->getTable(); if (request()->sort_col) { Session::put("$rName.sort_col", request()->sort_col); + Session::put("$rName.sorted", true); } if (request()->sort_way) { Session::put("$rName.sort_way", request()->sort_way); + Session::put("$rName.sorted", true); } if (request()->rst) { + Session::remove("$rName.sorted"); Session::remove("$rName.sort_col"); Session::remove("$rName.sort_way"); } @@ -127,91 +126,25 @@ class Controller extends BaseController return $query; } - // Front Search methods. - /** - * Get product query search + * Customize pagination with cache or config (default). * - * Par leur désignation - * Par espèce - * Par gamme - * Par ingrédients - * Par atout produits - * Par type produit - * - * @param string $search - * @return \Illuminate\Database\Eloquent\Builder + * @param \Illuminate\Database\Eloquent\Builder $query + * @param \App\Enums\Pagination\ItemsPerPaginationEnum|null $pagination + * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator */ - protected function getProductQuery(string $search): Builder + protected function paginate(Builder $query, ItemsPerPaginationEnum $pagination = null): LengthAwarePaginator { - return Product::query()->where('status', true)->where(function ($query) use ($search) { - // Par leur désignation. - $query->where('label', 'like', "%{$search}%"); - // Par ingrédients. - $query->orWhere('ingredients', 'like', "%{$search}%"); - // Par atout produits. - $query->orWhere('advantage', 'like', "%{$search}%"); - // Par gamme. - $query->orWhereHas('subrange', function (Builder $q) use ($search) { - $q->whereHas('range', function (Builder $q) use ($search) { - $q->where('label', 'like', "%{$search}%"); - }); - }); - // Par type de produit (sous gamme). - $query->orWhereHas('subrange', function (Builder $q) use ($search) { - $q->where('label', 'like', "%{$search}%"); - }); - // Par espèce. - if (\strlen($search)) { - /** @var \App\Enums\Products\ProductSpeciesEnum|null $specie */ - $specie = \collect(ProductSpeciesEnum::toArray()) - ->filter(function (ProductSpeciesEnum $specie) use ($search) { - return \strpos(Str::lower($specie->label), Str::lower($search)) !== false; - })->first(); - if ($specie) { - $query->orWhere('species', $specie); - } - } - }); - } - - /** - * Get news query search - * - * Par mots dans le titre - * Par mots dans le texte - * - * @param string $search - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function getNewsQuery(string $search): Builder - { - return News::query()->where('status', true)->where(function ($query) use ($search) { - $query->where('title', 'like', "%{$search}%"); - $query->orWhere('subtitle', 'like', "%{$search}%"); - $query->orWhere('content', 'like', "%{$search}%"); - $query->orWhere('content2', 'like', "%{$search}%"); - }); - } - - /** - * Get recipe query search - * - * Par mots dans le titre - * Par mots dans le texte de la recette - * - * @param string $search - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function getRecipeQuery(string $search): Builder - { - return Advice::query()->where('status', true) - ->where('type', '=', AdviceTypeEnum::recipes()->value) - ->where(function ($query) use ($search) { - $query->where('title', 'like', "%{$search}%"); - $query->orWhere('preparation', 'like', "%{$search}%"); - $query->orWhere('advice', 'like', "%{$search}%"); - $query->orWhere('ingredients', 'like', "%{$search}%"); - }); + $currentRoutePath = Str::slug(request()->route()->getName()); + $cacheKey = "pagination.{$currentRoutePath}"; + $pagination = $pagination ?? ItemsPerPaginationEnum::twelve; + $pagination = ToolboxHelper::getValidatedPaginate( + Cache::get($cacheKey, $pagination->value) + ); + if (Cache::get($cacheKey) !== $pagination) { + Cache::put($cacheKey, $pagination); + } + $query = $query->paginate($pagination); + return $query; } } diff --git a/app/Http/Controllers/Fo/ActivitiesController.php b/app/Http/Controllers/Fo/ActivitiesController.php index d984df0..ccb5887 100644 --- a/app/Http/Controllers/Fo/ActivitiesController.php +++ b/app/Http/Controllers/Fo/ActivitiesController.php @@ -13,7 +13,7 @@ class ActivitiesController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function sociale() + public function sociale(): \Illuminate\Contracts\View\View { // phpcs:disable $activity_title = "Restauration sociale"; @@ -43,7 +43,7 @@ class ActivitiesController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function commerciale() + public function commerciale(): \Illuminate\Contracts\View\View { // phpcs:disable $activity_title = "Restauration commerciale"; @@ -55,7 +55,7 @@ class ActivitiesController extends Controller La pintade et le canard pour des repas gourmands.

Des produits cuits pour plus de praticité et des services rapides.

Une large gamme de pané pour la création de burger.

- Ou encore de nombreux produits pour la réalisation des menu enfants."; + Ou encore de nombreux produits pour la réalisation des menu enfants."; // phpcs:enable $activity_image = "restau-commerciale.jpg"; @@ -77,7 +77,7 @@ class ActivitiesController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function distributeur() + public function distributeur(): \Illuminate\Contracts\View\View { // phpcs:disable $activity_title = "Distributeur"; @@ -108,7 +108,7 @@ class ActivitiesController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function boulangerie() + public function boulangerie(): \Illuminate\Contracts\View\View { // phpcs:disable $activity_title = "Boul Pat"; diff --git a/app/Http/Controllers/Fo/AdnController.php b/app/Http/Controllers/Fo/AdnController.php index 67d6dd4..becf04c 100644 --- a/app/Http/Controllers/Fo/AdnController.php +++ b/app/Http/Controllers/Fo/AdnController.php @@ -11,7 +11,7 @@ class AdnController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.adn.adn'); } @@ -21,7 +21,7 @@ class AdnController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function story() + public function story(): \Illuminate\Contracts\View\View { return view('fo.pages.adn.story'); } @@ -31,7 +31,7 @@ class AdnController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function btob() + public function btob(): \Illuminate\Contracts\View\View { return view('fo.pages.adn.btob'); } @@ -41,7 +41,7 @@ class AdnController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function breeder() + public function breeder(): \Illuminate\Contracts\View\View { return view('fo.pages.adn.breeder'); } diff --git a/app/Http/Controllers/Fo/BreederController.php b/app/Http/Controllers/Fo/BreederController.php index b2a0148..0d9fdfb 100644 --- a/app/Http/Controllers/Fo/BreederController.php +++ b/app/Http/Controllers/Fo/BreederController.php @@ -11,7 +11,7 @@ class BreederController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.breeder'); } diff --git a/app/Http/Controllers/Fo/BusinessController.php b/app/Http/Controllers/Fo/BusinessController.php index 2e694ad..003ea96 100644 --- a/app/Http/Controllers/Fo/BusinessController.php +++ b/app/Http/Controllers/Fo/BusinessController.php @@ -11,7 +11,7 @@ class BusinessController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.btob'); } diff --git a/app/Http/Controllers/Fo/ContactController.php b/app/Http/Controllers/Fo/ContactController.php index e309008..373d240 100644 --- a/app/Http/Controllers/Fo/ContactController.php +++ b/app/Http/Controllers/Fo/ContactController.php @@ -17,7 +17,7 @@ class ContactController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.contact'); } diff --git a/app/Http/Controllers/Fo/EngagmentsController.php b/app/Http/Controllers/Fo/EngagmentsController.php index ff391b9..b0d65c2 100644 --- a/app/Http/Controllers/Fo/EngagmentsController.php +++ b/app/Http/Controllers/Fo/EngagmentsController.php @@ -11,7 +11,7 @@ class EngagmentsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function francais() + public function francais(): \Illuminate\Contracts\View\View { return view('fo.pages.engagments.francais'); } @@ -21,7 +21,7 @@ class EngagmentsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function eleverdurablement() + public function eleverdurablement(): \Illuminate\Contracts\View\View { return view('fo.pages.engagments.eleverdurablement'); } @@ -31,7 +31,7 @@ class EngagmentsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function biennourrir() + public function biennourrir(): \Illuminate\Contracts\View\View { return view('fo.pages.engagments.biennourrir'); } @@ -41,7 +41,7 @@ class EngagmentsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function respecterlaterre() + public function respecterlaterre(): \Illuminate\Contracts\View\View { return view('fo.pages.engagments.respecterlaterre'); } @@ -51,7 +51,7 @@ class EngagmentsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function vivreensemble() + public function vivreensemble(): \Illuminate\Contracts\View\View { return view('fo.pages.engagments.vivreensemble'); } diff --git a/app/Http/Controllers/Fo/ExpertiseController.php b/app/Http/Controllers/Fo/ExpertiseController.php index 299789e..ea4716f 100644 --- a/app/Http/Controllers/Fo/ExpertiseController.php +++ b/app/Http/Controllers/Fo/ExpertiseController.php @@ -18,19 +18,19 @@ class ExpertiseController extends Controller * @return \Illuminate\Contracts\View\View * */ - public function canard() + public function canard(): \Illuminate\Contracts\View\View { // Get VIP Products for this page. - $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::duck()->value)->get(); + $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::duck->value())->get(); $products = Product::query()->where('status', true) - ->where('species', ProductSpeciesEnum::canard()->value) + ->where('species', ProductSpeciesEnum::canard->value()) ->inRandomOrder() ->limit(3) ->with('subrange.range') ->get(); $recipes = Advice::query()->whereHas('products', function ($query) { - return $query->where('species', ProductSpeciesEnum::canard()->value); - })->where('type', AdviceTypeEnum::recipes())->limit(3)->get(); + return $query->where('species', ProductSpeciesEnum::canard->value()); + })->where('type', AdviceTypeEnum::recipes)->limit(3)->get(); return view('fo.pages.expertise.canard', compact('vip', 'products', 'recipes')); } @@ -40,19 +40,19 @@ class ExpertiseController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function dinde() + public function dinde(): \Illuminate\Contracts\View\View { // Get VIP Products for this page. - $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::turkey()->value)->get(); + $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::turkey->value())->get(); $products = Product::query()->where('status', true) - ->where('species', ProductSpeciesEnum::dinde()->value) + ->where('species', ProductSpeciesEnum::dinde->value()) ->inRandomOrder() ->limit(3) ->with('subrange.range') ->get(); $recipes = Advice::query()->whereHas('products', function ($query) { - return $query->where('species', ProductSpeciesEnum::dinde()->value); - })->where('type', AdviceTypeEnum::recipes())->limit(3)->get(); + return $query->where('species', ProductSpeciesEnum::dinde->value()); + })->where('type', AdviceTypeEnum::recipes)->limit(3)->get(); return view('fo.pages.expertise.dinde', compact('vip', 'products', 'recipes')); } @@ -62,19 +62,19 @@ class ExpertiseController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function lapin() + public function lapin(): \Illuminate\Contracts\View\View { // Get VIP Products for this page. - $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::rabbit()->value)->get(); + $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::rabbit->value())->get(); $products = Product::query()->where('status', true) - ->where('species', ProductSpeciesEnum::lapin()->value) + ->where('species', ProductSpeciesEnum::lapin->value()) ->inRandomOrder() ->limit(3) ->with('subrange.range') ->get(); $recipes = Advice::query()->whereHas('products', function ($query) { - return $query->where('species', ProductSpeciesEnum::lapin()->value); - })->where('type', AdviceTypeEnum::recipes())->limit(3)->get(); + return $query->where('species', ProductSpeciesEnum::lapin->value()); + })->where('type', AdviceTypeEnum::recipes)->limit(3)->get(); return view('fo.pages.expertise.lapin', compact('vip', 'products', 'recipes')); } @@ -84,19 +84,19 @@ class ExpertiseController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function pintade() + public function pintade(): \Illuminate\Contracts\View\View { // Get VIP Products for this page. - $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::guineafowl()->value)->get(); + $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::guineafowl->value())->get(); $products = Product::query()->where('status', true) - ->where('species', ProductSpeciesEnum::pintade()->value) + ->where('species', ProductSpeciesEnum::pintade->value()) ->inRandomOrder() ->limit(3) ->with('subrange.range') ->get(); $recipes = Advice::query()->whereHas('products', function ($query) { - return $query->where('species', ProductSpeciesEnum::pintade()->value); - })->where('type', AdviceTypeEnum::recipes())->limit(3)->get(); + return $query->where('species', ProductSpeciesEnum::pintade->value()); + })->where('type', AdviceTypeEnum::recipes)->limit(3)->get(); return view('fo.pages.expertise.pintade', compact('vip', 'products', 'recipes')); } @@ -106,19 +106,19 @@ class ExpertiseController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function poulet() + public function poulet(): \Illuminate\Contracts\View\View { // Get VIP Products for this page. - $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::chicken()->value)->get(); + $vip = ExpertiseProduct::query()->where('page', ExpertiseProductPageEnum::chicken->value())->get(); $products = Product::query()->where('status', true) - ->where('species', ProductSpeciesEnum::poulet()->value) + ->where('species', ProductSpeciesEnum::poulet->value()) ->inRandomOrder() ->limit(3) ->with('subrange.range') ->get(); $recipes = Advice::query()->whereHas('products', function ($query) { - return $query->where('species', ProductSpeciesEnum::poulet()->value); - })->where('type', AdviceTypeEnum::recipes())->limit(3)->get(); + return $query->where('species', ProductSpeciesEnum::poulet->value()); + })->where('type', AdviceTypeEnum::recipes)->limit(3)->get(); return view('fo.pages.expertise.poulet', compact('vip', 'products', 'recipes')); } diff --git a/app/Http/Controllers/Fo/HomeController.php b/app/Http/Controllers/Fo/HomeController.php index 6e82410..88b7f9e 100644 --- a/app/Http/Controllers/Fo/HomeController.php +++ b/app/Http/Controllers/Fo/HomeController.php @@ -17,14 +17,13 @@ class HomeController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { // Get Slides. /** @var \Illuminate\Database\Eloquent\Builder $slides */ $slides = Slide::query(); - $this->sortQuery($slides); $slides->orderBy('order', 'DESC'); $slides = $slides->get(); @@ -33,25 +32,25 @@ class HomeController extends Controller // VIP Products. $threeproducts = Product::where('status', true) - ->where('is_vip', true) + ->where('is_vip', true) ->take(3) ->orderBy('order', 'DESC') ->with('subrange.range') - ->get(); + ->get(); // Get Agenda. // Events starting in the future. $events = News::where('status', true) - ->where('event_start', '>', Carbon::now()) - ->orderBy('event_start', 'desc') - ->take(2)->get(); + ->where('event_start', '>', Carbon::now()) + ->orderBy('event_start', 'desc') + ->take(2)->get(); $events = $events->reverse(); foreach ($events as $event) { $event->cal_link = Link::create($event->title, $event->event_start, $event->event_end) - ->description($event->event_text) - ->ics(); + ->description($event->event_text) + ->ics(); } // Get last 3 News. diff --git a/app/Http/Controllers/Fo/IdeasController.php b/app/Http/Controllers/Fo/IdeasController.php index 0c16275..a67b950 100644 --- a/app/Http/Controllers/Fo/IdeasController.php +++ b/app/Http/Controllers/Fo/IdeasController.php @@ -11,7 +11,7 @@ class IdeasController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.ideas.ideas'); } diff --git a/app/Http/Controllers/Fo/NewsController.php b/app/Http/Controllers/Fo/NewsController.php index a463cda..2addbd9 100644 --- a/app/Http/Controllers/Fo/NewsController.php +++ b/app/Http/Controllers/Fo/NewsController.php @@ -15,7 +15,7 @@ class NewsController extends Controller * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Contracts\View\View { // Get NewsCategories. $categories = NewsCategory::orderBy('label', 'ASC')->get(); @@ -27,16 +27,16 @@ class NewsController extends Controller isset($filters_activated) and $filters_activated[0] != 'all', function ($query) use ($filters_activated) { $query->with('categories') - ->whereRelation('categories', function ($query) use ($filters_activated) { - foreach ($filters_activated as $value) { - $query->orWhere('id', 'like', $value); - } - }); + ->whereRelation('categories', function ($query) use ($filters_activated) { + foreach ($filters_activated as $value) { + $query->orWhere('id', 'like', $value); + } + }); } ) ->where('status', true) ->orderBy('created_at') - ->paginate(6); + ->paginate(6); return view('fo.pages.news.index', compact('categories', 'news', 'filters_activated')); } @@ -47,7 +47,7 @@ class NewsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function show(News $news) + public function show(News $news): \Illuminate\Contracts\View\View { $news->load('categories', 'news.categories', 'products'); $readingTime = $news->getReadingTime(); diff --git a/app/Http/Controllers/Fo/ProductsController.php b/app/Http/Controllers/Fo/ProductsController.php index daa5872..c6b9d51 100644 --- a/app/Http/Controllers/Fo/ProductsController.php +++ b/app/Http/Controllers/Fo/ProductsController.php @@ -11,11 +11,9 @@ use App\Http\Resources\Fo\Products\ProductResource; use App\Models\Product; use App\Models\Range; use Illuminate\Database\Eloquent\Builder; -use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Session; use Illuminate\Support\Str; -use Mccarlosen\LaravelMpdf\LaravelMpdf; class ProductsController extends Controller { @@ -24,7 +22,7 @@ class ProductsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { // Gammes. $ranges = Range::all(); @@ -36,9 +34,9 @@ class ProductsController extends Controller * View a specific range products * * @param \App\Models\Range $range - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Illuminate\Contracts\View\View */ - public function products(Range $range) + public function products(Range $range): \Illuminate\Contracts\View\View { $ranges = Range::query()->with('subranges')->get(); $range->load('subranges'); @@ -54,9 +52,9 @@ class ProductsController extends Controller * * @param \App\Http\Requests\Fo\Products\AjaxFilterProductsRequest $request * @param \App\Models\Range $range - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Illuminate\Http\JsonResponse */ - public function productsAjax(AjaxFilterProductsRequest $request, Range $range) + public function productsAjax(AjaxFilterProductsRequest $request, Range $range): \Illuminate\Http\JsonResponse { // * Init product query with search and status. $search = htmlspecialchars($request->query('search') ?? ''); @@ -93,9 +91,9 @@ class ProductsController extends Controller * View a specific range products * * @param \App\Models\Product $publishedProduct - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Illuminate\Contracts\View\View */ - public function show(Product $publishedProduct) + public function show(Product $publishedProduct): \Illuminate\Contracts\View\View { /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ $recipes = $publishedProduct->recipesQuery()->where('status', true)->get(); @@ -129,9 +127,9 @@ class ProductsController extends Controller * Print product commercial sheet * * @param \App\Models\Product $publishedProduct - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Symfony\Component\HttpFoundation\Response */ - public function printCommericalSheet(Product $publishedProduct) + public function printCommericalSheet(Product $publishedProduct): \Symfony\Component\HttpFoundation\Response { $title = trans('Fiche commerciale du produit : :label - :appname', [ 'label' => $publishedProduct->label, @@ -152,8 +150,10 @@ class ProductsController extends Controller * @param \App\Models\Product $publishedProduct * @return \Illuminate\Http\JsonResponse */ - public function addProductToBasket(AjaxAddProductBasket $request, Product $publishedProduct): JsonResponse - { + public function addProductToBasket( + AjaxAddProductBasket $request, + Product $publishedProduct + ): \Illuminate\Http\JsonResponse { $sessionProducts = $this->getBasketProducts(); $sessionProducts->put( $publishedProduct->id, @@ -175,7 +175,7 @@ class ProductsController extends Controller * @param string $slug * @return \Illuminate\Http\JsonResponse */ - public function removeProductFromBasket(string $slug): JsonResponse + public function removeProductFromBasket(string $slug): \Illuminate\Http\JsonResponse { $sessionProducts = $this->getBasketProducts()->filter(function (array $basketElement) use ($slug) { return $basketElement['product']->slug !== $slug and !empty($slug); @@ -209,13 +209,13 @@ class ProductsController extends Controller * @param string $title * @return \Mccarlosen\LaravelMpdf\LaravelMpdf */ - private function generateProductCommercialPdf(Product $product, string $title): LaravelMpdf + private function generateProductCommercialPdf(Product $product, string $title): \Mccarlosen\LaravelMpdf\LaravelMpdf { /** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */ $mpdf = app('laravel-mpdf'); /** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */ $pdf = $mpdf->loadView( - 'documents.product-commercial-sheet', + 'fo.documents.product-commercial-sheet', // * Dirty convert to object. [ 'title' => $title, diff --git a/app/Http/Controllers/Fo/RecipesController.php b/app/Http/Controllers/Fo/RecipesController.php index fbaf9de..c4bbdf9 100644 --- a/app/Http/Controllers/Fo/RecipesController.php +++ b/app/Http/Controllers/Fo/RecipesController.php @@ -17,7 +17,7 @@ class RecipesController extends Controller * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ - public function indexRecipes(Request $request) + public function indexRecipes(Request $request): \Illuminate\Contracts\View\View { $search_range = $request->search_range; $search_cooking_time = $request->search_cooking_time; @@ -64,11 +64,11 @@ class RecipesController extends Controller * @param \App\Models\Advice $publishedAdvice * @return \Illuminate\Contracts\View\View */ - public function show(Advice $publishedAdvice) + public function show(Advice $publishedAdvice): \Illuminate\Contracts\View\View { $recipe = $publishedAdvice; - $relatedRecipes = $publishedAdvice->advices()->where('type', '=', AdviceTypeEnum::recipes()->value)->get(); - $relatedTips = $publishedAdvice->advices()->where('type', '=', AdviceTypeEnum::tips()->value)->get(); + $relatedRecipes = $publishedAdvice->advices()->where('type', '=', AdviceTypeEnum::recipes->value())->get(); + $relatedTips = $publishedAdvice->advices()->where('type', '=', AdviceTypeEnum::tips->value())->get(); return view('fo.pages.ideas.recipe', compact('recipe', 'relatedRecipes', 'relatedTips')); } diff --git a/app/Http/Controllers/Fo/SearchController.php b/app/Http/Controllers/Fo/SearchController.php index 8ed327f..955a76c 100644 --- a/app/Http/Controllers/Fo/SearchController.php +++ b/app/Http/Controllers/Fo/SearchController.php @@ -11,10 +11,10 @@ class SearchController extends Controller /** * Search input txt in products, news and recipes * - * @param Request $request + * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ - public function search(Request $request) + public function search(Request $request): \Illuminate\Contracts\View\View { $search = htmlspecialchars($request->query('search') ?? ''); $model = $request->query('model'); @@ -65,7 +65,7 @@ class SearchController extends Controller * @param string $search * @return \Illuminate\Http\Response */ - public function searchModel(string $modelName, string $search) + public function searchModel(string $modelName, string $search): \Illuminate\Contracts\View\View { $models = []; $modelList = [ diff --git a/app/Http/Controllers/Fo/StoryController.php b/app/Http/Controllers/Fo/StoryController.php index 0b7ac2c..bd00e86 100644 --- a/app/Http/Controllers/Fo/StoryController.php +++ b/app/Http/Controllers/Fo/StoryController.php @@ -11,7 +11,7 @@ class StoryController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function index() + public function index(): \Illuminate\Contracts\View\View { return view('fo.pages.story'); } diff --git a/app/Http/Controllers/Fo/TipsController.php b/app/Http/Controllers/Fo/TipsController.php index fa6bc1e..285d526 100644 --- a/app/Http/Controllers/Fo/TipsController.php +++ b/app/Http/Controllers/Fo/TipsController.php @@ -13,10 +13,10 @@ class TipsController extends Controller * * @return \Illuminate\Contracts\View\View */ - public function indexTips() + public function indexTips(): \Illuminate\Contracts\View\View { $advices = Advice::query()->with('tags') - ->where('type', AdviceTypeEnum::tips()) + ->where('type', AdviceTypeEnum::tips) ->where('status', true) ->paginate(9); return view('fo.pages.ideas.tips', \compact('advices')); @@ -26,9 +26,9 @@ class TipsController extends Controller * Display an advice * * @param \App\Models\Advice $publishedAdvice - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory + * @return \Illuminate\Contracts\View\View */ - public function show(Advice $publishedAdvice) + public function show(Advice $publishedAdvice): \Illuminate\Contracts\View\View { $publishedAdvice->load([ 'advices', 'products.subrange', 'tags' diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index ff57123..e9cafa3 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -16,7 +16,6 @@ class Kernel extends HttpKernel protected $middleware = [ \App\Http\Middleware\TrustHosts::class, \App\Http\Middleware\TrustProxies::class, - \Fruitcake\Cors\HandleCors::class, \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 5f92d81..cc5ba2f 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -3,6 +3,7 @@ namespace App\Http\Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Session; class Authenticate extends Middleware @@ -12,9 +13,8 @@ class Authenticate extends Middleware * * @param \Illuminate\Http\Request $request * @return string|null - * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing */ - protected function redirectTo($request) + protected function redirectTo(Request $request): ?string { $logins = [ 'backend' => route('bo.login') @@ -31,8 +31,10 @@ class Authenticate extends Middleware } } } - return collect($logins)->first() ?? '/'; + return route('login'); } abort(401); + + return null; } } diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php index b206f25..b6e9bbc 100644 --- a/app/Http/Middleware/EncryptCookies.php +++ b/app/Http/Middleware/EncryptCookies.php @@ -11,6 +11,5 @@ class EncryptCookies extends Middleware * * @var array */ - protected $except = [ - ]; + protected $except = []; } diff --git a/app/Http/Middleware/HtmlSanitizer.php b/app/Http/Middleware/HtmlSanitizer.php index 2fd5ca6..857ca84 100644 --- a/app/Http/Middleware/HtmlSanitizer.php +++ b/app/Http/Middleware/HtmlSanitizer.php @@ -4,6 +4,7 @@ namespace App\Http\Middleware; use App\Lib\Helpers\ToolboxHelper; use Illuminate\Http\Request; +use Symfony\Component\HttpFoundation\Response; class HtmlSanitizer { @@ -12,21 +13,34 @@ class HtmlSanitizer * * @param \Illuminate\Http\Request $request * @param \Closure $next - * @param mixed ...$params - * @return mixed + * @param string|array ...$params + * @return \Symfony\Component\HttpFoundation\Response */ - public function handle(Request $request, \Closure $next, ...$params) + public function handle(Request $request, \Closure $next, string|array ...$params): Response { $inputs = $request->all(); - array_walk_recursive($inputs, function (&$input, $name) use ($params) { + /** @var callable|null */ + $cleanInput = null; + $cleanInput = function ( + null|string|array &$input, + string $name, + ?string $rootName = null + ) use ( + $params, + &$cleanInput + ): void { + // * Nested element array + if (is_array($input)) { + array_walk_recursive($input, $cleanInput, $name); + } if (!is_string($input)) { return; } - if (in_array($name, $params)) { + if (in_array($name, $params) or in_array($rootName ?? $name, $params)) { // ? Is a json input ? if ($isJson = \json_decode($input, true) and is_array($isJson)) { // ! Decode each json field recursive. - \array_walk_recursive($isJson, function (&$item) { + \array_walk_recursive($isJson, function (string|array &$item) { if (\is_string($item)) { $item = clean($item); $item = ToolboxHelper::stripCkEditorSchemesOnMediaInputs($item); @@ -39,7 +53,8 @@ class HtmlSanitizer } else { $input = strip_tags($input); } - }); + }; + \array_walk($inputs, $cleanInput); $request->merge($inputs); return $next($request); } diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php index 389ec59..842e4b9 100644 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ b/app/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -11,6 +11,5 @@ class PreventRequestsDuringMaintenance extends Middleware * * @var array */ - protected $except = [ - ]; + protected $except = []; } diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 729e7f7..393cabe 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -4,27 +4,38 @@ namespace App\Http\Middleware; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Symfony\Component\HttpFoundation\Response; class RedirectIfAuthenticated { /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @param string|null ...$guards - * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse + * @param \Illuminate\Http\Request $request + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + * @param string|null ...$guards + * @return \Symfony\Component\HttpFoundation\Response + * @throws \RuntimeException If guard is unhandled. + * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint */ - public function handle(Request $request, \Closure $next, ...$guards) + public function handle(Request $request, \Closure $next, ...$guards): Response { - $logins = [ - 'backend' => route('bo.dashboard') - ]; + // phpcs:enable phpcs:disable $guards = empty($guards) ? [null] : $guards; foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { - return \redirect()->to($logins[$guard]); + switch ($guard) { + case 'frontend': + return \redirect()->route('fo.home'); + case 'backend': + if (!$request->routeIs('bo.*')) { + continue; + } + return \redirect()->route('bo.dashboard'); + default: + throw new \RuntimeException("Unhandled guard `{$guard}` ."); + } } } diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php index d4dc113..6b42817 100644 --- a/app/Http/Middleware/SecureHeaders.php +++ b/app/Http/Middleware/SecureHeaders.php @@ -6,6 +6,7 @@ use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\View; +use Illuminate\Support\Facades\Vite; class SecureHeaders { @@ -24,13 +25,14 @@ class SecureHeaders /** * Handle an incoming request. * - * @param \Illuminate\Http\Request $request - * @param \Closure $next - * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse + * @param \Illuminate\Http\Request $request + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next + * @return \Symfony\Component\HttpFoundation\Response + * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint */ - public function handle(Request $request, Closure $next) + public function handle(Request $request, Closure $next): \Symfony\Component\HttpFoundation\Response { - View::share('nonce', $nonce = \uniqid()); + View::share('nonce', $nonce = Vite::useCspNonce()); // * For VueJS dev tool to execute $jsDev = config('app.debug') ? "'unsafe-eval' 'unsafe-inline'" : "'nonce-$nonce'"; $reportUri = Route::has('cspReportUri') ? @@ -83,7 +85,7 @@ class SecureHeaders * @param array $headerList * @return void */ - private function removeUnwantedHeaders(array $headerList) + private function removeUnwantedHeaders(array $headerList): void { foreach ($headerList as $header) { header_remove($header); diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..83aa732 --- /dev/null +++ b/app/Http/Middleware/ValidateSignature.php @@ -0,0 +1,15 @@ + + */ + protected $except = []; +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index 9ccc677..61356d0 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -12,5 +12,6 @@ class VerifyCsrfToken extends Middleware * @var array */ protected $except = [ - ]; + '/csp-report' + ]; } diff --git a/app/Http/Requests/Bo/Advice/StoreAdviceRequest.php b/app/Http/Requests/Bo/Advice/StoreAdviceRequest.php index 8d12e32..a2727e6 100644 --- a/app/Http/Requests/Bo/Advice/StoreAdviceRequest.php +++ b/app/Http/Requests/Bo/Advice/StoreAdviceRequest.php @@ -8,7 +8,7 @@ use App\Traits\Requests\HasPicture; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Str; use Illuminate\Validation\Rule; -use Kwaadpepper\Enum\Rules\EnumIsValidRule; +use Illuminate\Validation\Rules\Enum; class StoreAdviceRequest extends FormRequest { @@ -19,7 +19,7 @@ class StoreAdviceRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -28,28 +28,29 @@ class StoreAdviceRequest extends FormRequest * Prepare the data for validation. * * @return void + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing */ - // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing - protected function prepareForValidation() + protected function prepareForValidation(): void { + //phpcs:enable $this->merge([ - 'slug' => Str::slug(strip_tags($this->title)), - 'status' => $this->status ? true : false, - 'tags' => $this->tags ?? [], - 'products' => $this->products ?? [], - 'associated_tips_list' => $this->associated_tips_list ?? [], + 'slug' => Str::slug(strip_tags($this->title)), + 'status' => $this->status ? true : false, + 'tags' => $this->tags ?? [], + 'products' => $this->products ?? [], + 'associated_tips_list' => $this->associated_tips_list ?? [], 'associated_recipes_list' => $this->associated_recipes_list ?? [], // * For sync relations - 'tags_list' => \collect($this->tags)->map(function ($value) { + 'tags_list' => \collect($this->tags)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), - 'products_list' => \collect($this->products)->map(function ($value) { + 'products_list' => \collect($this->products)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), - 'tips_list' => \collect($this->associated_tips_list)->map(function ($value) { + 'tips_list' => \collect($this->associated_tips_list)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), - 'recipes_list' => \collect($this->associated_recipes_list)->map(function ($value) { + 'recipes_list' => \collect($this->associated_recipes_list)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), ]); @@ -62,24 +63,25 @@ class StoreAdviceRequest extends FormRequest * Get the validation rules that apply to the request. * * @return array + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing */ - // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing - public function rules() + public function rules(): array { + //phpcs:enable $rules = [ - 'title' => 'required|min:3|max:255', - 'seo_title' => 'required|min:45|max:70', - 'seo_description' => 'required|min:50|max:160', - 'type' => ['required', new EnumIsValidRule(AdviceTypeEnum::class)], - 'picture_alt' => 'required_with:picture|nullable|min:3|max:255', - 'picture_title' => 'required_with:picture|nullable|min:3|max:255', - 'sticker_alt' => 'required_with:sticker|nullable|min:3|max:255', - 'sticker_title' => 'required_with:sticker|nullable|min:3|max:255', - 'sticker_sm_alt' => 'required_with:sticker_sm|nullable|min:3|max:255', - 'sticker_sm_title' => 'required_with:sticker_sm|nullable|min:3|max:255', - 'preparation' => 'required|string|min:15', - 'advice' => 'nullable|string|min:15', - 'ingredients' => [ + 'title' => 'required|min:3|max:255', + 'seo_title' => 'required|min:45|max:70', + 'seo_description' => 'required|min:50|max:160', + 'type' => ['required', new Enum(AdviceTypeEnum::class)], + 'picture_alt' => 'required_with:picture|nullable|min:3|max:255', + 'picture_title' => 'required_with:picture|nullable|min:3|max:255', + 'sticker_alt' => 'required_with:sticker|nullable|min:3|max:255', + 'sticker_title' => 'required_with:sticker|nullable|min:3|max:255', + 'sticker_sm_alt' => 'required_with:sticker_sm|nullable|min:3|max:255', + 'sticker_sm_title' => 'required_with:sticker_sm|nullable|min:3|max:255', + 'preparation' => 'required|string|min:15', + 'advice' => 'nullable|string|min:15', + 'ingredients' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) < 1 || count($value) > 15) { @@ -87,15 +89,15 @@ class StoreAdviceRequest extends FormRequest } } ], - 'ingredients.*' => 'required|array', - 'ingredients.*.value' => 'nullable|numeric|max:65535', - 'ingredients.*.label' => [ + 'ingredients.*' => 'required|array', + 'ingredients.*.value' => 'nullable|numeric|max:65535', + 'ingredients.*.label' => [ Rule::requiredIf(function () { - return $this->type === AdviceTypeEnum::recipes()->value; + return $this->type === AdviceTypeEnum::recipes->value(); }), //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { - if ($this->type == AdviceTypeEnum::recipes()->value) { + if ($this->type == AdviceTypeEnum::recipes->value()) { if (!$value) { $fail(\trans('Le champ description de l\'ingrédient doit être une chaîne de caractères.')); } @@ -106,7 +108,7 @@ class StoreAdviceRequest extends FormRequest }, 'max:255' ], - 'guests_nb' => [ + 'guests_nb' => [ //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { if ( @@ -118,23 +120,23 @@ class StoreAdviceRequest extends FormRequest } }, 'nullable', 'numeric', 'min:1', 'max:99' ], - 'youtube_title' => 'required_with:youtube_video_id|nullable|min:3|max:255', - 'youtube_video_id' => 'required_with:youtube_title|nullable|regex:%([^"&?\/\s]{11})%i', - 'cooking_time' => 'nullable|numeric|min:0|max:65535', - 'preparation_time' => [ + 'youtube_title' => 'required_with:youtube_video_id|nullable|min:3|max:255', + 'youtube_video_id' => 'required_with:youtube_title|nullable|regex:%([^"&?\/\s]{11})%i', + 'cooking_time' => 'nullable|numeric|min:0|max:65535', + 'preparation_time' => [ Rule::requiredIf(function () { - return $this->type === AdviceTypeEnum::recipes()->value; + return $this->type === AdviceTypeEnum::recipes->value(); }), 'numeric', 'min:0', 'max:65535' ], - 'difficulty' => [ + 'difficulty' => [ Rule::requiredIf(function () { - return $this->type === AdviceTypeEnum::recipes()->value; + return $this->type === AdviceTypeEnum::recipes->value(); }), - new EnumIsValidRule(AdviceDifficultyEnum::class) + new Enum(AdviceDifficultyEnum::class) ], - 'status' => 'required|boolean', - 'tags' => [ + 'status' => 'required|boolean', + 'tags' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) > 2) { @@ -142,13 +144,13 @@ class StoreAdviceRequest extends FormRequest } } ], - 'tags.*' => 'required|array', - 'tags.*.id' => 'required|numeric|exists:tags,id|distinct', - 'tags.*.label' => 'required|string', - 'products' => [ + 'tags.*' => 'required|array', + 'tags.*.id' => 'required|numeric|exists:tags,id|distinct', + 'tags.*.label' => 'required|string', + 'products' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { - if ($this->type == AdviceTypeEnum::recipes()->value) { + if ($this->type == AdviceTypeEnum::recipes->value()) { if (count($value) < 1 || count($value) > 3) { $fail(\trans('Vous devez associer 1 à 3 produits.')); } @@ -159,10 +161,10 @@ class StoreAdviceRequest extends FormRequest } } ], - 'products.*' => 'required|array', - 'products.*.value' => 'required|exists:products,id', - 'products.*.label' => 'required|string', - 'associated_tips_list' => [ + 'products.*' => 'required|array', + 'products.*.value' => 'required|exists:products,id', + 'products.*.label' => 'required|string', + 'associated_tips_list' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) > 3) { @@ -170,10 +172,10 @@ class StoreAdviceRequest extends FormRequest } } ], - 'associated_tips_list.*' => 'required|array', - 'associated_tips_list.*.value' => 'required|exists:advice,id', - 'associated_tips_list.*.label' => 'required|string', - 'associated_recipes_list' => [ + 'associated_tips_list.*' => 'required|array', + 'associated_tips_list.*.value' => 'required|exists:advice,id', + 'associated_tips_list.*.label' => 'required|string', + 'associated_recipes_list' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) > 3) { @@ -181,7 +183,7 @@ class StoreAdviceRequest extends FormRequest } } ], - 'associated_recipes_list.*' => 'required|array', + 'associated_recipes_list.*' => 'required|array', 'associated_recipes_list.*.value' => 'required|exists:advice,id', 'associated_recipes_list.*.label' => 'required|string', ]; @@ -201,30 +203,30 @@ class StoreAdviceRequest extends FormRequest public function attributes(): array { return [ - 'title' => trans('Titre'), - 'slug' => trans('Slug'), - 'seo_title' => trans('title') . ' seo', - 'seo_description' => trans('description') . ' seo', - 'tags' => trans('tag'), - 'tags.*' => trans('tag'), - 'tags.*.id' => trans('id du tag'), - 'tags.*.label' => trans('label du tag'), - 'difficulty' => trans('Difficulté'), - 'picture' => trans('Visuel'), - 'picture_alt' => trans('Attribut alt du visuel'), - 'picture_title' => trans('Titre du visuel'), - 'sticker' => trans('Vignette'), - 'sticker_alt' => trans('Attribut alt de la vignette'), - 'sticker_title' => trans('Titre de la vignette'), - 'sticker_sm' => trans('Petite vignette'), - 'sticker_sm_alt' => trans('Attribut alt de la petite vignette'), - 'sticker_sm_title' => trans('Titre de la petite vignette'), + 'title' => trans('Titre'), + 'slug' => trans('Slug'), + 'seo_title' => trans('title') . ' seo', + 'seo_description' => trans('description') . ' seo', + 'tags' => trans('tag'), + 'tags.*' => trans('tag'), + 'tags.*.id' => trans('id du tag'), + 'tags.*.label' => trans('label du tag'), + 'difficulty' => trans('Difficulté'), + 'picture' => trans('Visuel'), + 'picture_alt' => trans('Attribut alt du visuel'), + 'picture_title' => trans('Titre du visuel'), + 'sticker' => trans('Vignette'), + 'sticker_alt' => trans('Attribut alt de la vignette'), + 'sticker_title' => trans('Titre de la vignette'), + 'sticker_sm' => trans('Petite vignette'), + 'sticker_sm_alt' => trans('Attribut alt de la petite vignette'), + 'sticker_sm_title' => trans('Titre de la petite vignette'), 'ingredients.*.value' => trans('quantité de l\'ingrédient'), 'ingredients.*.label' => trans('description de l\'ingrédient'), - 'guests_nb' => trans('Nombre de convives'), - 'youtube_title' => trans('Titre de la vidéo Youtube'), - 'youtube_video_id' => trans('ID de la vidéo Youtube'), - 'advice' => trans('Conseil LGP'), + 'guests_nb' => trans('Nombre de convives'), + 'youtube_title' => trans('Titre de la vidéo Youtube'), + 'youtube_video_id' => trans('ID de la vidéo Youtube'), + 'advice' => trans('Conseil LGP'), ]; } } diff --git a/app/Http/Requests/Bo/ExpertiseProducts/StoreExpertiseProductRequest.php b/app/Http/Requests/Bo/ExpertiseProducts/StoreExpertiseProductRequest.php index 03a34e9..9267eaa 100644 --- a/app/Http/Requests/Bo/ExpertiseProducts/StoreExpertiseProductRequest.php +++ b/app/Http/Requests/Bo/ExpertiseProducts/StoreExpertiseProductRequest.php @@ -5,7 +5,7 @@ namespace App\Http\Requests\Bo\ExpertiseProducts; use App\Enums\ExpertiseProducts\ExpertiseProductPageEnum; use App\Enums\NutriscoreEnum; use Illuminate\Foundation\Http\FormRequest; -use Kwaadpepper\Enum\Rules\EnumIsValidRule; +use Illuminate\Validation\Rules\Enum; class StoreExpertiseProductRequest extends FormRequest { @@ -14,7 +14,7 @@ class StoreExpertiseProductRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -24,12 +24,12 @@ class StoreExpertiseProductRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ - 'is_frenchpoultry' => $this->is_frenchpoultry ? true : false, + 'is_frenchpoultry' => $this->is_frenchpoultry ? true : false, 'is_natureeleveurs' => $this->is_natureeleveurs ? true : false, - 'points' => $this->points ?? [] + 'points' => $this->points ?? [] ]); } @@ -38,19 +38,19 @@ class StoreExpertiseProductRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ - 'page' => ['required', new EnumIsValidRule(ExpertiseProductPageEnum::class)], - 'label' => 'required|min:3|max:255', - 'title' => 'required|min:3|max:255', - 'subtitle' => 'required|min:3|max:255', - 'points' => 'required|array', - 'points.*' => 'required|array', - 'points.*.value' => 'required|min:3|max:255', - 'is_frenchpoultry' => 'required|boolean', + 'page' => ['required', new Enum(ExpertiseProductPageEnum::class)], + 'label' => 'required|min:3|max:255', + 'title' => 'required|min:3|max:255', + 'subtitle' => 'required|min:3|max:255', + 'points' => 'required|array', + 'points.*' => 'required|array', + 'points.*.value' => 'required|min:3|max:255', + 'is_frenchpoultry' => 'required|boolean', 'is_natureeleveurs' => 'required|boolean', - 'nutriscore' => ['required', new EnumIsValidRule(NutriscoreEnum::class)] + 'nutriscore' => ['required', new Enum(NutriscoreEnum::class)] ]; } @@ -62,16 +62,16 @@ class StoreExpertiseProductRequest extends FormRequest public function attributes(): array { return [ - 'page' => trans('Espèce'), - 'label' => trans('Libellé du bloc'), - 'title' => trans('Titre dans le bloc'), - 'subtitle' => trans('Sous-titre'), - 'points' => trans('Bloc des points forts'), - 'points.*' => trans('Point fort'), - 'points.*.value' => trans('Valeur Point fort'), - 'is_frenchpoultry' => trans('Label volaille française'), + 'page' => trans('Espèce'), + 'label' => trans('Libellé du bloc'), + 'title' => trans('Titre dans le bloc'), + 'subtitle' => trans('Sous-titre'), + 'points' => trans('Bloc des points forts'), + 'points.*' => trans('Point fort'), + 'points.*.value' => trans('Valeur Point fort'), + 'is_frenchpoultry' => trans('Label volaille française'), 'is_natureeleveurs' => trans('Label nature d\'éleveur'), - 'nutriscore' => trans('Label Nutriscore') + 'nutriscore' => trans('Label Nutriscore') ]; } } diff --git a/app/Http/Requests/Bo/News/StoreNewsRequest.php b/app/Http/Requests/Bo/News/StoreNewsRequest.php index 55489c6..c80c594 100644 --- a/app/Http/Requests/Bo/News/StoreNewsRequest.php +++ b/app/Http/Requests/Bo/News/StoreNewsRequest.php @@ -15,7 +15,7 @@ class StoreNewsRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -24,28 +24,28 @@ class StoreNewsRequest extends FormRequest * Prepare the data for validation. * * @return void + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing */ - // phpcs:ignore Generic.Metrics.CyclomaticComplexity.TooHigh, Squiz.Commenting.FunctionComment.Missing - protected function prepareForValidation() + protected function prepareForValidation(): void { + //phpcs:enable $this->merge([ - 'slug' => Str::slug($this->title), - 'status' => $this->status ? true : false, - 'categories' => $this->categories ?? [], - 'products' => $this->products ?? [], + 'slug' => Str::slug($this->title), + 'status' => $this->status ? true : false, + 'categories' => $this->categories ?? [], + 'products' => $this->products ?? [], 'associated_news_list' => $this->associated_news_list ?? [], // * For sync relations - 'news_list' => \collect($this->associated_news_list)->map(function ($value) { + 'news_list' => \collect($this->associated_news_list)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), - 'products_list' => \collect($this->products)->map(function ($value) { + 'products_list' => \collect($this->products)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all(), - 'categories_list' => \collect($this->categories)->map(function ($value) { + 'categories_list' => \collect($this->categories)->map(function ($value) { return \is_array($value) ? ($value['value'] ?? null) : null; })->filter()->all() ]); - $this->mergePicture('picture'); $this->mergePicture('picture2'); } @@ -55,34 +55,34 @@ class StoreNewsRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $rules = [ - 'title' => 'required|min:3|max:255', - 'subtitle' => 'required|min:3|max:255', - 'seo_title' => 'required|min:45|max:70', - 'seo_description' => 'required|min:50|max:160', - 'picture_alt' => 'required_with:picture|nullable|min:3|max:255', - 'picture_title' => 'required_with:picture|nullable|min:3|max:255', - 'picture2_alt' => 'required_with:picture2|nullable|min:3|max:255', - 'picture2_title' => 'required_with:picture2|nullable|min:3|max:255', - 'content' => 'required_with:picture|nullable|string|min:15', - 'content2' => 'required_with:picture2|nullable|string|min:15', - 'event_start' => 'nullable|date_format:Y-m-d', - 'event_end' => [ + 'title' => 'required|min:3|max:255', + 'subtitle' => 'required|min:3|max:255', + 'seo_title' => 'required|min:45|max:70', + 'seo_description' => 'required|min:50|max:160', + 'picture_alt' => 'required_with:picture|nullable|min:3|max:255', + 'picture_title' => 'required_with:picture|nullable|min:3|max:255', + 'picture2_alt' => 'required_with:picture2|nullable|min:3|max:255', + 'picture2_title' => 'required_with:picture2|nullable|min:3|max:255', + 'content' => 'required_with:picture|nullable|string|min:15', + 'content2' => 'required_with:picture2|nullable|string|min:15', + 'event_start' => 'nullable|date_format:Y-m-d', + 'event_end' => [ 'required_with:event_start', 'after_or_equal:event_start', 'nullable', 'date_format:Y-m-d' ], - 'event_text' => [ + 'event_text' => [ 'required_with:event_start', 'nullable', 'min:3', 'max:255' ], 'status' => 'required|boolean', - 'categories' => [ + 'categories' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) < 1 || count($value) > 2) { @@ -90,10 +90,10 @@ class StoreNewsRequest extends FormRequest } } ], - 'categories.*' => 'required|array', - 'categories.*.value' => 'required|exists:news_categories,id', - 'categories.*.label' => 'required|string', - 'products' => [ + 'categories.*' => 'required|array', + 'categories.*.value' => 'required|exists:news_categories,id', + 'categories.*.label' => 'required|string', + 'products' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) > 3) { @@ -101,10 +101,10 @@ class StoreNewsRequest extends FormRequest } } ], - 'products.*' => 'required|array', - 'products.*.value' => 'required|exists:products,id', - 'products.*.label' => 'required|string', - 'associated_news_list' => [ + 'products.*' => 'required|array', + 'products.*.value' => 'required|exists:products,id', + 'products.*.label' => 'required|string', + 'associated_news_list' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) > 3) { @@ -112,7 +112,7 @@ class StoreNewsRequest extends FormRequest } } ], - 'associated_news_list.*' => 'required|array', + 'associated_news_list.*' => 'required|array', 'associated_news_list.*.value' => 'required|exists:news,id', 'associated_news_list.*.label' => 'required|string', ]; @@ -131,23 +131,23 @@ class StoreNewsRequest extends FormRequest public function attributes(): array { return [ - 'title' => trans('Titre'), - 'slug' => trans('Slug'), - 'seo_title' => trans('title') . ' seo', + 'title' => trans('Titre'), + 'slug' => trans('Slug'), + 'seo_title' => trans('title') . ' seo', 'seo_description' => trans('description') . ' seo', - 'subtitle' => trans('Sous-titre'), - 'picture' => trans('Image'), - 'picture_alt' => trans('Attribut alt de l\'image'), - 'picture_title' => trans('Titre de l\'image'), - 'picture2' => trans('Image 2'), - 'picture2_alt' => trans('Attribut alt de l\'image 2'), - 'picture2_title' => trans('Titre de l\'image 2'), - 'content' => trans('Contenu'), - 'content2' => trans('Contenu 2'), - 'event_start' => trans('Date de début de l\'évènement'), - 'event_end' => trans('Date de fin de l\'évènement'), - 'event_text' => trans('Description de l\'évènement'), - 'status' => trans('Status'), + 'subtitle' => trans('Sous-titre'), + 'picture' => trans('Image'), + 'picture_alt' => trans('Attribut alt de l\'image'), + 'picture_title' => trans('Titre de l\'image'), + 'picture2' => trans('Image 2'), + 'picture2_alt' => trans('Attribut alt de l\'image 2'), + 'picture2_title' => trans('Titre de l\'image 2'), + 'content' => trans('Contenu'), + 'content2' => trans('Contenu 2'), + 'event_start' => trans('Date de début de l\'évènement'), + 'event_end' => trans('Date de fin de l\'évènement'), + 'event_text' => trans('Description de l\'évènement'), + 'status' => trans('Status'), ]; } } diff --git a/app/Http/Requests/Bo/NewsCategories/UpdateNewsCategoryRequest.php b/app/Http/Requests/Bo/NewsCategories/UpdateNewsCategoryRequest.php index d270c5a..f6dfb95 100644 --- a/app/Http/Requests/Bo/NewsCategories/UpdateNewsCategoryRequest.php +++ b/app/Http/Requests/Bo/NewsCategories/UpdateNewsCategoryRequest.php @@ -12,7 +12,7 @@ class UpdateNewsCategoryRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -22,7 +22,7 @@ class UpdateNewsCategoryRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ 'slug' => Str::slug(strip_tags($this->label)) @@ -34,7 +34,7 @@ class UpdateNewsCategoryRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'label' => 'required|min:3|max:30', @@ -50,7 +50,7 @@ class UpdateNewsCategoryRequest extends FormRequest { return [ 'label' => trans('label'), - 'slug' => trans('slug'), + 'slug' => trans('slug'), ]; } } diff --git a/app/Http/Requests/Bo/Products/StoreProductRequest.php b/app/Http/Requests/Bo/Products/StoreProductRequest.php index 59669d5..297f3a8 100644 --- a/app/Http/Requests/Bo/Products/StoreProductRequest.php +++ b/app/Http/Requests/Bo/Products/StoreProductRequest.php @@ -7,7 +7,7 @@ use App\Enums\Products\ProductSpeciesEnum; use App\Traits\Requests\HasPicture; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Str; -use Kwaadpepper\Enum\Rules\EnumIsValidRule; +use Illuminate\Validation\Rules\Enum; class StoreProductRequest extends FormRequest { @@ -18,7 +18,7 @@ class StoreProductRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -28,14 +28,14 @@ class StoreProductRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ - 'slug' => Str::slug(strip_tags($this->name)), + 'slug' => Str::slug(strip_tags($this->name)), 'is_frenchpoultry' => $this->is_frenchpoultry ? true : false, - 'is_vip' => $this->is_vip ? true : false, - 'is_egalim' => $this->is_egalim ? true : false, - 'status' => $this->status ? true : false + 'is_vip' => $this->is_vip ? true : false, + 'is_egalim' => $this->is_egalim ? true : false, + 'status' => $this->status ? true : false ]); $this->mergePicture('sticker_sm'); } @@ -45,21 +45,21 @@ class StoreProductRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $rules = [ - 'label' => 'required|min:3|max:255', - 'seo_title' => 'required|min:45|max:70', - 'seo_description' => 'required|min:50|max:160', - 'subrange_id' => 'required', - 'species' => ['required', new EnumIsValidRule(ProductSpeciesEnum::class)], - 'nutriscore' => ['required', new EnumIsValidRule(NutriscoreEnum::class)], - 'sticker_sm_alt' => 'required|min:3|max:255', - 'sticker_sm_title' => 'required|min:3|max:255', - 'ingredients' => 'required|string|min:15', - 'advantage' => 'required|string|min:15', - 'preparation' => 'required|string|min:15', - 'packaging' => [ + 'label' => 'required|min:3|max:255', + 'seo_title' => 'required|min:45|max:70', + 'seo_description' => 'required|min:50|max:160', + 'subrange_id' => 'required', + 'species' => ['required', new Enum(ProductSpeciesEnum::class)], + 'nutriscore' => ['required', new Enum(NutriscoreEnum::class)], + 'sticker_sm_alt' => 'required|min:3|max:255', + 'sticker_sm_title' => 'required|min:3|max:255', + 'ingredients' => 'required|string|min:15', + 'advantage' => 'required|string|min:15', + 'preparation' => 'required|string|min:15', + 'packaging' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (1 > count($value) || count($value) > 6) { @@ -67,9 +67,9 @@ class StoreProductRequest extends FormRequest } } ], - 'packaging.*' => 'required|array', - 'packaging.*.value' => 'required|string|min:2|max:255', - 'caliber' => [ + 'packaging.*' => 'required|array', + 'packaging.*.value' => 'required|string|min:2|max:255', + 'caliber' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (1 > count($value) || count($value) > 6) { @@ -77,10 +77,10 @@ class StoreProductRequest extends FormRequest } } ], - 'caliber.*' => 'required|array', - 'caliber.*.value' => 'required|string|min:1|max:255', - 'nutritionnal_values' => 'required|array', - 'nutritionnal_values' => [ + 'caliber.*' => 'required|array', + 'caliber.*.value' => 'required|string|min:1|max:255', + 'nutritionnal_values' => 'required|array', + 'nutritionnal_values' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 'present', 'array', function ($attribute, array $value, $fail) { if (count($value) != 9) { @@ -88,13 +88,13 @@ class StoreProductRequest extends FormRequest } } ], - 'nutritionnal_values.*' => 'nullable|array', + 'nutritionnal_values.*' => 'nullable|array', 'nutritionnal_values.*.label' => 'nullable|string|min:3|max:255', 'nutritionnal_values.*.value' => 'nullable|numeric|min:0', - 'is_frenchpoultry' => 'required|boolean', - 'is_vip' => 'required|boolean', - 'is_egalim' => 'required|boolean', - 'status' => 'required|boolean' + 'is_frenchpoultry' => 'required|boolean', + 'is_vip' => 'required|boolean', + 'is_egalim' => 'required|boolean', + 'status' => 'required|boolean' ]; return \array_merge( $rules, @@ -111,29 +111,29 @@ class StoreProductRequest extends FormRequest public function attributes(): array { return [ - 'label' => trans('title'), - 'slug' => trans('slug'), - 'seo_title' => trans('title') . ' seo', - 'seo_description' => trans('description') . ' seo', - 'subrange_id' => trans('sous-gamme'), - 'species' => trans('Espèce du produit'), - 'nutriscore' => trans('Label Nutriscore'), - 'sticker_sm' => trans('miniature'), - 'sticker_sm_alt' => trans('attribut alt de la miniature'), - 'sticker_sm_title' => trans('titre de la miniature'), - 'slider_pictures' => trans('images du slider'), - 'slider_pictures.*' => trans('image du slider'), - 'packaging' => trans('conditionnement'), - 'packaging.*.value' => trans('valeur du conditionnement'), - 'caliber' => trans('calibre'), - 'caliber.*.value' => trans('valeur du calibre'), - 'nutritionnal_values' => trans('valeurs nutritionnelles'), + 'label' => trans('title'), + 'slug' => trans('slug'), + 'seo_title' => trans('title') . ' seo', + 'seo_description' => trans('description') . ' seo', + 'subrange_id' => trans('sous-gamme'), + 'species' => trans('Espèce du produit'), + 'nutriscore' => trans('Label Nutriscore'), + 'sticker_sm' => trans('miniature'), + 'sticker_sm_alt' => trans('attribut alt de la miniature'), + 'sticker_sm_title' => trans('titre de la miniature'), + 'slider_pictures' => trans('images du slider'), + 'slider_pictures.*' => trans('image du slider'), + 'packaging' => trans('conditionnement'), + 'packaging.*.value' => trans('valeur du conditionnement'), + 'caliber' => trans('calibre'), + 'caliber.*.value' => trans('valeur du calibre'), + 'nutritionnal_values' => trans('valeurs nutritionnelles'), 'nutritionnal_values.*.label' => trans('libellé de la valeur nutritionnelle'), 'nutritionnal_values.*.value' => trans('valeur de la valeur nutritionnelle'), - 'is_frenchpoultry' => trans('Label volaille française'), - 'is_vip' => trans('Produit VIP'), - 'is_egalim' => trans('Produit Égalim'), - 'status' => trans('publish') + 'is_frenchpoultry' => trans('Label volaille française'), + 'is_vip' => trans('Produit VIP'), + 'is_egalim' => trans('Produit Égalim'), + 'status' => trans('publish') ]; } } diff --git a/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php b/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php index 880bf4e..7c803ff 100644 --- a/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php +++ b/app/Http/Requests/Bo/Ranges/UpdateRangeRequest.php @@ -15,7 +15,7 @@ class UpdateRangeRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -25,7 +25,7 @@ class UpdateRangeRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ 'slug' => Str::slug(strip_tags($this->label)) @@ -39,16 +39,16 @@ class UpdateRangeRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $rules = [ - 'label' => 'required|min:3|max:255', - 'seo_title' => 'required|min:45|max:70', - 'seo_description' => 'required|min:50|max:160', - 'color' => 'required|color_rgba', - 'picture_alt' => 'required|min:3|max:255', - 'picture_title' => 'required|min:3|max:255', - 'picture_banner_alt' => 'required|min:3|max:255', + 'label' => 'required|min:3|max:255', + 'seo_title' => 'required|min:45|max:70', + 'seo_description' => 'required|min:50|max:160', + 'color' => 'required|color_rgba', + 'picture_alt' => 'required|min:3|max:255', + 'picture_title' => 'required|min:3|max:255', + 'picture_banner_alt' => 'required|min:3|max:255', 'picture_banner_title' => 'required|min:3|max:255', ]; return \array_merge( @@ -66,16 +66,16 @@ class UpdateRangeRequest extends FormRequest public function attributes(): array { return [ - 'label' => trans('label'), - 'slug' => trans('slug'), - 'seo_title' => trans('title') . ' seo', - 'seo_description' => trans('description') . ' seo', - 'color' => trans('couleur'), - 'picture' => trans('Illustration'), - 'picture_alt' => trans('attribut alt de l\'image'), - 'picture_title' => trans('titre de l\'image'), - 'picture_banner' => trans('bannière'), - 'picture_banner_alt' => trans('attribut alt de la bannière'), + 'label' => trans('label'), + 'slug' => trans('slug'), + 'seo_title' => trans('title') . ' seo', + 'seo_description' => trans('description') . ' seo', + 'color' => trans('couleur'), + 'picture' => trans('Illustration'), + 'picture_alt' => trans('attribut alt de l\'image'), + 'picture_title' => trans('titre de l\'image'), + 'picture_banner' => trans('bannière'), + 'picture_banner_alt' => trans('attribut alt de la bannière'), 'picture_banner_title' => trans('titre de la bannière'), ]; } diff --git a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php index adfd567..d161e86 100644 --- a/app/Http/Requests/Bo/Slides/StoreSlideRequest.php +++ b/app/Http/Requests/Bo/Slides/StoreSlideRequest.php @@ -14,7 +14,7 @@ class StoreSlideRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -24,10 +24,10 @@ class StoreSlideRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ - 'button_display' => $this->button_display ? true : false, + 'button_display' => $this->button_display ? true : false, 'button_targetblank' => $this->button_targetblank ? true : false, ]); $this->mergePicture('picture'); @@ -39,18 +39,18 @@ class StoreSlideRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $rules = [ - 'title' => 'required|min:3|max:255', - 'content' => 'required|string|min:15|max:540', - 'button_display' => 'required|boolean', - 'button_text' => 'nullable|min:3|max:45', - 'button_url' => 'nullable|min:3|max:255|url', - 'button_targetblank' => 'required|boolean', - 'picture_alt' => 'required|min:3|max:255', - 'picture_title' => 'required|min:3|max:255', - 'picture_thumbnail_alt' => 'required|min:3|max:255', + 'title' => 'required|min:3|max:255', + 'content' => 'required|string|min:15|max:540', + 'button_display' => 'required|boolean', + 'button_text' => 'nullable|min:3|max:45', + 'button_url' => 'nullable|min:3|max:255|url', + 'button_targetblank' => 'required|boolean', + 'picture_alt' => 'required|min:3|max:255', + 'picture_title' => 'required|min:3|max:255', + 'picture_thumbnail_alt' => 'required|min:3|max:255', 'picture_thumbnail_title' => 'required|min:3|max:255' ]; return \array_merge( @@ -68,17 +68,17 @@ class StoreSlideRequest extends FormRequest public function attributes(): array { return [ - 'title' => trans('title'), - 'content' => trans('contenu de la slide'), - 'button_display' => trans('afficher le bouton'), - 'button_text' => trans('texte du bouton'), - 'button_url' => trans('url du bouton'), - 'button_targetblank' => trans('ouvrir dans un nouvel onglet'), - 'picture' => trans('Illustration'), - 'picture_alt' => trans('attribut alt de l\'image'), - 'picture_title' => trans('titre de l\'image'), - 'picture_thumbnail' => trans('vignette'), - 'picture_thumbnail_alt' => trans('attribut alt de la vignette'), + 'title' => trans('title'), + 'content' => trans('contenu de la slide'), + 'button_display' => trans('afficher le bouton'), + 'button_text' => trans('texte du bouton'), + 'button_url' => trans('url du bouton'), + 'button_targetblank' => trans('ouvrir dans un nouvel onglet'), + 'picture' => trans('Illustration'), + 'picture_alt' => trans('attribut alt de l\'image'), + 'picture_title' => trans('titre de l\'image'), + 'picture_thumbnail' => trans('vignette'), + 'picture_thumbnail_alt' => trans('attribut alt de la vignette'), 'picture_thumbnail_title' => trans('titre de la vignette') ]; } diff --git a/app/Http/Requests/Bo/Tags/StoreTagRequest.php b/app/Http/Requests/Bo/Tags/StoreTagRequest.php index 8bb08ca..4b1469c 100644 --- a/app/Http/Requests/Bo/Tags/StoreTagRequest.php +++ b/app/Http/Requests/Bo/Tags/StoreTagRequest.php @@ -12,7 +12,7 @@ class StoreTagRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -22,7 +22,7 @@ class StoreTagRequest extends FormRequest * * @return void */ - public function prepareForValidation() + public function prepareForValidation(): void { $this->merge([ 'slug' => Str::slug($this->label), @@ -34,7 +34,7 @@ class StoreTagRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ 'label' => 'required|min:2|max:30', @@ -50,7 +50,7 @@ class StoreTagRequest extends FormRequest { return [ 'label' => trans('libellé'), - 'slug' => trans('slug'), + 'slug' => trans('slug'), ]; } } diff --git a/app/Http/Requests/Bo/ChangeOrderRequest.php b/app/Http/Requests/Bo/UpdateChangeOrderRequest.php similarity index 68% rename from app/Http/Requests/Bo/ChangeOrderRequest.php rename to app/Http/Requests/Bo/UpdateChangeOrderRequest.php index db70a4c..e68e88c 100644 --- a/app/Http/Requests/Bo/ChangeOrderRequest.php +++ b/app/Http/Requests/Bo/UpdateChangeOrderRequest.php @@ -4,14 +4,14 @@ namespace App\Http\Requests\Bo; use Illuminate\Foundation\Http\FormRequest; -class ChangeOrderRequest extends FormRequest +class UpdateChangeOrderRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return boolean */ - public function authorize() + public function authorize(): bool { return auth('backend')->check(); } @@ -21,10 +21,10 @@ class ChangeOrderRequest extends FormRequest * * @return void */ - protected function prepareForValidation() + protected function prepareForValidation(): void { $this->merge([ - 'direction' => $this->action === 'up' ? true : false + 'direction' => $this->direction === 'up' ? true : false ]); } @@ -33,10 +33,9 @@ class ChangeOrderRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ - 'action' => 'required|string|in:up,down', 'direction' => 'required|boolean', ]; } diff --git a/app/Http/Requests/Fo/Contact/ContactRequest.php b/app/Http/Requests/Fo/Contact/ContactRequest.php index a12f906..dd323ea 100644 --- a/app/Http/Requests/Fo/Contact/ContactRequest.php +++ b/app/Http/Requests/Fo/Contact/ContactRequest.php @@ -6,7 +6,7 @@ use App\Enums\Contact\ContactActivityEnum; use App\Enums\Contact\ContactTimeEnum; use App\Lib\Helpers\ToolboxHelper; use Illuminate\Foundation\Http\FormRequest; -use Kwaadpepper\Enum\Rules\EnumIsValidRule; +use Illuminate\Validation\Rules\Enum; class ContactRequest extends FormRequest { @@ -15,7 +15,7 @@ class ContactRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return true; } @@ -25,22 +25,22 @@ class ContactRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version')); return [ 'firstname' => 'nullable|min:2|max:255', - 'lastname' => 'required|min:2|max:255', - 'email' => 'required|email:rfc,dns,spoof|max:255', - 'phone' => 'required|max:255|phone:' . implode(',', $this->isoCodes()), - 'activity' => ['required', new EnumIsValidRule(ContactActivityEnum::class)], - 'society' => 'nullable|string|max:255', - 'postcode' => 'nullable|postal_code:' . implode(',', $this->isoCodes()), - 'city' => 'nullable|string|max:255', - 'message' => 'required|string|min:20|max:255', - 'callTime' => ['required', new EnumIsValidRule(ContactTimeEnum::class)], - 'rgpd' => 'accepted' + 'lastname' => 'required|min:2|max:255', + 'email' => 'required|email:rfc,dns,spoof|max:255', + 'phone' => 'required|max:255|phone:' . implode(',', $this->isoCodes()), + 'activity' => ['required', new Enum(ContactActivityEnum::class)], + 'society' => 'nullable|string|max:255', + 'postcode' => 'nullable|postal_code:' . implode(',', $this->isoCodes()), + 'city' => 'nullable|string|max:255', + 'message' => 'required|string|min:20|max:255', + 'callTime' => ['required', new Enum(ContactTimeEnum::class)], + 'rgpd' => 'accepted' ]; } @@ -49,17 +49,17 @@ class ContactRequest extends FormRequest * * @return array */ - public function messages() + public function messages(): array { return [ - // phpcs:ignore Generic.Files.LineLength.TooLong - 'phone.phone' => trans('Le champ :attribute est invalide, il accepte les numéros des pays suivants :countries.', [ - 'countries' => implode(', ', array_keys($this->isoCodes())) - ]), - // phpcs:ignore Generic.Files.LineLength.TooLong - 'postcode.postal_code' => trans('Le champ :attribute est invalide, il accepte les codes postaux des pays suivants :countries.', [ - 'countries' => implode(', ', array_keys($this->isoCodes())) - ]), + 'phone.phone' => trans( + 'Le champ :attribute est invalide, il accepte les numéros des pays suivants :countries.', + ['countries' => implode(', ', array_keys($this->isoCodes()))] + ), + 'postcode.postal_code' => trans( + 'Le champ :attribute est invalide, il accepte les codes postaux des pays suivants :countries.', + ['countries' => implode(', ', array_keys($this->isoCodes()))] + ), ]; } @@ -72,16 +72,16 @@ class ContactRequest extends FormRequest { return [ 'firstname' => trans('prénom'), - 'lastname' => trans('nom'), - 'email' => trans('email'), - 'phone' => trans('téléphone'), - 'activity' => trans('activité'), - 'society' => trans('société'), - 'postcode' => trans('code postal'), - 'city' => trans('ville'), - 'message' => trans('message'), - 'callTime' => trans('préférence de rappel'), - 'rgpd' => trans('condition d\'utilisation'), + 'lastname' => trans('nom'), + 'email' => trans('email'), + 'phone' => trans('téléphone'), + 'activity' => trans('activité'), + 'society' => trans('société'), + 'postcode' => trans('code postal'), + 'city' => trans('ville'), + 'message' => trans('message'), + 'callTime' => trans('préférence de rappel'), + 'rgpd' => trans('condition d\'utilisation'), ]; } @@ -93,20 +93,20 @@ class ContactRequest extends FormRequest private function isoCodes(): array { return [ - 'france' => 'FR', - 'belgium' => 'BE', - 'luxembourg' => 'LU', - 'guadeloupe' => 'GP', - 'martinique' => 'MQ', - 'frenchGuiana' => 'GF', - 'reunion' => 'RE', + 'france' => 'FR', + 'belgium' => 'BE', + 'luxembourg' => 'LU', + 'guadeloupe' => 'GP', + 'martinique' => 'MQ', + 'frenchGuiana' => 'GF', + 'reunion' => 'RE', 'saintPierreAndMiquelon' => 'PM', - 'mayotte' => 'YT', - 'saintBarthelemy' => 'BL', - 'saintMartinFrenchPart' => 'MF', - 'wallisAndFutuna' => 'WF', - 'frenchPolynesia' => 'PF', - 'newCaledonia' => 'NC', + 'mayotte' => 'YT', + 'saintBarthelemy' => 'BL', + 'saintMartinFrenchPart' => 'MF', + 'wallisAndFutuna' => 'WF', + 'frenchPolynesia' => 'PF', + 'newCaledonia' => 'NC', ]; } } diff --git a/app/Http/Requests/Fo/Products/AjaxAddProductBasket.php b/app/Http/Requests/Fo/Products/AjaxAddProductBasket.php index 69df142..c07ea3a 100644 --- a/app/Http/Requests/Fo/Products/AjaxAddProductBasket.php +++ b/app/Http/Requests/Fo/Products/AjaxAddProductBasket.php @@ -11,7 +11,7 @@ class AjaxAddProductBasket extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return true; } @@ -21,10 +21,10 @@ class AjaxAddProductBasket extends FormRequest * * @return array */ - public function rules() + public function rules(): array { return [ - 'packaging' => 'required|array|min:1', + 'packaging' => 'required|array|min:1', 'packaging.*' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { @@ -37,8 +37,8 @@ class AjaxAddProductBasket extends FormRequest } } ], - 'caliber' => 'required|array|min:1', - 'caliber.*' => [ + 'caliber' => 'required|array|min:1', + 'caliber.*' => [ // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed function ($attribute, $value, $fail) { $containsAttribute = (bool)collect($this->publishedProduct->caliber) @@ -62,7 +62,7 @@ class AjaxAddProductBasket extends FormRequest { return [ 'packaging' => trans('conditionnement'), - 'caliber' => trans('calibre'), + 'caliber' => trans('calibre'), ]; } } diff --git a/app/Http/Requests/Fo/Products/AjaxFilterProductsRequest.php b/app/Http/Requests/Fo/Products/AjaxFilterProductsRequest.php index 026d386..6c21f63 100644 --- a/app/Http/Requests/Fo/Products/AjaxFilterProductsRequest.php +++ b/app/Http/Requests/Fo/Products/AjaxFilterProductsRequest.php @@ -14,7 +14,7 @@ class AjaxFilterProductsRequest extends FormRequest * * @return boolean */ - public function authorize() + public function authorize(): bool { return true; } @@ -24,10 +24,10 @@ class AjaxFilterProductsRequest extends FormRequest * * @return void */ - public function prepareForValidation() + public function prepareForValidation(): void { $this->merge([ - 'vip' => $this->vip ? true : false, + 'vip' => $this->vip ? true : false, 'subranges' => \is_array($this->subranges) ? $this->subranges : [] ]); } @@ -37,7 +37,7 @@ class AjaxFilterProductsRequest extends FormRequest * * @return array */ - public function rules() + public function rules(): array { $rules = []; if ($this->ajax()) { diff --git a/app/Http/Resources/Fo/Products/ProductCommercialSheetResource.php b/app/Http/Resources/Fo/Products/ProductCommercialSheetResource.php index d221242..e8674fc 100644 --- a/app/Http/Resources/Fo/Products/ProductCommercialSheetResource.php +++ b/app/Http/Resources/Fo/Products/ProductCommercialSheetResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Fo\Products; use App\Models\Product; +use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class ProductCommercialSheetResource extends JsonResource @@ -12,24 +13,24 @@ class ProductCommercialSheetResource extends JsonResource /** @var array */ private static $skeleton = [ - 'id' => '', - 'label' => '', - 'slug' => '', - 'species' => null, - 'is_frenchpoultry' => false, - 'nutriscore' => [ + 'id' => '', + 'label' => '', + 'slug' => '', + 'species' => null, + 'is_frenchpoultry' => false, + 'nutriscore' => [ 'label' => 'none', 'value' => 0 ], - 'advantage' => '', - 'packaging' => [], - 'caliber' => [], - 'ingredients' => '', - 'preparation' => '', - 'sticker_sm' => '', + 'advantage' => '', + 'packaging' => [], + 'caliber' => [], + 'ingredients' => '', + 'preparation' => '', + 'sticker_sm' => '', 'nutritionnal_values' => [], - 'slider_pictures' => [], - 'subrange' => null, + 'slider_pictures' => [], + 'subrange' => null, ]; /** @@ -48,27 +49,26 @@ class ProductCommercialSheetResource extends JsonResource * * @param \Illuminate\Http\Request|null $request * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function toArray($request = null) + public function toArray(?Request $request = null): array { return array_intersect_key( [ - 'id' => $this->product->id, - 'label' => $this->product->label, - 'slug' => $this->product->slug, - 'species' => $this->product->species, - 'is_frenchpoultry' => $this->product->is_frenchpoultry, - 'nutriscore' => $this->product->nutriscore, - 'advantage' => $this->product->advantage, - 'packaging' => $this->product->packaging, - 'caliber' => $this->product->caliber, - 'ingredients' => $this->product->ingredients, - 'preparation' => $this->product->preparation, + 'id' => $this->product->id, + 'label' => $this->product->label, + 'slug' => $this->product->slug, + 'species' => $this->product->species, + 'is_frenchpoultry' => $this->product->is_frenchpoultry, + 'nutriscore' => $this->product->nutriscore, + 'advantage' => $this->product->advantage, + 'packaging' => $this->product->packaging, + 'caliber' => $this->product->caliber, + 'ingredients' => $this->product->ingredients, + 'preparation' => $this->product->preparation, 'nutritionnal_values' => $this->product->nutritionnal_values, - 'sticker_sm' => $this->product->sticker_sm, - 'slider_pictures' => $this->product->slider_pictures, - 'subrange' => (new SubrangeResource($this->product->subrange))->toArray($request), + 'sticker_sm' => $this->product->sticker_sm, + 'slider_pictures' => $this->product->slider_pictures, + 'subrange' => (new SubrangeResource($this->product->subrange))->toArray($request), ], $this->getSkeleton() ); diff --git a/app/Http/Resources/Fo/Products/ProductPaginatedCollectionResource.php b/app/Http/Resources/Fo/Products/ProductPaginatedCollectionResource.php index a7e9825..8f90b14 100644 --- a/app/Http/Resources/Fo/Products/ProductPaginatedCollectionResource.php +++ b/app/Http/Resources/Fo/Products/ProductPaginatedCollectionResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Fo\Products; use App\Models\Product; +use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\ResourceCollection; class ProductPaginatedCollectionResource extends ResourceCollection @@ -13,27 +14,26 @@ class ProductPaginatedCollectionResource extends ResourceCollection * @param \Illuminate\Http\Request $request * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - * @phpcs:disable Squiz.Commenting.FunctionComment.TypeHintMissing */ - public function toArray($request) + public function toArray(Request $request): array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable { - // phpcs:enable + //phpcs:enable /** @var \Illuminate\Pagination\LengthAwarePaginator */ $paginator = $this->resource; return [ 'first_page_url' => $paginator->url(0), - 'current_page' => $paginator->currentPage(), - 'next_page_url' => $paginator->nextPageUrl(), - 'links' => $paginator->linkCollection(), - 'prev_page_url' => $paginator->previousPageUrl(), - 'last_page_url' => $paginator->url($paginator->lastPage()), - 'last_page' => $paginator->lastPage(), - 'per_page' => $paginator->perPage(), - 'total' => $paginator->total(), - 'path' => $paginator->path(), - 'from' => $paginator->firstItem(), - 'to' => $paginator->lastItem(), - 'data' => $this->collection->map(function (Product $product) { + 'current_page' => $paginator->currentPage(), + 'next_page_url' => $paginator->nextPageUrl(), + 'links' => $paginator->linkCollection(), + 'prev_page_url' => $paginator->previousPageUrl(), + 'last_page_url' => $paginator->url($paginator->lastPage()), + 'last_page' => $paginator->lastPage(), + 'per_page' => $paginator->perPage(), + 'total' => $paginator->total(), + 'path' => $paginator->path(), + 'from' => $paginator->firstItem(), + 'to' => $paginator->lastItem(), + 'data' => $this->collection->map(function (Product $product) { return new ProductResource($product); }) ]; diff --git a/app/Http/Resources/Fo/Products/ProductResource.php b/app/Http/Resources/Fo/Products/ProductResource.php index 0a4cac2..f1c8c96 100644 --- a/app/Http/Resources/Fo/Products/ProductResource.php +++ b/app/Http/Resources/Fo/Products/ProductResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Fo\Products; use App\Models\Product; +use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class ProductResource extends JsonResource @@ -12,14 +13,14 @@ class ProductResource extends JsonResource /** @var array */ private static $skeleton = [ - 'id' => '', - 'label' => '', - 'slug' => '', - 'species' => null, - 'sticker_sm' => '', - 'sticker_sm_alt' => '', + 'id' => '', + 'label' => '', + 'slug' => '', + 'species' => null, + 'sticker_sm' => '', + 'sticker_sm_alt' => '', 'sticker_sm_title' => '', - 'subrange' => null, + 'subrange' => null, ]; /** @@ -38,20 +39,19 @@ class ProductResource extends JsonResource * * @param \Illuminate\Http\Request|null $request * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function toArray($request = null) + public function toArray(?Request $request = null): array { return array_intersect_key( [ - 'id' => $this->product->id, - 'label' => $this->product->label, - 'slug' => $this->product->slug, - 'species' => $this->product->species, - 'sticker_sm' => $this->product->sticker_sm, - 'sticker_sm_alt' => $this->product->sticker_sm_alt, + 'id' => $this->product->id, + 'label' => $this->product->label, + 'slug' => $this->product->slug, + 'species' => $this->product->species, + 'sticker_sm' => $this->product->sticker_sm, + 'sticker_sm_alt' => $this->product->sticker_sm_alt, 'sticker_sm_title' => $this->product->sticker_sm_title, - 'subrange' => (new SubrangeResource($this->product->subrange))->toArray($request), + 'subrange' => (new SubrangeResource($this->product->subrange))->toArray($request), ], $this->getSkeleton() ); diff --git a/app/Http/Resources/Fo/Products/RangeResource.php b/app/Http/Resources/Fo/Products/RangeResource.php index 259c6af..b2c09e5 100644 --- a/app/Http/Resources/Fo/Products/RangeResource.php +++ b/app/Http/Resources/Fo/Products/RangeResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Fo\Products; use App\Models\Range; +use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class RangeResource extends JsonResource @@ -12,9 +13,9 @@ class RangeResource extends JsonResource /** @var array */ private static $skeleton = [ - 'id' => '', + 'id' => '', 'label' => '', - 'slug' => '', + 'slug' => '', 'color' => '' ]; @@ -36,13 +37,14 @@ class RangeResource extends JsonResource * @return array * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function toArray($request = null) + public function toArray(?Request $request = null): array { + //phpcs:enable return array_intersect_key( [ - 'id' => $this->range->id, + 'id' => $this->range->id, 'label' => $this->range->label, - 'slug' => $this->range->slug, + 'slug' => $this->range->slug, 'color' => $this->range->color ], $this->getSkeleton() diff --git a/app/Http/Resources/Fo/Products/SubrangeResource.php b/app/Http/Resources/Fo/Products/SubrangeResource.php index c0a25fc..56c9fed 100644 --- a/app/Http/Resources/Fo/Products/SubrangeResource.php +++ b/app/Http/Resources/Fo/Products/SubrangeResource.php @@ -3,6 +3,7 @@ namespace App\Http\Resources\Fo\Products; use App\Models\Subrange; +use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class SubrangeResource extends JsonResource @@ -12,9 +13,9 @@ class SubrangeResource extends JsonResource /** @var array */ private static $skeleton = [ - 'id' => '', + 'id' => '', 'label' => '', - 'slug' => '', + 'slug' => '', 'range' => null ]; @@ -34,9 +35,8 @@ class SubrangeResource extends JsonResource * * @param \Illuminate\Http\Request|null $request * @return array - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass */ - public function toArray($request = null) + public function toArray(?Request $request = null): array { return array_intersect_key( [ @@ -50,7 +50,7 @@ class SubrangeResource extends JsonResource } /** - * Returns the resource skeletton + * Returns the resource skeletton. * * @return array */ diff --git a/app/Lib/Helpers/CollectionHelper.php b/app/Lib/Helpers/CollectionHelper.php new file mode 100644 index 0000000..a665a2f --- /dev/null +++ b/app/Lib/Helpers/CollectionHelper.php @@ -0,0 +1,64 @@ +count(); + + return self::paginator($results->forPage($page, $pageSize), $total, $pageSize, $page, [ + 'path' => Paginator::resolveCurrentPath(), + 'pageName' => 'page', + ]); + } + + /** + * Create a new length-aware paginator instance. + * + * @param \Illuminate\Support\Collection $items + * @param integer $total + * @param integer $perPage + * @param integer $currentPage + * @param array $options + * @return \Illuminate\Pagination\LengthAwarePaginator + */ + protected static function paginator(Collection $items, int $total, int $perPage, int $currentPage, array $options) + { + return Container::getInstance()->makeWith(LengthAwarePaginator::class, [ + 'items' => $items, + 'total' => $total, + 'perPage' => $perPage, + 'currentPage' => $currentPage, + 'options' => $options + ]); + } +} diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php index 11a829b..4813275 100644 --- a/app/Lib/Helpers/ExceptionsHelper.php +++ b/app/Lib/Helpers/ExceptionsHelper.php @@ -80,13 +80,13 @@ class ExceptionsHelper foreach ($params as &$param) { $type = \strtolower(\gettype($param)); if (\is_string($param)) { - $type = \explode(' ', \trim($param))[0] ?? null; + $type = \explode(' ', \trim(strtolower($param)))[0] ?? null; } - switch ($type) { - case 'Lambda': - case 'Object': + switch (true) { + case $type === 'lambda': + case $type === 'object': continue 2; - case 'array': + case $type === 'array' and \is_array($param): $param = sprintf('Array(%d)', \count($param)); continue 2; default: diff --git a/app/Lib/Helpers/FileStorageHelper.php b/app/Lib/Helpers/FileStorageHelper.php index fcb9ca7..eaa0b9c 100644 --- a/app/Lib/Helpers/FileStorageHelper.php +++ b/app/Lib/Helpers/FileStorageHelper.php @@ -60,10 +60,10 @@ class FileStorageHelper public static function removeOldFile(Model $model, string $attribute, bool $onlyIfUpdated = true): void { // * Ignore If removal has to be done only if the field has changed and it actually hasnt. - if ($onlyIfUpdated and $model->{$attribute} === $model->getOriginal($attribute)) { + if ($onlyIfUpdated and $model->{$attribute} === ToolboxHelper::getOriginal($model, $attribute)) { return; } - $originalPath = \ltrim(\urldecode($model->getOriginal($attribute)), '/'); + $originalPath = \ltrim(\urldecode(ToolboxHelper::getOriginal($model, $attribute)), '/'); if (\strpos($originalPath, 'storage') !== 0) { return; } @@ -82,29 +82,48 @@ class FileStorageHelper * @param \Illuminate\Http\UploadedFile|\SplFileInfo|string $file The file, will just return itself is string. * @param boolean $slugify Force filename slugification. * @param string|null $filename This string may be used to store the file. + * @param boolean $private To store the file in a private space. * @return string * @throws \RuntimeException If file copy fails. + * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh */ - public static function storeFile(Model $model, $file, bool $slugify = false, string $filename = null): string - { + public static function storeFile( + Model $model, + $file, + bool $slugify = false, + string $filename = null, + bool $private = false + ): string { + // phpcs:enable $tableName = $model->getTable(); if (\is_object($file) and $file instanceof \Illuminate\Http\UploadedFile) { /** @var \Illuminate\Http\UploadedFile $file */ $filename = $filename ?: $file->getClientOriginalName(); $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename); + $newPath = self::prepareMoveFile($tableName, $filename, $private); $newPath = str_replace(storage_path('app'), '', $newPath); - $file->storePubliclyAs( + + if (!$private) { + // * Store public file. + $file->storePubliclyAs( + pathinfo($newPath, \PATHINFO_DIRNAME), + pathinfo($newPath, \PATHINFO_BASENAME) + ); + return 'storage' . str_replace('/public', '', $newPath); + } + + $file->storeAs( pathinfo($newPath, \PATHINFO_DIRNAME), pathinfo($newPath, \PATHINFO_BASENAME) ); - return 'storage' . str_replace('/public', '', $newPath); - } + + return str_replace('/private/', '', $newPath); + } //end if if (\is_object($file) and $file instanceof \SplFileInfo) { /** @var \SplFileInfo $file */ $filename = $filename ?: $file->getBaseName(); $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename); + $newPath = self::prepareMoveFile($tableName, $filename, $private); if (!File::copy($file->getRealPath(), $newPath)) { throw new \RuntimeException(sprintf( 'Failed to copy file %s to %s', @@ -112,7 +131,9 @@ class FileStorageHelper $newPath )); } - return \ltrim(str_replace(\storage_path('app/public'), '/storage', $newPath), '/'); + return $private ? + \ltrim(str_replace(\storage_path('app/private'), '/storage/app/private', $newPath), '/') : + \ltrim(str_replace(\storage_path('app/public'), '/storage', $newPath), '/'); } return strval($file); } @@ -122,7 +143,6 @@ class FileStorageHelper * If oldHtmlString is passed, a diff is done with new and old files * to keep only files that are present in the new html string. * - * * @param \Illuminate\Database\Eloquent\Model $model The model that will hold the picture. * @param string $htmlString The html string to parse and modify files. * @param string|null $oldHtmlString The old html string with alreadyParsed @@ -208,6 +228,7 @@ class FileStorageHelper /** * Find all occurence of files in html + * * @param string $html * @return array */ @@ -268,22 +289,28 @@ class FileStorageHelper * Prepare storage path and return * the file full path * - * @param string $tableName Model table name. - * @param string $filename The basename for the file. + * @param string $tableName Model table name. + * @param string $filename The basename for the file. + * @param boolean $private May the file be stored in a private dir. * @return string */ - private static function prepareMoveFile(string $tableName, string $filename): string + private static function prepareMoveFile(string $tableName, string $filename, bool $private = false): string { + // * Security filter + $filename = \htmlspecialchars($filename); // * Security filter + beautifier $filename = self::sanitizeFileName($filename); - // * Security filter - $filename = \filter_var($filename, \FILTER_SANITIZE_STRING); // * Slugify filename $ext = \pathinfo($filename, \PATHINFO_EXTENSION); $filename = Str::slug(\pathinfo($filename, \PATHINFO_FILENAME)) . (\strlen($ext) ? ".{$ext}" : ''); - $folderPath = self::getStoragePath($tableName, $filename); + $folderPath = self::getStoragePath( + $private ? 'app/private/modelfiles' : 'app/public/modelfiles', + $tableName, + $filename, + $private + ); $filename = self::getFileUniqueName($folderPath, $filename); return "{$folderPath}/{$filename}"; } @@ -293,15 +320,17 @@ class FileStorageHelper * storage/modelfiles/posts/10/04/19/5f * year/month/day/md5 first 2 letters * + * @param string $storage_dir * @param string $table * @param string $filename * @return string */ - private static function getStoragePath(string $table, string $filename): string + private static function getStoragePath(string $storage_dir, string $table, string $filename): string { $filenameHash = \md5($filename); $pathFolder = \storage_path(sprintf( - 'app/public/modelfiles/%s/%s/%s/%s/%s', + '%s/%s/%s/%s/%s/%s', + $storage_dir, $table, gmdate('y'), gmdate('m'), @@ -328,7 +357,7 @@ class FileStorageHelper $maxAttempts = 20; while (File::exists("{$folderPath}/{$filename}")) { if ($attempts++ >= $maxAttempts) { - throw new \RuntimeException("Failed to has a unique filename for {$folderPath}/{$filename}"); + throw new \RuntimeException("Failed to have a unique filename for {$folderPath}/{$filename}"); } $filename = pathinfo($filename, \PATHINFO_FILENAME) . \uniqid('-') . '.' . @@ -422,39 +451,4 @@ class FileStorageHelper $filename = trim($filename, '.-'); return $filename; } - - /** - * Store picture array - * @param \Illuminate\Database\Eloquent\Model $model - * @param array $files - * @return array Containing stored Files using storage strategy. - */ - public static function storePictureArray(Model $model, array $files): array - { - return \collect($files)->map(function ($file) use ($model) { - if (!\is_string($file) and !(\is_object($file) and $file instanceof \SplFileInfo)) { - throw new \RuntimeException('picture array does not support anything else than string or SplfFileInfo'); - } - return FileStorageHelper::storeFile($model, $file, true); - })->all(); - } - - /** - * Remove picture array - * @param \Illuminate\Database\Eloquent\Model $model - * @param array $files - * @return void - */ - public static function removePictureArray(Model $model, array $files): void - { - \collect($files)->map(function ($file) use ($model) { - if (!\is_string($file)) { - throw new \RuntimeException('picture array does not support anything else than string'); - } - // * Use temp prop te remove file. - $model->tempPicture = $file; - FileStorageHelper::removeFile($model, 'tempPicture'); - $model->tempPicture = null; - })->all(); - } } diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php index 7bd5378..6283174 100644 --- a/app/Lib/Helpers/ToolboxHelper.php +++ b/app/Lib/Helpers/ToolboxHelper.php @@ -2,319 +2,51 @@ namespace App\Lib\Helpers; +use App\Enums\Pagination\ItemsPerPaginationEnum; +use Carbon\Carbon; +use Illuminate\Contracts\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; -use Illuminate\Support\Carbon; +use Illuminate\Support\Str; +use Illuminate\Support\Arr; +use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Route; -use Illuminate\Support\Facades\Session; +use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Str; use Illuminate\Validation\Rule; +use Illuminate\Validation\Rules\Enum; use Illuminate\Validation\ValidationException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use Symfony\Component\Finder\SplFileInfo; class ToolboxHelper { /** - * Cut string words + * @param array $array1 + * @param array $array2 * - * @param string $string - * @param integer $max - * @param string $hyphen - * @return string + * @return array */ - public static function cutWords(string $string, int $max = 20, string $hyphen = '[.]') + public static function arrayMergeRecursiveDistinct(array &$array1, array &$array2): array { - $originalString = $string; - $tok = strtok($string, ' '); - $string = ''; - while ($tok !== false && mb_strlen($string) < $max) { - if ( - mb_strlen($string) + mb_strlen($tok) <= $max - ) { - $string .= $tok . ' '; + $merged = $array1; + foreach ($array2 as $key => &$value) { + if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { + $merged[$key] = self::arrayMergeRecursiveDistinct($merged[$key], $value); } else { - break; + $merged[$key] = $value; } - $tok = strtok(' '); } - return trim($string) . (strlen(trim($string)) !== strlen(trim($originalString)) ? $hyphen : ''); - } - /** - * Strip scheme (https) on oembed urls - * Only embed allowed are for MP4 self hosted videos right now - * - * https is force by ckeditor MediaElements which natively supports - * only cloud hosted medias (youtube, spotify etc..) - * - * @param string $input - * @return string - */ - public static function stripCkEditorSchemesOnMediaInputs(string $input): string - { - $input = \preg_replace('/(?<=)/m', '', $input); - return $input; - } - - /** - * Assert That no Back Office url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalBoUrls(string $field, string $text): string - { - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - trim($routes->match($request)->getPrefix() ?? '', '/') === 'bo' - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => ':attribute : Il est interdit de coller une url du back office dans ce champ' - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Assert That only external url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalUrls(string $field, string $text): string - { - self::assertNoInternalBoUrls($field, $text); - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - $routes->match($request) - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => sprintf( - ':attribute : Il est interdit de coller une url de %s dans ce champ', - config('app.name') - ) - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Generate url using laravel route passing our group query if present - * This is used to keep ou group tracking - * Curd-policies is only used for root users as it cannot keep track of our group - * and validate things - * - * @param array|string $name - * @param mixed $parameters - * @param boolean $absolute - * @return string - * @throws \ErrorException If an object given as parameter is not a Model. - */ - public static function routeWithGroup($name, $parameters = [], bool $absolute = true): string - { - // * Handle if parameter if is an object. - if (\is_object($parameters)) { - $parents = \class_parents($parameters); - if ($parents === false or !\in_array(Model::class, $parents)) { - throw new \ErrorException(\sprintf( - '%s only support object of type %s', - __FUNCTION__, - Model::class - )); - } - /** @var \Illuminate\Database\Eloquent\Model $model */ - $model = $parameters; - $parameters = [Str::singular($model->getTable()) => $model]; - } - // * Handle if parameter isnt and array like slug or else. - if (!is_array($parameters)) { - // * Best effort, result is not garantee. - $parameters = [$parameters]; - } - // * Pass our group. - if ($group = Session::get('activeGroup', request()->group)) { - $parameters = array_merge($parameters, ['group' => $group]); - } - // * Call laravel route helper. - return route($name, $parameters, $absolute); - } - - /** - * Mutltibyte string replace - * @param mixed $search - * @param mixed $replace - * @param mixed $subject - * @param integer $count - * @return mixed - */ - public static function mbReplace($search, $replace, $subject, int &$count = 0) - { - if (!is_array($search) && is_array($replace)) { - return false; - } - if (is_array($subject)) { - // Call mb_replace for each single string in $subject . - foreach ($subject as &$string) { - $string = &self::mbReplace($search, $replace, $string, $count); - } - } elseif (is_array($search)) { - if (!is_array($replace)) { - foreach ($search as &$string) { - $subject = self::mbReplace($string, $replace, $subject, $count); - } - } else { - $n = max(count($search), count($replace)); - while ($n--) { - $subject = self::mbReplace(current($search), current($replace), $subject, $count); - next($search); - next($replace); - } - } - } else { - $parts = mb_split(preg_quote($search), $subject); - $count = count($parts) - 1; - $subject = implode($replace, $parts); - } //end if - return $subject; - } - - /** - * Asserts that the field is unique - * - * @param string $table - * @param string $field - * @param mixed $value - * @param integer|null $id - * @param callable|null $query - * @return void - * @throws \Illuminate\Validation\ValidationException If the field is not unique. - */ - public static function assertFieldIsUnique( - string $table, - string $field, - $value, - ?int $id = null, - ?callable $query = null - ) { - if (!$query) { - Validator::make([$field => $value], [ - $field => Rule::unique($table, $field)->ignore($id), - ], [ - $field . '.unique' => trans('La valeur :value pour le champ :attribute est déjà utilisé', [ - 'attribute' => $field, - 'value' => $value - ]) - ])->validate(); - return; - } - Validator::make([$field => $value], [ - $field => Rule::unique($table)->where($query)->ignore($id), - ], [ - $field . '.unique' => trans('La valeur pour le champ :attribute est déjà utilisé', [ - 'attribute' => $field - ]) - ])->validate(); - } - - /** - * Check that two arrays have the same content (1 level only) - * - * @param array $array1 - * @param array $array2 - * @return boolean - */ - public static function arrayHaveSameContent(array $array1, array $array2): bool - { - return (array_diff($array1, $array2) == [] && array_diff($array2, $array1) == []); - } - - /** - * * Register CSP report URI - * - * Put this function inside RouteServiceProvider, - * and call it in RouteServiceProvider::boot - * - * ! Use this in conjonction with kwaadpepper/exception-handler - * - * @return void - */ - public static function cspReportRoute() - { - // * CSP REPORT URI, Please add /csp-report to VerifyCsrfToken $except middleware - \Illuminate\Support\Facades\Route::post('/csp-report', function () { - $isCspRequest = request()->header('Content-Type') === 'application/csp-report'; - if (!$isCspRequest or !request()->json('csp-report') or !is_array(request()->json('csp-report'))) { - abort(401); - } - // * Flatten if needed - $cspReport = collect(request()->json('csp-report')) - ->flatMap(function ($v, $k) { - return [$k => is_array($v) ? collect($v)->flatten()->implode(', ') : $v]; - })->all(); - // * Filter array keys - $cspReport = collect(array_intersect_key($cspReport, [ - 'blocked-uri' => '', 'document-uri' => '', 'original-policy' => '', - 'referrer' => '', 'violated-directive' => '' - ])); - report(new \Illuminate\Http\Client\HttpClientException(sprintf( - "CSP REPORT for %s : \n %s", - $cspReport->get('document-uri'), - $cspReport->implode("\n") - ))); - })->middleware('throttle:5,2') - ->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class) - ->name('cspReportUri'); + return $merged; } /** * Validate recaptcha * - * @param Request $request - * @param boolean $isV3 + * @param \Illuminate\Http\Request $request + * @param boolean $isV3 * @return void */ public static function validateRecaptcha(Request $request, bool $isV3 = true) @@ -363,4 +95,445 @@ class ToolboxHelper ] ], [], ['g-recaptcha-response' => 'reCaptcha']); } + + /** + * Strip scheme (https) on oembed urls + * Only embed allowed are for MP4 self hosted videos right now + * + * https is force by ckeditor MediaElements which natively supports + * only cloud hosted medias (youtube, spotify etc..) + * + * @param string $input + * @return string + */ + public static function stripCkEditorSchemesOnMediaInputs(string $input): string + { + $input = \preg_replace('/(?<=)/m', '', $input); + return $input; + } + + /** + * Assert That no Back Office url is present on txt + * + * @param string $field + * @param string $text + * @return string + * @throws \Illuminate\Validation\ValidationException If url is a bo url. + */ + public static function assertNoInternalBoUrls(string $field, string $text): string + { + $routes = Route::getRoutes(); + // * Url replace and email replace. + $text = preg_replace_callback( + // phpcs:ignore Generic.Files.LineLength.TooLong + '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', + function ($matches) use ($routes, $field) { + $match = collect($matches)->first() ?? ''; + $url = $match; + try { + $request = Request::create($url); + // If a route is match then it do not throws exception. + if ( + \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && + trim($routes->match($request)->getPrefix() ?? '', '/') === 'bo' + ) { + // Removes the matched url. + throw ValidationException::withMessages([ + $field => trans( + 'crud.libs.toolbox.assertNoInternalBoUrls', + ['attribute' => $field] + ) + ]); + } + return $match; + } catch (NotFoundHttpException $e) { + return $match; + } + }, + $text + ); + return $text; + } + + /** + * Assert That only external url is present on txt + * + * @param string $field + * @param string $text + * @return string + * @throws \Illuminate\Validation\ValidationException If url is a bo url. + */ + public static function assertNoInternalUrls(string $field, string $text): string + { + self::assertNoInternalBoUrls($field, $text); + $routes = Route::getRoutes(); + // * Url replace and email replace. + $text = preg_replace_callback( + // phpcs:ignore Generic.Files.LineLength.TooLong + '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', + function ($matches) use ($routes, $field) { + $match = collect($matches)->first() ?? ''; + $url = $match; + try { + $request = Request::create($url); + // If a route is match then it do not throws exception. + if ( + \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && + $routes->match($request) + ) { + // Removes the matched url. + throw ValidationException::withMessages([ + $field => trans( + 'crud.libs.toolbox.assertNoInternalUrls', + ['attribute' => $field, 'appname' => config('app.name')] + ) + ]); + } + return $match; + } catch (NotFoundHttpException $e) { + return $match; + } + }, + $text + ); + return $text; + } + + /** + * Mutltibyte string replace + * + * @param array|string $search + * @param array|string $replace + * @param array|string $subject + * @param integer $count + * @return array|string + */ + public static function mbReplace( + array|string $search, + array|string $replace, + array|string $subject, + int &$count = 0 + ): array|string { + if (!is_array($search) && is_array($replace)) { + return false; + } + if (is_array($subject)) { + // Call mb_replace for each single string in $subject . + foreach ($subject as &$string) { + $string = &self::mbReplace($search, $replace, $string, $count); + } + } elseif (is_array($search)) { + if (!is_array($replace)) { + foreach ($search as &$string) { + $subject = self::mbReplace($string, $replace, $subject, $count); + } + } else { + $n = max(count($search), count($replace)); + while ($n--) { + $subject = self::mbReplace(current($search), current($replace), $subject, $count); + next($search); + next($replace); + } + } + } else { + $parts = mb_split(preg_quote($search), $subject); + $count = count($parts) - 1; + $subject = implode($replace, $parts); + } //end if + return $subject; + } + + /** + * Asserts that the field is unique + * + * @param string $table + * @param string $field + * @param string|integer|float|boolean|null|array $value + * @param integer|null $id + * @param callable|null $query + * @return void + * @throws \Illuminate\Validation\ValidationException If the field is not unique. + */ + public static function assertFieldIsUnique( + string $table, + string $field, + string|int|float|bool|null|array $value, + ?int $id = null, + ?callable $query = null + ) { + if (!$query) { + Validator::make([$field => $value], [ + self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id), + ], [ + self::mbReplace('.', '\.', "{$field}.unique") + => trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value]) + ])->validate(); + return; + } + Validator::make([$field => $value], [ + $field => Rule::unique($table)->where($query)->ignore($id), + ], [ + $field . '.unique' => trans( + 'crud.libs.toolbox.assertFieldIsUnique', + ['attribute' => $field, 'value' => $value] + ) + ])->validate(); + } + + /** + * Get original polyfill with autotranslate behavior + * + * @param \Illuminate\Database\Eloquent\Model $model + * @param string $attribute + * @return mixed + */ + public static function getOriginal(Model $model, string $attribute): mixed + { + if (\in_array('Spatie\Translatable\HasTranslations', \class_uses_recursive($model))) { + return $model->getTranslation( + $attribute, + $model->getLocale(), + $model->useFallbackLocale() + ); + } + return $model->getOriginal($attribute); + } + + /** + * Dynamic model query + * + * @param string $defaultLocale + * @param \Illuminate\Contracts\Database\Eloquent\Builder $q + * @param string $column + * @param string $value + * @return \Illuminate\Contracts\Database\Eloquent\Builder + */ + public static function queryColumnWithLocales( + string $defaultLocale, + Builder $q, + string $column, + string $value + ): Builder { + $currentLocale = app()->currentLocale(); + $locales = collect(config('app.locales')) + ->mapWithKeys(fn (string $locale) => [$locale => $locale]); + if (!$locales->has($defaultLocale)) { + // * Remove default locale. + $locales->pull($defaultLocale); + } + if (!$locales->has($currentLocale)) { + // * Remove current locale. + $locales->pull($currentLocale); + } + + return $q->where(function (Builder $q) use ($defaultLocale, $currentLocale, $locales, $column, $value) { + // * Query default locale + $q->whereRaw("JSON_EXTRACT({$column}, '$.{$defaultLocale}') = '{$value}'"); + if ($defaultLocale !== $currentLocale) { + // * Query current locale + $q->whereRaw("JSON_EXTRACT({$column}, '$.{$currentLocale}') = '{$value}'"); + } + // * Query any other locale + $locales->each(fn ($locale) => $q->orWhereRaw( + "JSON_EXTRACT({$column}, '$.{$locale}') = '{$value}'" + )); + }); + } + + /** + * Generates an array from a dot separated string + * + * @param string $path + * @param mixed $value + * @param string $separator + * @return array + */ + public static function dotStringToNestedArray(string $path, mixed $value, string $separator = '.'): array + { + $arr = $value; + $keys = array_reverse(explode($separator, $path)); + + foreach ($keys as $key) { + $arr = [$key => $arr]; + } + return $arr; + } + + /** + * Convert deeply an object to array + * + * @param array|object $input + * @return array + * @throws \RuntimeException If $input var is a scalar value. + */ + public static function objectToArray($input): array + { + // Only process if it's an object or array being passed to the function. + if (is_object($input) or is_array($input)) { + $ret = (array)$input; + foreach ($ret as &$item) { + // Recursively process EACH element only if not scalar. + $item = (is_object($item) or is_array($item)) ? + self::objectToArray($item) : $item; + } + return $ret; + } else { + throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); + } + } + + /** + * Convert deeply an array to object + * + * @param array|object $input + * @return object + * @throws \RuntimeException If $input var is a scalar value. + */ + public static function arrayToObject($input): object + { + // Only process if it's an object or array being passed to the function. + if (is_object($input) or is_array($input)) { + $ret = (object)$input; + foreach ($ret as &$item) { + // Recursively process EACH element only if not scalar. + $item = (is_object($item) or is_array($item)) ? + self::arrayToObject($item) : $item; + } + return $ret; + } else { + throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); + } + } + + /** + * Validate picture + * + * @param string $attribute + * @param string|null $value + * @param callback $fail + * @param object $sizes + * @return void + */ + public static function validatePicture(string $attribute, string|null $value, callable $fail, object $sizes) + { + if (!($useStorage = Storage::exists($value)) and !File::exists($value)) { + $fail(trans(':attribute n\'existe pas dans le système de fichier', [ + 'attribute' => $attribute + ])); + return; + } + /** @var string */ + $fileFullPath = self::getUploadedFileFullPath($value, $useStorage); + if ( + !\in_array(self::getUploadedFileMimeType($value, $useStorage), [ + 'image/jpeg', 'image/jpg', 'image/png', 'image/gif' + ]) + ) { + $fail(trans(':attribute doit être une image de type \'image/jpeg,image/jpg,image/png,image/gif\'', [ + 'attribute' => $attribute + ])); + } + if (!($dimensions = \getimagesize($fileFullPath)) or !isset($dimensions[0]) or !isset($dimensions[1])) { + $fail(trans(':attribute impossible de valider les dimensions', [ + 'attribute' => $attribute + ])); + } else { + $width = intval($dimensions[0]); + $height = intval($dimensions[1]); + + $xMessage = trans( + ":attribute la largeur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" + ); + if ($sizes->minWith === $sizes->maxWith) { + $xMessage = trans(":attribute la largeur doit être de {$sizes->minWith}px"); + } + $yMessage = trans( + ":attribute la hauteur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" + ); + if ($sizes->minHeight === $sizes->maxHeight) { + $yMessage = trans(":attribute la hauteur doit être de {$sizes->minWith}px"); + } + + if (($width < $sizes->minWith) or ($width > $sizes->maxWith)) { + $fail($xMessage); + } + if (($height < $sizes->minHeight) or ($height > $sizes->maxHeight)) { + $fail($yMessage); + } + } //end if + } + + /** + * Get the file full path + * + * @param string $value + * @param boolean $useStorage + * @return string + */ + private static function getUploadedFileFullPath(string $value, bool $useStorage): string + { + /** @var \Illuminate\Filesystem\FilesystemAdapter */ + $disk = Storage::disk(); + return !$useStorage ? (realpath($value) ?: $value) : $disk->path($value); + } + + /** + * Get the file mimetype + * + * @param string $value + * @param boolean $useStorage + * @return string|false + */ + private static function getUploadedFileMimeType(string $value, bool $useStorage) + { + return !$useStorage ? File::mimeType($value) : Storage::mimeType($value); + } + + /** + * Fetch class list from a specific namespace + * + * @param string $namespace + * @return array An array of classe namespaces + */ + public static function getClassesUsingNamespace(string $namespace): array + { + return collect(File::files(\app_path(Str::of($namespace)->replaceFirst('\App', '')))) + ->filter(fn (SplFileInfo $splFileInfo) => $splFileInfo->getExtension() === 'php') + ->map(fn (SplFileInfo $splFileInfo) => Str::of($splFileInfo->getBasename()) + ->replace('.' . $splFileInfo->getExtension(), '')->prepend("{$namespace}\\"))->all(); + } + + /** + * Get all classes from a specific namespace that implement a specific interface + * + * @param string $namespace + * @param string $interface + * @return array An array of classe namespaces + */ + public static function getClassesUsingInterface(string $namespace, string $interface): array + { + return Arr::where( + static::getClassesUsingNamespace($namespace), + fn (string $class_namespace) => \collect(class_implements($class_namespace, true))->filter() + ->contains(fn (string $class_interface) => $class_interface === $interface) + ); + } + + /** + * Get validated pagination from request. + * + * @param integer $default + * @return integer + */ + public static function getValidatedPaginate(int $default): int + { + try { + return \intval(Validator::make( + ['pagination' => \request()->get('pagination')], + ['pagination' => new Enum(ItemsPerPaginationEnum::class)] + )->validated()['pagination']); + } catch (ValidationException $e) { + return $default; + } + } } diff --git a/app/Models/Advice.php b/app/Models/Advice.php index 0a4b358..ade70a6 100644 --- a/app/Models/Advice.php +++ b/app/Models/Advice.php @@ -6,17 +6,50 @@ use App\Enums\Advices\AdviceTypeEnum; use App\Enums\Advices\AdviceDifficultyEnum; use App\Lib\Helpers\FileStorageHelper; use App\Lib\Helpers\ToolboxHelper; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; -use Kwaadpepper\Enum\Traits\CastsEnums; +/** + * @property integer $id Id. + * @property string $title Title. + * @property string $slug Slug of the title. + * @property string $seo_title SEO Title. + * @property string $seo_description SEO description. + * @property \App\Enums\Advices\AdviceTypeEnum $type Type of the advice. + * @property string $picture Path of a picture. + * @property string $picture_alt Picture's attribute alt. + * @property string $picture_title Picture's attribute title. + * @property string $sticker Path of a sticker. + * @property string $sticker_alt Sticker's attribute alt. + * @property string $sticker_title Sticker's attribute title. + * @property string $sticker_sm Path of a small sticker. + * @property string $sticker_sm_alt small sticker's attribute alt. + * @property string $sticker_sm_title Small sticker's attribute title. + * @property string $preparation Preparation tips. + * @property string $advice Advice. + * @property \Illuminate\Support\Carbon $ingredients Ingredients. + * @property \Illuminate\Support\Carbon $guests_nb Number of guests. + * @property \Illuminate\Support\Carbon $youtube_title Youtube title. + * @property \Illuminate\Support\Carbon $youtube_video_id Youtube video id. + * @property \Illuminate\Support\Carbon $cooking_time Time of cooking. + * @property \Illuminate\Support\Carbon $preparation_time Time of preparation. + * @property \App\Enums\Advices\AdviceDifficultyEnum $difficulty Difficulty. + * @property boolean $status Status. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> $advices + * Advices Belongs-To-Many relationship. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Product> $products + * Products Belongs-To-Many relationship. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Tag> $tags + * Tags Morph-To-Many relationship. + */ class Advice extends Authenticatable { - use CastsEnums; use HasFactory; /** @@ -51,16 +84,6 @@ class Advice extends Authenticatable 'status' ]; - /** - * Map attribute names to enum classes. - * - * @var array - */ - protected $enumCasts = [ - 'type' => AdviceTypeEnum::class, - 'difficulty' => AdviceDifficultyEnum::class - ]; - /** * The attributes that should be cast. * @@ -68,7 +91,9 @@ class Advice extends Authenticatable */ protected $casts = [ 'ingredients' => 'array', - 'status' => 'bool' + 'status' => 'bool', + 'type' => AdviceTypeEnum::class, + 'difficulty' => AdviceDifficultyEnum::class, ]; /** @@ -76,7 +101,7 @@ class Advice extends Authenticatable * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function (self $model) { self::manageFields($model); @@ -100,12 +125,12 @@ class Advice extends Authenticatable // * METHODS /** - * Manage fields on this model event. + * Common methods function. * * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { self::assertTitleIsUnique($model->title, $model->id); $model->slug = Str::slug($model->title); @@ -139,7 +164,7 @@ class Advice extends Authenticatable * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitTags(int $nbTagsInBdd) + private static function assertLimitTags(int $nbTagsInBdd): void { if ($nbTagsInBdd > 2) { throw ValidationException::withMessages([ @@ -155,7 +180,7 @@ class Advice extends Authenticatable * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitAdvices(int $nbAdvicesInBdd) + private static function assertLimitAdvices(int $nbAdvicesInBdd): void { if ($nbAdvicesInBdd > 6) { throw ValidationException::withMessages([ @@ -171,16 +196,16 @@ class Advice extends Authenticatable * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitProducts(Model $model) + private static function assertLimitProducts(Model $model): void { $nbProductsInBdd = $model->products()->count(); - if ($model->type->value == AdviceTypeEnum::recipes()->value) { + if ($model->type->value == AdviceTypeEnum::recipes->value()) { if ($nbProductsInBdd < 1 || $nbProductsInBdd > 3) { throw ValidationException::withMessages([ 'Vous devez associer 1 à 3 produits.' ]); } - } elseif ($model->type->value == AdviceTypeEnum::tips()->value) { + } elseif ($model->type->value == AdviceTypeEnum::tips->value()) { if ($nbProductsInBdd > 3) { throw ValidationException::withMessages([ 'Vous devez associer au maximum 3 produits.' @@ -195,9 +220,9 @@ class Advice extends Authenticatable * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function setCookingtimePreparationtimeValues(Model $model) + private static function setCookingtimePreparationtimeValues(Model $model): void { - if ($model->type->value != AdviceTypeEnum::recipes()->value) { + if ($model->type->value != AdviceTypeEnum::recipes->value()) { $model->cooking_time = null; $model->preparation_time = null; } @@ -206,11 +231,11 @@ class Advice extends Authenticatable /** * Asserts using validation that the title is unique. * - * @param mixed $title + * @param string $title * @param integer|null $id * @return void */ - private static function assertTitleIsUnique($title, ?int $id = null) + private static function assertTitleIsUnique(string $title, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); @@ -222,9 +247,9 @@ class Advice extends Authenticatable * * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ - public function recipes(): Collection + public function recipes(): \Illuminate\Database\Eloquent\Collection { - return $this->advices()->where('type', AdviceTypeEnum::recipes())->get(); + return $this->advices()->where('type', AdviceTypeEnum::recipes)->get(); } /** @@ -232,39 +257,39 @@ class Advice extends Authenticatable * * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ - public function tips(): Collection + public function tips(): \Illuminate\Database\Eloquent\Collection { - return $this->advices()->where('type', AdviceTypeEnum::tips())->get(); + return $this->advices()->where('type', AdviceTypeEnum::tips)->get(); } // * RELATIONSHIPS /** - * BelongsToMany advices + * Advices Belongs-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function advices() + public function advices(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Advice::class, 'advice_advice', 'advice_id', 'advice_related_id'); } /** - * BelongsToMany products + * Products Belongs-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function products() + public function products(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Product::class); } /** - * MorphToMany Tags + * Tags Morph-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\MorphToMany */ - public function tags() + public function tags(): \Illuminate\Database\Eloquent\Relations\MorphToMany { return $this->morphToMany(Tag::class, 'taggable'); } diff --git a/app/Models/ExpertiseProduct.php b/app/Models/ExpertiseProduct.php index dfdec9f..4017587 100644 --- a/app/Models/ExpertiseProduct.php +++ b/app/Models/ExpertiseProduct.php @@ -9,11 +9,22 @@ use App\Lib\Helpers\ToolboxHelper; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Validation\ValidationException; -use Kwaadpepper\Enum\Traits\CastsEnums; +/** + * @property integer $id Id. + * @property \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum $page Title. + * @property string $label Label of the title. + * @property string $title Title. + * @property string $subtitle Subtitle. + * @property array $points Type of the advice. + * @property boolean $is_frenchpoultry Is frenchpoultry or not. + * @property boolean $is_natureeleveurs Is natureeleveurs or not. + * @property \App\Enums\NutriscoreEnum $nutriscore Nutriscore. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + */ class ExpertiseProduct extends Model { - use CastsEnums; use HasFactory; /** @@ -29,17 +40,7 @@ class ExpertiseProduct extends Model 'points', 'is_frenchpoultry', 'is_natureeleveurs', - 'nutriscore' - ]; - - /** - * Map attribute names to enum classes. - * - * @var array - */ - protected $enumCasts = [ - 'page' => ExpertiseProductPageEnum::class, - 'nutriscore' => NutriscoreEnum::class + 'nutriscore', ]; /** @@ -48,9 +49,11 @@ class ExpertiseProduct extends Model * @var array */ protected $casts = [ - 'points' => 'array', - 'is_frenchpoultry' => 'bool', - 'is_natureeleveurs' => 'bool' + 'points' => 'array', + 'is_frenchpoultry' => 'bool', + 'is_natureeleveurs' => 'bool', + 'page' => ExpertiseProductPageEnum::class, + 'nutriscore' => NutriscoreEnum::class ]; /** @@ -58,7 +61,7 @@ class ExpertiseProduct extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function (self $model) { self::manageFields($model); @@ -79,28 +82,27 @@ class ExpertiseProduct extends Model // * METHODS /** - * Undocumented function + * Common methods function. * - * @param Model $model + * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { - static::assertFieldIsUnique('label', $model->label, $model->id); - static::assertFieldIsUnique('title', $model->title, $model->id); - + self::assertFieldIsUnique('label', $model->label, $model->id); + self::assertFieldIsUnique('title', $model->title, $model->id); self::assertNumberOfProductsVip($model->page->value); } /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * * @param string $name * @param mixed $field * @param integer|null $id * @return void */ - private static function assertFieldIsUnique(string $name, $field, ?int $id = null) + private static function assertFieldIsUnique(string $name, mixed $field, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, $name, $field, $id); @@ -113,7 +115,7 @@ class ExpertiseProduct extends Model * @return void * @throws \Illuminate\Validation\ValidationException If there are more than 3 products. */ - private static function assertNumberOfProductsVip(int $specie) + private static function assertNumberOfProductsVip(int $specie): void { if (count(self::where('page', '=', $specie)->get()) >= 3) { throw ValidationException::withMessages([ diff --git a/app/Models/News.php b/app/Models/News.php index 6bc5db3..0239fb9 100644 --- a/app/Models/News.php +++ b/app/Models/News.php @@ -11,7 +11,36 @@ use Illuminate\Support\Str; use Illuminate\Validation\ValidationException; /** - * @property-read string $reading_time Time reading of a news' page + */ +/** + * @property integer $id Id. + * @property string $title Title. + * @property string $subtitle Type of the advice. + * @property string $slug Slug of the title. + * @property string $seo_title SEO Title. + * @property string $seo_description SEO description. + * @property string $picture Path of a picture. + * @property string $picture_alt Picture's attribute alt. + * @property string $picture_title Picture's attribute title. + * @property string $picture2 Path of a second picture. + * @property string $picture2_alt Second picture's attribute alt. + * @property string $picture2_title Second picture's attribute title. + * @property string $content First WYSWYG content. + * @property string $content2 Second WYSWYG content. + * @property \Illuminate\Support\Carbon $event_start Start of the event. + * @property \Illuminate\Support\Carbon $event_end End of the event. + * @property string $event_text Text of the event. + * @property boolean $status Status. + * @property-read string $reading_time Time reading of a news' page + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\News> $news + * News Belongs-To-Many relationship. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Product> $products + * Products Belongs-To-Many relationship. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Tags> $categories + * Categories Morph-To-Many relationship. */ class News extends Authenticatable { @@ -39,7 +68,7 @@ class News extends Authenticatable 'event_start', 'event_end', 'event_text', - 'status' + 'status', ]; /** @@ -49,8 +78,8 @@ class News extends Authenticatable */ protected $casts = [ 'event_start' => 'datetime', - 'event_end' => 'datetime', - 'status' => 'bool' + 'event_end' => 'datetime', + 'status' => 'bool', ]; /** @@ -58,7 +87,7 @@ class News extends Authenticatable * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function (self $model) { self::manageFields($model); @@ -82,12 +111,12 @@ class News extends Authenticatable // * METHODS /** - * Manage fields on this model event. + * Common methods function. * * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { self::assertTitleIsUnique($model->title, $model->id); $model->slug = Str::slug($model->title); @@ -104,11 +133,12 @@ class News extends Authenticatable /** * Limit products associated. + * * @param integer $nbProductsInBdd * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitProducts(int $nbProductsInBdd) + private static function assertLimitProducts(int $nbProductsInBdd): void { if ($nbProductsInBdd > 3) { throw ValidationException::withMessages([ @@ -123,7 +153,7 @@ class News extends Authenticatable * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitNews(int $nbNewsInBdd) + private static function assertLimitNews(int $nbNewsInBdd): void { if ($nbNewsInBdd > 3) { throw ValidationException::withMessages([ @@ -138,7 +168,7 @@ class News extends Authenticatable * @return void * @throws \Illuminate\Validation\ValidationException Error exception. */ - private static function assertLimitNewsCategory(int $nbNewsCategoriesInBdd) + private static function assertLimitNewsCategory(int $nbNewsCategoriesInBdd): void { if ($nbNewsCategoriesInBdd < 1 or $nbNewsCategoriesInBdd > 2) { throw ValidationException::withMessages([ @@ -150,11 +180,11 @@ class News extends Authenticatable /** * Asserts using validation that the title is unique. * - * @param mixed $title + * @param string $title * @param integer|null $id * @return void */ - private static function assertTitleIsUnique($title, ?int $id = null) + private static function assertTitleIsUnique(string $title, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); @@ -165,11 +195,9 @@ class News extends Authenticatable /** * Getter reading_time. * - * * USED - * * @return string */ - public function getReadingTime() + public function getReadingTime(): string { $allWords = count(explode( " ", @@ -188,31 +216,31 @@ class News extends Authenticatable // * RELATIONSHIPS /** - * BelongsToMany news + * News Morph-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function news() + public function news(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(News::class, 'news_news', 'news_id', 'news_related_id'); } /** - * BelongsToMany products + * Products Morph-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function products() + public function products(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Product::class); } /** - * BelongsToMany categories + * Categories Morph-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function categories() + public function categories(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(NewsCategory::class); } diff --git a/app/Models/NewsCategory.php b/app/Models/NewsCategory.php index ee84304..b8425cf 100644 --- a/app/Models/NewsCategory.php +++ b/app/Models/NewsCategory.php @@ -7,6 +7,16 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Support\Str; +/** + * @property integer $id Id. + * @property string $label Label. + * @property string $slug Slug of the title. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\News> $news + * News Belongs-To-Many relationship. + */ class NewsCategory extends Authenticatable { use HasFactory; @@ -39,12 +49,12 @@ class NewsCategory extends Authenticatable /** * Asserts using validation that the label is unique. * - * @param mixed $label + * @param string $label * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If an actu label already exists. */ - private static function assertLabelIsUnique($label, ?int $id = null) + private static function assertLabelIsUnique(string $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -58,7 +68,7 @@ class NewsCategory extends Authenticatable * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function news() + public function news(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(News::class); } diff --git a/app/Models/Product.php b/app/Models/Product.php index 67d6e4b..030f319 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -7,16 +7,44 @@ use App\Enums\NutriscoreEnum; use App\Enums\Products\ProductSpeciesEnum; use App\Lib\Helpers\FileStorageHelper; use App\Lib\Helpers\ToolboxHelper; -use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Support\Str; -use Kwaadpepper\Enum\Traits\CastsEnums; +/** + * @property integer $id Id. + * @property string $label Title. + * @property string $slug Slug of the title. + * @property integer $subrange_id Foreign key Subrange. + * @property string $seo_title SEO Title. + * @property string $seo_description SEO description. + * @property \App\Enums\Products\ProductSpeciesEnum $species Species of products. + * @property \App\Enums\NutriscoreEnum $nutriscore Nutriscore. + * @property string $sticker_sm Path of a small sticker. + * @property string $sticker_sm_alt small sticker's attribute alt. + * @property string $sticker_sm_title Small sticker's attribute title. + * @property string $slider_pictures Array of paths of pictures. + * @property string $packaging Packaging. + * @property \Illuminate\Support\Carbon $caliber Caliber. + * @property \Illuminate\Support\Carbon $nutritionnal_values Nutritionnal values. + * @property \Illuminate\Support\Carbon $ingredients Ingredients. + * @property \Illuminate\Support\Carbon $advantage Advantage. + * @property \Illuminate\Support\Carbon $preparation Preparation. + * @property \Illuminate\Support\Carbon $is_frenchpoultry Is frenchpoultry or not. + * @property \App\Enums\Advices\AdviceDifficultyEnum $is_vip Is vip or not. + * @property \App\Enums\Advices\AdviceDifficultyEnum $is_egalim Is egalim or not. + * @property boolean $status Status. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \App\Models\Subrange $subrange Subrange Has-One relation. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> $advices + * Advices Belongs-To-Many relation. + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\News> $news + * News Belongs-To-Many relation. + */ class Product extends Model { - use CastsEnums; use HasFactory; /** @@ -48,30 +76,22 @@ class Product extends Model 'status' ]; - /** - * Map attribute names to enum classes. - * - * @var array - */ - protected $enumCasts = [ - 'species' => ProductSpeciesEnum::class, - 'nutriscore' => NutriscoreEnum::class - ]; - /** * The attributes that should be cast. * * @var array */ protected $casts = [ - 'slider_pictures' => 'array', - 'packaging' => 'array', - 'caliber' => 'array', + 'slider_pictures' => 'array', + 'packaging' => 'array', + 'caliber' => 'array', 'nutritionnal_values' => 'array', - 'is_frenchpoultry' => 'bool', - 'is_vip' => 'bool', - 'is_egalim' => 'bool', - 'status' => 'bool' + 'is_frenchpoultry' => 'bool', + 'is_vip' => 'bool', + 'is_egalim' => 'bool', + 'status' => 'bool', + 'species' => ProductSpeciesEnum::class, + 'nutriscore' => NutriscoreEnum::class ]; /** @@ -79,7 +99,7 @@ class Product extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { // * EVENT CLOSURES. static::creating(function (self $model) { @@ -100,12 +120,12 @@ class Product extends Model // * METHODS /** - * Undocumented function + * Common methods function. * - * @param Model $model + * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { // * ASSERTIONS static::assertLabelIsUnique($model->label, $model->id); @@ -137,13 +157,13 @@ class Product extends Model } /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * - * @param mixed $label + * @param string $label * @param integer|null $id * @return void */ - private static function assertLabelIsUnique($label, ?int $id = null) + private static function assertLabelIsUnique(string $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -151,42 +171,41 @@ class Product extends Model } /** - * Get associated tips + * Get associated tips. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function tipsQuery(): BelongsToMany + public function tipsQuery(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { - return $this->advices()->where('type', AdviceTypeEnum::tips()); + return $this->advices()->where('type', AdviceTypeEnum::tips); } /** - * Get associated recipes + * Get associated recipes. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function recipesQuery(): BelongsToMany + public function recipesQuery(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { - return $this->advices()->where('type', AdviceTypeEnum::tips()); + return $this->advices()->where('type', AdviceTypeEnum::tips); } /** - * Get associated tips + * Get associated tips. * * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ - public function tips(): Collection + public function tips(): \Illuminate\Database\Eloquent\Collection { return $this->tipsQuery()->get(); } - /** - * Get associated recipes + * Get associated recipes. * * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> */ - public function recipes(): Collection + public function recipes(): \Illuminate\Database\Eloquent\Collection { return $this->recipesQuery()->get(); } @@ -194,31 +213,31 @@ class Product extends Model // * RELATIONSHIPS /** - * HasOne Subrange relation + * Subrange Has-One relation. * * @return \Illuminate\Database\Eloquent\Relations\belongsTo */ - public function subrange() + public function subrange(): \Illuminate\Database\Eloquent\Relations\belongsTo { return $this->belongsTo(Subrange::class); } /** - * BelongsToMany advices relation + * Advices Belongs-To-Many relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function advices() + public function advices(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(Advice::class, 'advice_product'); } /** - * BelongsToMany advice relation + * News Belongs-To-Many relation. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ - public function news() + public function news(): \Illuminate\Database\Eloquent\Relations\BelongsToMany { return $this->belongsToMany(News::class); } diff --git a/app/Models/Range.php b/app/Models/Range.php index 4cc4ddb..3a2ad01 100644 --- a/app/Models/Range.php +++ b/app/Models/Range.php @@ -9,6 +9,26 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; +/** + * @property integer $id Id. + * @property string $label Label. + * @property string $slug Slug of the title. + * @property string $seo_title SEO Title. + * @property string $seo_description SEO description. + * @property integer $color Color of the range. + * @property string $picture Path of a picture. + * @property string $picture_alt Picture's attribute alt. + * @property string $picture_title Picture's attribute title. + * @property string $banner Path of a banner. + * @property string $banner_alt Banner's attribute alt. + * @property string $banner_title Banner's attribute title. + * @property integer $order Order. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Subrange> $subranges + * Subranges Has-Many relationship. + */ class Range extends Model { use HasFactory; @@ -30,7 +50,7 @@ class Range extends Model 'picture_banner', 'picture_banner_alt', 'picture_banner_title', - 'order' + 'order', ]; /** @@ -39,7 +59,7 @@ class Range extends Model * @var array */ protected $casts = [ - 'color' => RgbaColor::class + 'color' => RgbaColor::class, ]; /** @@ -47,7 +67,7 @@ class Range extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function () { throw new \RuntimeException('Impossible de créer un range'); @@ -70,14 +90,14 @@ class Range extends Model // * METHODS /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * - * @param mixed $label + * @param string $label * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If an actu label already exists. */ - private static function assertLabelIsUnique($label, ?int $id = null) + private static function assertLabelIsUnique(string $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -87,11 +107,11 @@ class Range extends Model // * RELATIONSHIPS /** - * Get subranges for the Range. + * Subranges Has-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\hasMany */ - public function subranges() + public function subranges(): \Illuminate\Database\Eloquent\Relations\hasMany { return $this->hasMany(Subrange::class); } diff --git a/app/Models/Slide.php b/app/Models/Slide.php index 3df25a3..4607a7a 100644 --- a/app/Models/Slide.php +++ b/app/Models/Slide.php @@ -8,6 +8,24 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Validation\ValidationException; +/** + * @property integer $id Id. + * @property string $title Title. + * @property integer $content WYSWYG content. + * @property boolean $button_display Display the button. + * @property string $button_text Title of the button. + * @property string $button_url Link of the button. + * @property boolean $button_targetblank Open in new window. + * @property string $picture Path of a picture. + * @property string $picture_alt Picture's attribute alt. + * @property string $picture_title Picture's attribute title. + * @property string $picture_thumbnail Path of a thumbnail picture. + * @property string $picture_thumbnail_alt Thumbnail picture's attribute alt. + * @property string $picture_thumbnail_title Thumbnail picture's attribute title. + * @property integer $order Order. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + */ class Slide extends Model { use HasFactory; @@ -48,7 +66,7 @@ class Slide extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function (self $model) { if (count(self::get()) >= 4) { @@ -78,12 +96,12 @@ class Slide extends Model // * METHODS /** - * Undocumented function + * Common methods function. * - * @param Model $model + * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { self::assertTitleIsUnique($model->title, $model->id); ToolboxHelper::assertNoInternalBoUrls($model->content, 'content'); @@ -102,7 +120,7 @@ class Slide extends Model * @return void * @throws \Illuminate\Validation\ValidationException If there is less 1 or more than 4 slides. */ - private static function assertNumberOfSlides() + private static function assertNumberOfSlides(): void { throw ValidationException::withMessages([ 'Opération impossible, minimum un et maximum quatre slides doivent être présentes.' @@ -112,11 +130,11 @@ class Slide extends Model /** * Asserts using validation that the title is unique. * - * @param mixed $title + * @param string $title * @param integer|null $id * @return void */ - private static function assertTitleIsUnique($title, ?int $id = null) + private static function assertTitleIsUnique(string $title, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'title', $title, $id); diff --git a/app/Models/Subrange.php b/app/Models/Subrange.php index 9afaf58..6eeedce 100644 --- a/app/Models/Subrange.php +++ b/app/Models/Subrange.php @@ -7,6 +7,18 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; +/** + * @property integer $id Id. + * @property string $label Label. + * @property string $slug Slug of the label. + * @property integer $range_id Foreign key Range. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Product> $products + * Products Belongs-To-Many relationship. + * @property-read \App\Models\Range $range Range Belongs-To relationship. + */ class Subrange extends Model { use HasFactory; @@ -26,7 +38,7 @@ class Subrange extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { // * EVENT CLOSURES. static::creating(function (self $model) { @@ -41,28 +53,25 @@ class Subrange extends Model // * METHODS /** - * Undocumented function + * Common methods function. * - * @param Model $model + * @param \Illuminate\Database\Eloquent\Model $model * @return void */ - private static function manageFields(Model $model) + private static function manageFields(Model $model): void { - // * ASSERTIONS static::assertLabelIsUnique($model->label, $model->id); - - // * TRANSFORMATIONS $model->slug = Str::slug($model->label); } /** * Asserts using validation that the label is unique * - * @param mixed $label + * @param string $label * @param integer|null $id * @return void */ - private static function assertLabelIsUnique($label, ?int $id = null) + private static function assertLabelIsUnique(string $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -72,7 +81,7 @@ class Subrange extends Model // * RELATIONSHIPS /** - * Get products for the Subrange. + * Products Belongs-To-Many relationship. * * @return \Illuminate\Database\Eloquent\Relations\hasMany */ @@ -82,7 +91,7 @@ class Subrange extends Model } /** - * Get range for the Subrange. + * Range Belongs-To relationship. * * @return \Illuminate\Database\Eloquent\Relations\belongsTo */ diff --git a/app/Models/Tag.php b/app/Models/Tag.php index 1d563d8..d00ea90 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -7,6 +7,38 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; +/** + * @property integer $id Id. + * @property string $title Title. + * @property string $slug Slug of the title. + * @property string $seo_title SEO Title. + * @property string $seo_description SEO description. + * @property \App\Enums\Advices\AdviceTypeEnum $type Type of the advice. + * @property string $picture Path of a picture. + * @property string $picture_alt Picture's attribute alt. + * @property string $picture_title Picture's attribute title. + * @property string $sticker Path of a sticker. + * @property string $sticker_alt Sticker's attribute alt. + * @property string $sticker_title Sticker's attribute title. + * @property string $sticker_sm Path of a small sticker. + * @property string $sticker_sm_alt small sticker's attribute alt. + * @property string $sticker_sm_title Small sticker's attribute title. + * @property string $preparation Preparation tips. + * @property string $advice Advice. + * @property \Illuminate\Support\Carbon $ingredients Ingredients. + * @property \Illuminate\Support\Carbon $guests_nb Number of guests. + * @property \Illuminate\Support\Carbon $youtube_title Youtube title. + * @property \Illuminate\Support\Carbon $youtube_video_id Youtube video id. + * @property \Illuminate\Support\Carbon $cooking_time Time of cooking. + * @property \Illuminate\Support\Carbon $preparation_time Time of preparation. + * @property \App\Enums\Advices\AdviceDifficultyEnum $difficulty Difficulty. + * @property boolean $status Status. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + * + * @property-read \Illuminate\Database\Eloquent\Collection<\App\Models\Advice> $advice + * Advice Morph-To-Many relationship. + */ class Tag extends Model { use HasFactory; @@ -25,7 +57,7 @@ class Tag extends Model * * @return void */ - protected static function booted() + protected static function booted(): void { static::creating(function (Tag $tag) { static::assertLabelIsUnique($tag->label); @@ -43,14 +75,14 @@ class Tag extends Model // * METHODS /** - * Asserts using validation that the label is unique + * Asserts using validation that the label is unique. * - * @param mixed $label + * @param string $label * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If a tag label already exists. */ - private static function assertLabelIsUnique($label, ?int $id = null) + private static function assertLabelIsUnique(string $label, ?int $id = null): void { $table = (new self())->getTable(); ToolboxHelper::assertFieldIsUnique($table, 'label', $label, $id); @@ -60,11 +92,11 @@ class Tag extends Model // * RELATIONSHIPS /** - * MorphedByMany advice relation + * Advice Morphed-By-Many relation. * - * @return \Illuminate\Database\Eloquent\Relations\MorphedByMany + * @return \Illuminate\Database\Eloquent\Relations\MorphToMany */ - public function advice() + public function advice(): \Illuminate\Database\Eloquent\Relations\MorphToMany { return $this->morphedByMany(Advice::class, 'taggable'); } diff --git a/app/Models/User.php b/app/Models/User.php index e2e8a23..6dc9e13 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -9,6 +9,18 @@ use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; +/** + * @property integer $id Id. + * @property string $firstname Firstname. + * @property string $lastname Lastname. + * @property string $email Email. + * @property \Illuminate\Support\Carbon $email_verified_at Email_verified_at. + * @property string $password Password. + * @property string $remember_token Remember_token. + * @property \Carbon\Carbon $last_connection Last_connection. + * @property-read \Illuminate\Support\Carbon $created_at Created date. + * @property-read \Illuminate\Support\Carbon $updated_at Updated date. + */ class User extends Authenticatable { use HasFactory; @@ -20,7 +32,8 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', + 'firstname', + 'lastname', 'email', 'password', ]; @@ -42,7 +55,7 @@ class User extends Authenticatable */ protected $casts = [ 'email_verified_at' => 'datetime', - 'last_connection' => 'datetime', + 'last_connection' => 'datetime', ]; /** @@ -50,7 +63,7 @@ class User extends Authenticatable * * @return void */ - protected static function booted() + protected static function booted(): void { // * EVENT CLOSURES. static::creating(function (self $user) { @@ -74,12 +87,12 @@ class User extends Authenticatable /** * Asserts using validation that the email is unique * - * @param mixed $email + * @param string $email * @param integer|null $id * @return void * @throws \Illuminate\Validation\ValidationException If user email as already used. */ - private static function assertEmailIsUnique($email, ?int $id = null) + private static function assertEmailIsUnique(string $email, ?int $id = null): void { ToolboxHelper::assertFieldIsUnique((new self())->getTable(), 'email', $email, $id); } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 0d5f649..b4b23c2 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,22 +2,13 @@ namespace App\Providers; -use Illuminate\Pagination\Paginator; use Illuminate\Support\Carbon; -use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\URL; +use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { - /** - * Register any application services. - * - * @return void - */ - public function register() - { - } - /** * Bootstrap any application services. * @@ -25,32 +16,25 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { + // * HTTPS FIX URL::forceScheme('https'); - // * LOCAL FORCE eg: for Carbon - // * Remove numeric to prevent float seperator to breaking numeric transactions - \collect([\LC_TIME, \LC_MESSAGES, \LC_COLLATE, \LC_CTYPE, \LC_MONETARY]) - ->map(function ($contant) { - setlocale( - $contant, - \sprintf( - '%s_%s.UTF-8', - config('app.locale'), - \strtoupper(config('app.locale')) - ) - ); - }); - Carbon::setLocale(config('app.locale')); - - // * Force bootstrap paginator with tooltips. - Paginator::defaultView('bo.modules.pagination'); - // * HA PROXY FIX - app()->singleton('clientIp', function () { + App::singleton('clientIp', function () { if (config('app.env') === 'local') { return request()->getClientIp(); + } else { + return request()->server('HTTP_X_FORWARDED_FOR') ?? + request()->getClientIp(); } - return request()->server('HTTP_X_FORWARDED_FOR') ?? request()->getClientIp(); }); + + // * LOCAL FORCE eg: for Carbon + setlocale(LC_ALL, \sprintf( + '%s_%s.UTF-8', + config('app.locale'), + \strtoupper(config('app.locale')) + )); + Carbon::setLocale(config('app.locale')); } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 93dcb44..17f71bf 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -2,12 +2,12 @@ namespace App\Providers; -use App\Lib\Helpers\ToolboxHelper; use App\Models\Advice; use App\Models\ExpertiseProduct; use App\Models\News; use App\Models\NewsCategory; use App\Models\Product; +use App\Models\Range; use App\Models\Slide; use App\Models\Tag; use Illuminate\Cache\RateLimiting\Limit; @@ -15,7 +15,6 @@ 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\Facades\Log; class RouteServiceProvider extends ServiceProvider { @@ -26,7 +25,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - public const HOME = '/home'; + public const HOME = '/'; /** * Define your route model bindings, pattern filters, etc. @@ -37,7 +36,7 @@ class RouteServiceProvider extends ServiceProvider { $this->configureRateLimiting(); - ToolboxHelper::cspReportRoute(); + $this->cspReportRoute(); $this->routes(function () { Route::middleware('web') @@ -49,13 +48,16 @@ class RouteServiceProvider extends ServiceProvider ->group(base_path('routes/web-bo.php')); }); - Route::model('slide', Slide::class); - Route::model('expertiseproduct', ExpertiseProduct::class); - Route::model('news', News::class); - Route::model('newscategory', NewsCategory::class); - Route::model('tag', Tag::class); - Route::model('product', Product::class); - Route::model('advice', Advice::class); + if (collect(explode('/', \request()->getPathInfo()))->get(1) === 'bo') { + Route::model('slide', Slide::class); + Route::model('expertiseproduct', ExpertiseProduct::class); + Route::model('news', News::class); + Route::model('newscategory', NewsCategory::class); + Route::model('tag', Tag::class); + Route::model('range', Range::class); + Route::model('product', Product::class); + Route::model('advice', Advice::class); + } Route::bind('actu', function ($value) { return News::where('id', $value)->orWhere('slug', $value)->firstOrFail(); @@ -72,13 +74,16 @@ class RouteServiceProvider extends ServiceProvider * * @return void */ - protected function configureRateLimiting() + protected function configureRateLimiting(): void { - RateLimiter::for('credentials', function (Request $request) { - return Limit::perMinute(25)->by(optional($request->user())->id ?: app('clientIp')); + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); }); RateLimiter::for('web', function (Request $request) { - return Limit::perMinute(150)->by(optional($request->user())->id ?: app('clientIp')); + return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); + }); + RateLimiter::for('credentials', function (Request $request) { + return Limit::perMinute(30)->by($request->user()?->id ?: app('clientIp')); }); } @@ -88,8 +93,6 @@ class RouteServiceProvider extends ServiceProvider * Put this function inside RouteServiceProvider, * and call it in RouteServiceProvider::boot * - * ! Use this in conjonction with kwaadpepper/exception-handler - * * @return void */ private function cspReportRoute() @@ -110,7 +113,7 @@ class RouteServiceProvider extends ServiceProvider 'blocked-uri' => '', 'document-uri' => '', 'original-policy' => '', 'referrer' => '', 'violated-directive' => '' ])); - Log::warning(sprintf( + \Illuminate\Support\Facades\Log::warning(sprintf( "CSP REPORT for %s : \n %s", $cspReport->get('document-uri'), $cspReport->implode("\n") diff --git a/app/Providers/TranslationServiceProvider.php b/app/Providers/TranslationServiceProvider.php index 816aaa6..b3e3f4b 100644 --- a/app/Providers/TranslationServiceProvider.php +++ b/app/Providers/TranslationServiceProvider.php @@ -6,6 +6,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Cache; use Illuminate\Support\ServiceProvider; +use Symfony\Component\Finder\SplFileInfo; class TranslationServiceProvider extends ServiceProvider { @@ -14,7 +15,7 @@ class TranslationServiceProvider extends ServiceProvider * * @return void */ - public function boot() + public function boot(): void { foreach ($this->collectLocalesStrings() as $locale) { // * Suported locales @@ -31,12 +32,12 @@ class TranslationServiceProvider extends ServiceProvider /** * Gather provided langs checking from files * - * @return Collection + * @return \Illuminate\Support\Collection */ private function collectLocalesStrings(): Collection { - return collect(File::allFiles(resource_path('lang/')))->flatMap(function ($file) { - if ($file->getRelativePath()) { + return collect(File::allFiles(resource_path('lang/')))->flatMap(function (SplFileInfo $file) { + if ($file->getRelativePath() and \strpos($file->getRelativePath(), 'vendor') !== 0) { return [$file->getRelativePath() => '']; } })->keys(); @@ -46,7 +47,7 @@ class TranslationServiceProvider extends ServiceProvider * Gather all php translations * * @param string $locale - * @return array + * @return array */ private function phpTranslations(string $locale): array { @@ -62,7 +63,7 @@ class TranslationServiceProvider extends ServiceProvider * Gather json translations * * @param string $locale - * @return array + * @return array */ private function jsonTranslations(string $locale): array { diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php new file mode 100644 index 0000000..bfee08f --- /dev/null +++ b/app/Providers/ViewServiceProvider.php @@ -0,0 +1,41 @@ +name) and isset($appInfos->version) and isset($appInfos->license)) { + View::share('cpsr_name', $appInfos->name); + View::share('cpsr_version', $appInfos->version); + View::share('cpsr_license', $appInfos->license); + View::share('cpsr_support', $appInfos->support->email); + } + + if (!app()->runningInConsole()) { + // * FORCE BOOTSTRAP PAGINATOR (or custom if in front) + // Early boot, request wont be filled as expected. + if (collect(explode('/', \request()->getPathInfo()))->get(1) === 'bo') { + Paginator::defaultView('bo.modules.pagination'); + } else { + Paginator::useBootstrap(); + } + } + } +} diff --git a/app/Traits/Controllers/ChangesModelOrder.php b/app/Traits/Controllers/ChangesModelOrder.php new file mode 100644 index 0000000..ed0be43 --- /dev/null +++ b/app/Traits/Controllers/ChangesModelOrder.php @@ -0,0 +1,57 @@ +route()->parameterNames); + $className = Str::ucfirst(Str::lower($params->get($params->count() - 2))); + $className = "\\App\\Models\\$className"; + + if (!class_exists($className)) { + throw new \RuntimeException("The $className class doesn't exist."); + } + + /** @var \Illuminate\Database\Eloquent\Model|null */ + $model = $className::where('id', $model->id)->first(); + + if (!$model) { + return redirect()->back()->with('error', trans('crud.messages.order_not_changed')); + } + + return DB::transaction(function () use ($request, $className, $model) { + /** @var \Illuminate\Database\Eloquent\Model|null */ + $tmp = $className::where('order', $request->direction ? '<' : '>', $model->order) + ->orderBy('order', $request->direction ? 'DESC' : 'ASC')->first(); + + if (!$tmp) { + return redirect()->back()->with('error', trans('crud.messages.order_not_changed')); + } + + $newOrder = $tmp->order; + $tmp->order = $model->order; + $model->order = $newOrder; + $tmp->saveOrFail(); + $model->saveOrFail(); + Session::flash('success', trans('crud.messages.order_changed')); + + return redirect()->back(); + }); + } +} diff --git a/app/Traits/Enums/BaseEnum.php b/app/Traits/Enums/BaseEnum.php new file mode 100644 index 0000000..36c7b35 --- /dev/null +++ b/app/Traits/Enums/BaseEnum.php @@ -0,0 +1,256 @@ +name]; + } + + /** + * Get enum label + * + * @return string + */ + public function label(): string + { + return self::toLabels()[$this->name]; + } + + /** + * Get enum name + * + * @return string + */ + public function name(): string + { + return $this->name; + } + + // * STATIC FETCH METHODS + + /** + * Get enum labels + * + * @return array + */ + public static function toLabels(): array + { + if (empty(self::getCache('labels'))) { + $labels = self::getLabelsConstant(); + self::setCache('labels', \collect(self::cases()) + ->mapWithKeys(function ($enum) use ($labels) { + if (!\is_null($labels) and !isset($labels[$enum->name])) { + throw new \Error('Missing definition label ' . self::class . " for {$enum->name}"); + } + return [$enum->name => \trans( + !\is_null($labels) ? $labels[$enum->name] : Str::ucfirst($enum->name) + )]; + })->all()); + } + return self::getCache('labels'); + } + + /** + * Get enum values + * + * @return array + */ + public static function toValues(): array + { + if (empty(self::getCache('values'))) { + self::setCache('values', \collect(self::cases()) + ->mapWithKeys(fn ($enum) => [$enum->name => $enum->value])->all()); + } + return self::getCache('values'); + } + + /** + * Get enums + * + * @return array + */ + public static function all(): array + { + return self::cases(); + } + + /** + * Get enums + * + * @return array + */ + public static function toArray(): array + { + if (empty(self::getCache('enums'))) { + $definitions = self::getCustomDefinitions(); + self::setCache('enums', \collect(self::cases()) + ->mapWithKeys(function ($enum) use ($definitions) { + $baseArray = [ + 'name' => $enum->name, + 'label' => $enum->label(), + 'value' => $enum->value, + ]; + foreach ($definitions as $index => $elements) { + $index = Str::lower(Str::singular($index)); + if (!isset($elements[$enum->name])) { + throw new \Error("Missing definition {$index} " . self::class . " for {$enum->name}"); + } + $baseArray[$index] = $elements[$enum->name]; + } + return [$enum->name => (object)$baseArray]; + })->all()); + } + return self::getCache('enums'); + } + + /** + * Fetch enum using value + * + * @param \App\Traits\Enums\BaseEnum|integer|string $value + * @return \App\Traits\Enums\BaseEnum|null + */ + public static function make(self|int|string $value): self|null + { + return !\is_object($value) ? + \collect(self::cases())->keyBy('value')->get($value) : $value; + } + + /** + * Test if 2 enum are equals + * + * @param object ...$others + * @return boolean + * @throws \Error If provided element are not enums taht extends BaseEnum. + */ + public function equals(object ...$others): bool + { + foreach ($others as $other) { + if (!\in_array(BaseEnum::class, \class_uses_recursive($other))) { + throw new \Error(__METHOD__ . + ' requires $enum to use ' . BaseEnum::class); + } + if ( + get_class($this) === get_class($other) + && $this->value === $other->value + ) { + return true; + } + } + return false; + } + + /** + * Serialize to json + * + * @return mixed + */ + public function jsonSerialize(): mixed + { + return $this->value; + } + + + // * CACHE + + /** + * Get cache array + * + * @param string $index + * @return array + */ + private static function getCache(string $index): array + { + self::initCache(); + if (!isset($GLOBALS[self::class]['props'][$index])) { + $GLOBALS[self::class]['props'][$index] = []; + } + return $GLOBALS[self::class]['props'][$index]; + } + + /** + * Set cache array + * + * @param string $index + * @param array $items + * @return void + */ + private static function setCache(string $index, array $items): void + { + self::initCache(); + if (!isset($GLOBALS[self::class]['props'][$index])) { + $GLOBALS[self::class]['props'][$index] = []; + } + $GLOBALS[self::class]['props'][$index] = $items; + } + + /** + * Init cache if needed + * + * @return void + */ + private static function initCache(): void + { + if (!isset($GLOBALS[self::class])) { + $GLOBALS[self::class] = [ + 'props' => [ + 'enums' => [], + 'values' => [], + 'labels' => [] + ], + 'customProps' => null + ]; + } + } + + // * PRIVATE + + /** + * Fetch the LABELS constant if exists + * + * @return array|null + */ + private static function getLabelsConstant(): array|null + { + $class_name = self::class; + try { + $constant_reflex = new \ReflectionClassConstant($class_name, 'LABELS'); + return $constant_reflex->getValue(); + } catch (\ReflectionException $e) { + return null; + } + } + + /** + * Get custom constants + * + * @return array + */ + private static function getCustomDefinitions(): array + { + // ? Has custom props in cache ? + if (!isset($GLOBALS[self::class]) or \is_null($GLOBALS[self::class]['customProps'])) { + $names = \collect(self::cases())->keyBy('name'); + + $GLOBALS[self::class]['customProps'] = \collect((new \ReflectionClass(self::class))->getConstants()) + ->filter(function (mixed $constant, string $key) use ($names) { + if ($key === 'LABELS' or !\is_array($constant)) { + return false; + } + return \collect($constant)->keys() + ->filter(fn (string $name) => $names->has($name))->count(); + })->all(); + } + return $GLOBALS[self::class]['customProps']; + } +} diff --git a/app/Traits/Models/ChangesModelOrder.php b/app/Traits/Models/ChangesModelOrder.php deleted file mode 100644 index 249c43b..0000000 --- a/app/Traits/Models/ChangesModelOrder.php +++ /dev/null @@ -1,39 +0,0 @@ -direction ? '<' : '>', $model->order) - ->orderBy('order', $request->direction ? 'DESC' : 'ASC')->first(); - if (!$tmp) { - return back()->with('error', trans('L\'ordre n\'a pas pu être modifié')); - } - $newOrder = $tmp->order; - $tmp->order = $model->order; - $model->order = $newOrder; - $tmp->saveOrFail(); - $model->saveOrFail(); - Session::flash('success', trans('L\'ordre à été modifié')); - return back(); - }); - } -} diff --git a/composer.json b/composer.json index 2de75b6..970433f 100644 --- a/composer.json +++ b/composer.json @@ -1,37 +1,46 @@ { "name": "uwil/le-gaulois-pro", + "version": "2.0.0", "type": "project", + "description": "Le Gaulois Pro website.", + "support": { + "email": "equipe.web@ldc.fr" + }, + "keywords": [ + "framework", + "laravel" + ], + "license": "MIT", "require": { - "php": "^7.3|^8.0", - "axlon/laravel-postal-code-validation": "^3.3", - "carlos-meneses/laravel-mpdf": "^2.1", - "diglactic/laravel-breadcrumbs": "^8.0", - "fruitcake/laravel-cors": "^2.0", - "guzzlehttp/guzzle": "^7.0.1", - "kaishiyoku/laravel-color-validation": "^1.6", - "kwaadpepper/image-resizer": "^0.1.2", - "kwaadpepper/refresh-sitemap": "^1.0", - "laravel/framework": "^8.83", - "laravel/tinker": "^2.5", - "laravel/ui": "^3.4", - "ldc/web-admin-secure-laravel": "^1.0", - "mews/purifier": "^3.3", - "propaganistas/laravel-phone": "^4.4", - "sentry/sentry-laravel": "^3.1", - "spatie/calendar-links": "^1.5", - "spatie/laravel-mix-preload": "^1.3", + "axlon/laravel-postal-code-validation": "^3.4", + "carlos-meneses/laravel-mpdf": "^2.1.13", + "diglactic/laravel-breadcrumbs": "^8.1.1", + "guzzlehttp/guzzle": "^7.2", + "kaishiyoku/laravel-color-validation": "^2.1.1", + "kwaadpepper/image-resizer": "^2.1.0", + "kwaadpepper/refresh-sitemap": "^2.0.1", + "laravel/framework": "^10.0", + "laravel/tinker": "^2.8", + "laravel/ui": "^4.2", + "ldc/web-admin-secure-laravel": "^2.0.0", + "mews/purifier": "^3.4", + "php": "^8.2", + "propaganistas/laravel-phone": "^5.0.3", + "sentry/sentry-laravel": "^3.8", + "spatie/calendar-links": "^1.8.5", "uwil/k8s-laravel": "^1.2" }, "require-dev": { "doctrine/dbal": "^3.3", - "facade/ignition": "^2.5", "fakerphp/faker": "^1.9.1", "laravel-lang/lang": "10.0", - "laravel/sail": "^1.0.1", + "laravel/pint": "^1.0", + "laravel/sail": "^1.18", "mockery/mockery": "^1.4.4", - "nunomaduro/collision": "^5.10", - "phpunit/phpunit": "^9.5.10", - "slevomat/coding-standard": "^8.3" + "nunomaduro/collision": "^7.0", + "phpunit/phpunit": "^10.0", + "slevomat/coding-standard": "^8.10", + "spatie/laravel-ignition": "^2.3" }, "autoload": { "psr-4": { @@ -45,6 +54,12 @@ "Tests\\": "tests/" } }, + "repositories": [ + { + "type": "composer", + "url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json" + } + ], "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", @@ -70,19 +85,11 @@ "preferred-install": "dist", "sort-packages": true, "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true, - "php-http/discovery": true - }, - "gitlab-domains": [ - "lab.s-web.fr" - ] - }, - "minimum-stability": "dev", - "prefer-stable": true, - "repositories": { - "lab.s-web.fr": { - "type": "composer", - "url": "https://lab.s-web.fr/api/v4/group/23/-/packages/composer/packages.json" + "pestphp/pest-plugin": true, + "php-http/discovery": true, + "dealerdirect/phpcodesniffer-composer-installer": true } - } + }, + "minimum-stability": "stable", + "prefer-stable": true } diff --git a/composer.lock b/composer.lock index 16ea2f4..797143b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,88 +4,32 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "68c83e22327b86c207526bc1b9ac0188", + "content-hash": "4f9f86770153909208b40cbf55240ede", "packages": [ - { - "name": "asm89/stack-cors", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/asm89/stack-cors.git", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/asm89/stack-cors/zipball/73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "reference": "73e5b88775c64ccc0b84fb60836b30dc9d92ac4a", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "symfony/http-foundation": "^4|^5|^6", - "symfony/http-kernel": "^4|^5|^6" - }, - "require-dev": { - "phpunit/phpunit": "^7|^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "Asm89\\Stack\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander", - "email": "iam.asm89@gmail.com" - } - ], - "description": "Cross-origin resource sharing library and stack middleware", - "homepage": "https://github.com/asm89/stack-cors", - "keywords": [ - "cors", - "stack" - ], - "support": { - "issues": "https://github.com/asm89/stack-cors/issues", - "source": "https://github.com/asm89/stack-cors/tree/v2.1.1" - }, - "time": "2022-01-18T09:12:03+00:00" - }, { "name": "axlon/laravel-postal-code-validation", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/axlon/laravel-postal-code-validation.git", - "reference": "65048ba3c720808d862e501fb7a66a90c83bb0e4" + "reference": "b4cd64b0d3358c42d7805370c5f9ab2f2f411e81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/axlon/laravel-postal-code-validation/zipball/65048ba3c720808d862e501fb7a66a90c83bb0e4", - "reference": "65048ba3c720808d862e501fb7a66a90c83bb0e4", + "url": "https://api.github.com/repos/axlon/laravel-postal-code-validation/zipball/b4cd64b0d3358c42d7805370c5f9ab2f2f411e81", + "reference": "b4cd64b0d3358c42d7805370c5f9ab2f2f411e81", "shasum": "" }, "require": { - "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0|^9.0", - "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0|^9.0", - "illuminate/validation": "^5.5 || ^6.0 || ^7.0 || ^8.0|^9.0", + "illuminate/contracts": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "illuminate/support": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", + "illuminate/validation": "^5.5 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", "php": "^7.2 || ^8.0" }, "require-dev": { "guzzlehttp/guzzle": "^6.5 || ^7.0.1", "mockery/mockery": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.0", + "phpunit/phpunit": "^8.5 || ^9.0 || ^10.0", "symfony/var-exporter": "^4.0" }, "type": "library", @@ -125,32 +69,31 @@ ], "support": { "issues": "https://github.com/axlon/laravel-postal-code-validation/issues", - "source": "https://github.com/axlon/laravel-postal-code-validation/tree/v3.3.0" + "source": "https://github.com/axlon/laravel-postal-code-validation/tree/v3.4.0" }, - "time": "2022-02-08T17:17:34+00:00" + "time": "2023-02-15T12:56:26+00:00" }, { "name": "brick/math", - "version": "0.9.3", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -175,36 +118,32 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { "url": "https://github.com/BenMorel", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "carlos-meneses/laravel-mpdf", - "version": "2.1.11", + "version": "2.1.13", "source": { "type": "git", "url": "https://github.com/mccarlosen/laravel-mpdf.git", - "reference": "cb52e5c17df9caa340eaed8566cfb1e3c7b37c33" + "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mccarlosen/laravel-mpdf/zipball/cb52e5c17df9caa340eaed8566cfb1e3c7b37c33", - "reference": "cb52e5c17df9caa340eaed8566cfb1e3c7b37c33", + "url": "https://api.github.com/repos/mccarlosen/laravel-mpdf/zipball/f2461faf0c5d328d28de13c3dcc14e70d77aef83", + "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83", "shasum": "" }, "require": { - "mpdf/mpdf": "^8.0", + "mpdf/mpdf": "^8.0|^8.1", "php": "^5.6|^7.0|^8.0" }, "type": "library", @@ -235,7 +174,7 @@ ], "support": { "issues": "https://github.com/mccarlosen/laravel-mpdf/issues", - "source": "https://github.com/mccarlosen/laravel-mpdf/tree/2.1.11" + "source": "https://github.com/mccarlosen/laravel-mpdf/tree/2.1.13" }, "funding": [ { @@ -243,7 +182,7 @@ "type": "custom" } ], - "time": "2022-12-28T02:20:09+00:00" + "time": "2023-09-01T15:09:05+00:00" }, { "name": "clue/stream-filter", @@ -312,31 +251,106 @@ "time": "2022-02-21T13:15:14+00:00" }, { - "name": "diglactic/laravel-breadcrumbs", - "version": "v8.0.1", + "name": "dflydev/dot-access-data", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/diglactic/laravel-breadcrumbs.git", - "reference": "b2c594e56fd15ef3112436e2067dca13131dd990" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/b2c594e56fd15ef3112436e2067dca13131dd990", - "reference": "b2c594e56fd15ef3112436e2067dca13131dd990", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "diglactic/laravel-breadcrumbs", + "version": "v8.1.1", + "source": { + "type": "git", + "url": "https://github.com/diglactic/laravel-breadcrumbs.git", + "reference": "f72a78eb3e26aea507d7888a65f15e5790864e21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/f72a78eb3e26aea507d7888a65f15e5790864e21", + "reference": "f72a78eb3e26aea507d7888a65f15e5790864e21", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "laravel/framework": "^6.0 || ^7.0 || ^8.0 || ^9.0", + "laravel/framework": "^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", "php": "^7.2 || ^8.0" }, "conflict": { "davejamesmiller/laravel-breadcrumbs": "*" }, "require-dev": { - "orchestra/testbench": "^4.10 || ^5.9 || ^6.4 || ^7.0", + "orchestra/testbench": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", "php-coveralls/php-coveralls": "^2.4", - "phpunit/phpunit": "^8.5 || ^9.4", + "phpunit/phpunit": "^8.5 || ^9.5", "spatie/phpunit-snapshot-assertions": "^2.2 || ^4.2" }, "type": "library", @@ -378,34 +392,34 @@ ], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", - "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v8.0.1" + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v8.1.1" }, - "time": "2022-09-02T16:18:17+00:00" + "time": "2023-04-17T23:24:15+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.6", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" + "vimeo/psalm": "^4.25 || ^5.4" }, "type": "library", "autoload": { @@ -455,7 +469,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -471,35 +485,36 @@ "type": "tidelift" } ], - "time": "2022-10-20T09:10:12+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", - "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9.0", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.11" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -531,7 +546,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.3" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -547,20 +562,20 @@ "type": "tidelift" } ], - "time": "2022-02-28T11:07:21+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.2", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "shasum": "" }, "require": { @@ -600,7 +615,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" }, "funding": [ { @@ -608,31 +623,126 @@ "type": "github" } ], - "time": "2022-09-10T18:51:20+00:00" + "time": "2023-08-10T19:36:49+00:00" }, { - "name": "egulias/email-validator", - "version": "2.1.25", + "name": "dxw/cidr", + "version": "v3.2.0", "source": { "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + "url": "https://github.com/dxw/cidr.git", + "reference": "b07dd398f5a93441f57a687982bc7d0ffb96729a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "url": "https://api.github.com/repos/dxw/cidr/zipball/b07dd398f5a93441f57a687982bc7d0ffb96729a", + "reference": "b07dd398f5a93441f57a687982bc7d0ffb96729a", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "dxw/result": "^1.0", + "php": "^7.4||^8.1", + "phpseclib/phpseclib": "^2.0" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "dxw/php-cs-fixer-config": "^2.0", + "kahlan/kahlan": "^5.2", + "vimeo/psalm": "^5.14" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dxw\\CIDR\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "dxw", + "email": "team@govpress.com", + "homepage": "https://www.dxw.com" + } + ], + "description": "IP address matching with CIDR ranges", + "homepage": "https://github.com/dxw/cidr", + "support": { + "issues": "https://github.com/dxw/cidr/issues", + "source": "https://github.com/dxw/cidr/tree/v3.2.0" + }, + "time": "2023-08-14T10:14:13+00:00" + }, + { + "name": "dxw/result", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/dxw/result.git", + "reference": "d554bb10f0cf74056ccd26526688e194652eef79" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dxw/result/zipball/d554bb10f0cf74056ccd26526688e194652eef79", + "reference": "d554bb10f0cf74056ccd26526688e194652eef79", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.1" + }, + "require-dev": { + "dxw/php-cs-fixer-config": "^2.1", + "kahlan/kahlan": "^5.2", + "vimeo/psalm": "^4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dxw\\Result\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mallory Adams", + "email": "mallory@dxw.com", + "homepage": "https://www.dxw.com/" + } + ], + "description": "Result values", + "homepage": "https://github.com/dxw/result", + "support": { + "issues": "https://github.com/dxw/result/issues", + "source": "https://github.com/dxw/result/tree/v1.0.6" + }, + "time": "2023-07-19T11:14:28+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -640,7 +750,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -668,7 +778,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" }, "funding": [ { @@ -676,27 +786,34 @@ "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2023-01-14T14:17:03+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.16.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/523407fb06eb9e5f3d59889b3978d5bfe94299c8", + "reference": "523407fb06eb9e5f3d59889b3978d5bfe94299c8", "shasum": "" }, "require": { - "php": ">=5.2" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" }, "type": "library", "autoload": { @@ -728,9 +845,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/master" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.16.0" }, - "time": "2020-06-29T00:56:53+00:00" + "time": "2022-09-18T07:06:19+00:00" }, { "name": "facade/ignition-contracts", @@ -786,40 +903,32 @@ "time": "2020-10-16T08:27:54+00:00" }, { - "name": "fruitcake/laravel-cors", - "version": "v2.2.0", + "name": "fruitcake/php-cors", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/fruitcake/laravel-cors.git", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534" + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/783a74f5e3431d7b9805be8afb60fd0a8f743534", - "reference": "783a74f5e3431d7b9805be8afb60fd0a8f743534", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", "shasum": "" }, "require": { - "asm89/stack-cors": "^2.0.1", - "illuminate/contracts": "^6|^7|^8|^9", - "illuminate/support": "^6|^7|^8|^9", - "php": ">=7.2" + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" }, "require-dev": { - "laravel/framework": "^6|^7.24|^8", - "orchestra/testbench-dusk": "^4|^5|^6|^7", - "phpunit/phpunit": "^6|^7|^8|^9", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" - }, - "laravel": { - "providers": [ - "Fruitcake\\Cors\\CorsServiceProvider" - ] + "dev-main": "1.1-dev" } }, "autoload": { @@ -837,20 +946,20 @@ "homepage": "https://fruitcake.nl" }, { - "name": "Barry vd. Heuvel", + "name": "Barryvdh", "email": "barryvdh@gmail.com" } ], - "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Laravel application", + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", "keywords": [ - "api", "cors", - "crossdomain", - "laravel" + "laravel", + "symfony" ], "support": { - "issues": "https://github.com/fruitcake/laravel-cors/issues", - "source": "https://github.com/fruitcake/laravel-cors/tree/v2.2.0" + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" }, "funding": [ { @@ -862,20 +971,20 @@ "type": "github" } ], - "time": "2022-02-23T14:25:13+00:00" + "time": "2022-02-20T15:07:15+00:00" }, { "name": "giggsey/libphonenumber-for-php", - "version": "8.13.4", + "version": "8.13.20", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php.git", - "reference": "b2cebcf2b8d3e194b692d8bae2a5b79f5366674c" + "reference": "c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/b2cebcf2b8d3e194b692d8bae2a5b79f5366674c", - "reference": "b2cebcf2b8d3e194b692d8bae2a5b79f5366674c", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php/zipball/c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a", + "reference": "c8da9366ab46cbc83f9fd0e7b0ac12f8ddbb721a", "shasum": "" }, "require": { @@ -934,20 +1043,20 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php/issues", "source": "https://github.com/giggsey/libphonenumber-for-php" }, - "time": "2023-01-09T09:44:18+00:00" + "time": "2023-09-07T06:33:03+00:00" }, { "name": "giggsey/locale", - "version": "2.3", + "version": "2.4", "source": { "type": "git", "url": "https://github.com/giggsey/Locale.git", - "reference": "5f035523740be40d40ac768a123c9bcc1ae12f56" + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/Locale/zipball/5f035523740be40d40ac768a123c9bcc1ae12f56", - "reference": "5f035523740be40d40ac768a123c9bcc1ae12f56", + "url": "https://api.github.com/repos/giggsey/Locale/zipball/a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", + "reference": "a6b33dfc9e8949b7e28133c4628b29cd9f1850bb", "shasum": "" }, "require": { @@ -986,30 +1095,30 @@ "description": "Locale functions required by libphonenumber-for-php", "support": { "issues": "https://github.com/giggsey/Locale/issues", - "source": "https://github.com/giggsey/Locale/tree/2.3" + "source": "https://github.com/giggsey/Locale/tree/2.4" }, - "time": "2022-10-19T20:03:30+00:00" + "time": "2023-04-13T07:40:58+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9" + "phpoption/phpoption": "^1.9.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" }, "type": "library", "autoload": { @@ -1038,7 +1147,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" }, "funding": [ { @@ -1050,26 +1159,26 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:56:11+00:00" + "time": "2023-02-25T20:23:15+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1080,7 +1189,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -1094,9 +1204,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -1162,7 +1269,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -1178,38 +1285,37 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2023-08-27T10:20:53+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -1246,7 +1352,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.1" }, "funding": [ { @@ -1262,47 +1368,48 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2023-08-03T15:11:55+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.9.0", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", - "reference": "e98e3e6d4f86621a9b75f623996e6bbdeb4b9318", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.9-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Psr7\\": "src/" } @@ -1341,6 +1448,11 @@ "name": "Tobias Schultze", "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -1356,7 +1468,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -1372,7 +1484,87 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:03+00:00" + "time": "2023-08-27T10:13:57+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "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" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2023-08-27T10:19:19+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -1518,21 +1710,21 @@ }, { "name": "intervention/imagecache", - "version": "2.5.2", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/Intervention/imagecache.git", - "reference": "270d1e72ddff2fc0a6d3c7e6cbc9d23c9ec1e3e4" + "reference": "86136575a62d3634b51f196a998fce4a583b49bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/imagecache/zipball/270d1e72ddff2fc0a6d3c7e6cbc9d23c9ec1e3e4", - "reference": "270d1e72ddff2fc0a6d3c7e6cbc9d23c9ec1e3e4", + "url": "https://api.github.com/repos/Intervention/imagecache/zipball/86136575a62d3634b51f196a998fce4a583b49bb", + "reference": "86136575a62d3634b51f196a998fce4a583b49bb", "shasum": "" }, "require": { - "illuminate/cache": "^5.5|~6|~7|~8|~9", - "illuminate/filesystem": "^5.5|~6|~7|~8|~9", + "illuminate/cache": "^5.5|~6|~7|~8|~9|~10", + "illuminate/filesystem": "^5.5|~6|~7|~8|~9|~10", "intervention/image": "~2.2", "nesbot/carbon": "^2.39", "opis/closure": "^3.5", @@ -1569,7 +1761,7 @@ ], "support": { "issues": "https://github.com/Intervention/imagecache/issues", - "source": "https://github.com/Intervention/imagecache/tree/2.5.2" + "source": "https://github.com/Intervention/imagecache/tree/2.6.0" }, "funding": [ { @@ -1581,7 +1773,7 @@ "type": "github" } ], - "time": "2022-01-22T11:14:47+00:00" + "time": "2023-02-25T19:40:47+00:00" }, { "name": "jean85/pretty-package-versions", @@ -1644,27 +1836,27 @@ }, { "name": "kaishiyoku/laravel-color-validation", - "version": "1.6.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Kaishiyoku/laravel-color-validation.git", - "reference": "10851fdae2237489fecadc7f846908e43814013c" + "reference": "4a77492335e37d18055ec9547332d224186d074b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kaishiyoku/laravel-color-validation/zipball/10851fdae2237489fecadc7f846908e43814013c", - "reference": "10851fdae2237489fecadc7f846908e43814013c", + "url": "https://api.github.com/repos/Kaishiyoku/laravel-color-validation/zipball/4a77492335e37d18055ec9547332d224186d074b", + "reference": "4a77492335e37d18055ec9547332d224186d074b", "shasum": "" }, "require": { - "illuminate/support": "^6.0|^7.0|^8.0", - "illuminate/validation": "^6.0|^7.0|^8.0", - "php": "^7.2|^8.0", - "spatie/regex": "^1.4" + "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", + "spatie/regex": "^1.4|^3.1" }, "require-dev": { - "orchestra/testbench": "^3.7", - "phpunit/phpunit": "^7.5|8.*" + "orchestra/testbench": "^6.0", + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { @@ -1686,107 +1878,47 @@ "authors": [ { "name": "Kaishiyoku", - "email": "dev@andreas-wiedel.de" + "email": "dev@andreas-wiedel.de", + "homepage": "https://andreas-wiedel.de", + "role": "Maintainer" } ], - "description": "Laravel 5 color validation rules", + "description": "Laravel color validation rules", "homepage": "https://github.com/Kaishiyoku/laravel-color-validation", "keywords": [ "color", "laravel", + "validation rules", "validator" ], "support": { "issues": "https://github.com/Kaishiyoku/laravel-color-validation/issues", - "source": "https://github.com/Kaishiyoku/laravel-color-validation/tree/1.6.1" + "source": "https://github.com/Kaishiyoku/laravel-color-validation/tree/2.1.1" }, - "time": "2022-01-10T08:24:23+00:00" - }, - { - "name": "kwaadpepper/enum", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/Kwaadpepper/enum.git", - "reference": "cc695e6a07ee57a1220942581c303842e186b22f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/enum/zipball/cc695e6a07ee57a1220942581c303842e186b22f", - "reference": "cc695e6a07ee57a1220942581c303842e186b22f", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "orchestra/testbench": "^6", - "phpunit/php-code-coverage": "^9", - "phpunit/phpunit": "~9", - "slevomat/coding-standard": "^7", - "squizlabs/php_codesniffer": "^3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Kwaadpepper\\Enum\\EnumServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Kwaadpepper\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jérémy Munsch", - "email": "github@jeremydev.ovh", - "homepage": "https://jeremydev.ovh" - } - ], - "description": "Enums to use for any project", - "homepage": "https://github.com/kwaadpepper/enum", - "keywords": [ - "enum", - "laravel" - ], - "support": { - "issues": "https://github.com/Kwaadpepper/enum/issues", - "source": "https://github.com/Kwaadpepper/enum/tree/2.1.3" - }, - "time": "2022-07-28T15:18:54+00:00" + "time": "2023-02-13T20:23:52+00:00" }, { "name": "kwaadpepper/image-resizer", - "version": "0.1.2", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Kwaadpepper/image-resizer.git", - "reference": "5af71cf1c40ca15c061b32166e606dfddc39da0a" + "reference": "2a14ad153b34916f437af50549bad47c018902df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/image-resizer/zipball/5af71cf1c40ca15c061b32166e606dfddc39da0a", - "reference": "5af71cf1c40ca15c061b32166e606dfddc39da0a", + "url": "https://api.github.com/repos/Kwaadpepper/image-resizer/zipball/2a14ad153b34916f437af50549bad47c018902df", + "reference": "2a14ad153b34916f437af50549bad47c018902df", "shasum": "" }, "require": { - "illuminate/support": "~7|~8", - "intervention/image": "^2.5", - "intervention/imagecache": "^2.5", - "laravel/framework": "~7|~8" + "illuminate/support": "~10", + "intervention/image": "^2.7.2", + "intervention/imagecache": "^2.6", + "laravel/framework": "~10" }, "require-dev": { - "orchestra/testbench": "^6.13", - "phpunit/phpunit": "~9.0", - "slevomat/coding-standard": "^7.2", - "squizlabs/php_codesniffer": "^3.5" + "slevomat/coding-standard": "^8.11" }, "type": "library", "extra": { @@ -1821,32 +1953,31 @@ ], "support": { "issues": "https://github.com/Kwaadpepper/image-resizer/issues", - "source": "https://github.com/Kwaadpepper/image-resizer/tree/0.1.2" + "source": "https://github.com/Kwaadpepper/image-resizer/tree/2.1.0" }, - "time": "2022-10-17T16:05:21+00:00" + "time": "2023-06-08T12:07:24+00:00" }, { "name": "kwaadpepper/refresh-sitemap", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/Kwaadpepper/refresh-sitemap.git", - "reference": "003b116bff9f9531d8ca69cd1fc529878b8b54a6" + "reference": "47f8681abe01e6d3f2f38d569508748cf12f89d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Kwaadpepper/refresh-sitemap/zipball/003b116bff9f9531d8ca69cd1fc529878b8b54a6", - "reference": "003b116bff9f9531d8ca69cd1fc529878b8b54a6", + "url": "https://api.github.com/repos/Kwaadpepper/refresh-sitemap/zipball/47f8681abe01e6d3f2f38d569508748cf12f89d6", + "reference": "47f8681abe01e6d3f2f38d569508748cf12f89d6", "shasum": "" }, "require": { - "illuminate/support": "~8", - "kwaadpepper/enum": "~2", - "laravel/framework": "~8", - "spatie/laravel-sitemap": "^5.8" + "illuminate/support": "~10", + "laravel/framework": "~10", + "spatie/laravel-sitemap": "^6.0" }, "require-dev": { - "slevomat/coding-standard": "^7.2" + "slevomat/coding-standard": "^8.11" }, "type": "library", "extra": { @@ -1880,62 +2011,72 @@ ], "support": { "issues": "https://github.com/Kwaadpepper/refresh-sitemap/issues", - "source": "https://github.com/Kwaadpepper/refresh-sitemap/tree/1.0.0" + "source": "https://github.com/Kwaadpepper/refresh-sitemap/tree/2.0.1" }, - "time": "2022-06-10T17:46:53+00:00" + "time": "2023-05-22T14:29:33+00:00" }, { "name": "laravel/framework", - "version": "v8.83.26", + "version": "v10.23.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "7411d9fa71c1b0fd73a33e225f14512b74e6c81e" + "reference": "dbfd495557678759153e8d71cc2f6027686ca51e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/7411d9fa71c1b0fd73a33e225f14512b74e6c81e", - "reference": "7411d9fa71c1b0fd73a33e225f14512b74e6c81e", + "url": "https://api.github.com/repos/laravel/framework/zipball/dbfd495557678759153e8d71cc2f6027686ca51e", + "reference": "dbfd495557678759153e8d71cc2f6027686ca51e", "shasum": "" }, "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", + "brick/math": "^0.9.3|^0.10.2|^0.11", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/log": "^1.0|^2.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.2.2", - "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.4", - "symfony/error-handler": "^5.4", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "symfony/http-kernel": "^5.4", - "symfony/mime": "^5.4", - "symfony/process": "^5.4", - "symfony/routing": "^5.4", - "symfony/var-dumper": "^5.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.67", + "nunomaduro/termwind": "^1.13", + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^1.6.1" + "voku/portable-ascii": "^2.0" }, "conflict": { "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { "illuminate/auth": "self.version", @@ -1943,6 +2084,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -1960,6 +2102,7 @@ "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", "illuminate/routing": "self.version", @@ -1971,53 +2114,67 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.198.1", - "doctrine/dbal": "^2.13.3|^3.1.4", - "filp/whoops": "^2.14.3", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^3.5.1", + "ext-gmp": "*", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^8.10", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.19|^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^5.4" + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-bcmath": "Required to use the multiple_of validation rule.", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "8.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -2031,7 +2188,8 @@ "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" ] } }, @@ -2055,20 +2213,68 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-11-01T14:48:50+00:00" + "time": "2023-09-13T14:51:46+00:00" }, { - "name": "laravel/serializable-closure", - "version": "v1.2.2", + "name": "laravel/prompts", + "version": "v0.1.7", "source": { "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + "url": "https://github.com/laravel/prompts.git", + "reference": "554e7d855a22e87942753d68e23b327ad79b2070" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "url": "https://api.github.com/repos/laravel/prompts/zipball/554e7d855a22e87942753d68e23b327ad79b2070", + "reference": "554e7d855a22e87942753d68e23b327ad79b2070", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.7" + }, + "time": "2023-09-12T11:09:22+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902", + "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902", "shasum": "" }, "require": { @@ -2115,36 +2321,37 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-09-08T13:45:54+00:00" + "time": "2023-07-14T13:56:28+00:00" }, { "name": "laravel/tinker", - "version": "v2.7.3", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef" + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef", - "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef", + "url": "https://api.github.com/repos/laravel/tinker/zipball/b936d415b252b499e8c3b1f795cd4fc20f57e1f3", + "reference": "b936d415b252b499e8c3b1f795cd4fc20f57e1f3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.10.4|^0.11.1", "symfony/var-dumper": "^4.3.4|^5.0|^6.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." }, "type": "library", "extra": { @@ -2181,38 +2388,39 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.3" + "source": "https://github.com/laravel/tinker/tree/v2.8.2" }, - "time": "2022-11-09T15:11:38+00:00" + "time": "2023-08-15T14:27:00+00:00" }, { "name": "laravel/ui", - "version": "v3.4.6", + "version": "v4.2.2", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" + "reference": "a58ec468db4a340b33f3426c778784717a2c144b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", - "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "url": "https://api.github.com/repos/laravel/ui/zipball/a58ec468db4a340b33f3426c778784717a2c144b", + "reference": "a58ec468db4a340b33f3426c778784717a2c144b", "shasum": "" }, "require": { - "illuminate/console": "^8.42|^9.0", - "illuminate/filesystem": "^8.42|^9.0", - "illuminate/support": "^8.82|^9.0", - "illuminate/validation": "^8.42|^9.0", - "php": "^7.3|^8.0" + "illuminate/console": "^9.21|^10.0", + "illuminate/filesystem": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "illuminate/validation": "^9.21|^10.0", + "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^6.23|^7.0" + "orchestra/testbench": "^7.0|^8.0", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "4.x-dev" }, "laravel": { "providers": [ @@ -2242,35 +2450,36 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.6" + "source": "https://github.com/laravel/ui/tree/v4.2.2" }, - "time": "2022-05-20T13:38:08+00:00" + "time": "2023-05-09T19:47:28+00:00" }, { "name": "ldc/web-admin-secure-laravel", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://lab.s-web.fr/ldc-web/projets/ldc-web-admin-secure-laravel.git", - "reference": "c538f5d349b119ac64cb62b33e6368bef6be90bc" + "reference": "5f0c6b136fd967102bafeefa3048ffd47dbbc9be" }, "dist": { "type": "zip", - "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/ldc/web-admin-secure-laravel.zip?sha=c538f5d349b119ac64cb62b33e6368bef6be90bc", - "reference": "c538f5d349b119ac64cb62b33e6368bef6be90bc", + "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/ldc/web-admin-secure-laravel.zip?sha=5f0c6b136fd967102bafeefa3048ffd47dbbc9be", + "reference": "5f0c6b136fd967102bafeefa3048ffd47dbbc9be", "shasum": "" }, "require": { - "illuminate/support": "~8|~9", - "laravel/framework": "~8|~9", - "php": "~7.3|7.4|~8" + "dxw/cidr": "^3.1", + "illuminate/support": "~10", + "laravel/framework": "~10", + "php": ">=8.2" }, "require-dev": { - "orchestra/testbench": "^6.24", - "phpunit/php-code-coverage": "^9.2", - "phpunit/phpunit": "~9.0", - "slevomat/coding-standard": "^7.0", - "squizlabs/php_codesniffer": "^3.5" + "orchestra/testbench": "^8", + "phpunit/php-code-coverage": "^9", + "phpunit/phpunit": "^9", + "slevomat/coding-standard": "^7", + "squizlabs/php_codesniffer": "^3" }, "type": "library", "extra": { @@ -2312,42 +2521,54 @@ }, { "name": "league/commonmark", - "version": "1.6.7", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b" + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/2b8185c13bc9578367a5bf901881d1c1b5bbd09b", - "reference": "2b8185c13bc9578367a5bf901881d1c1b5bbd09b", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -2365,7 +2586,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -2379,6 +2600,7 @@ ], "support": { "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", "issues": "https://github.com/thephpleague/commonmark/issues", "rss": "https://github.com/thephpleague/commonmark/releases.atom", "source": "https://github.com/thephpleague/commonmark" @@ -2401,58 +2623,138 @@ "type": "tidelift" } ], - "time": "2022-01-13T17:18:13+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { - "name": "league/flysystem", - "version": "1.1.10", + "name": "league/config", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "1.2-dev" } }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/4fdf372ca6b63c6e281b1c01a624349ccb757729", + "reference": "4fdf372ca6b63c6e281b1c01a624349ccb757729", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2462,60 +2764,118 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "files", "filesystem", "filesystems", "ftp", - "rackspace", - "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + "source": "https://github.com/thephpleague/flysystem/tree/3.16.0" }, "funding": [ { - "url": "https://offset.earth/frankdejonge", - "type": "other" + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" } ], - "time": "2022-10-04T09:16:37+00:00" + "time": "2023-09-07T19:22:17+00:00" }, { - "name": "league/glide", - "version": "1.7.1", + "name": "league/flysystem-local", + "version": "3.16.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/glide.git", - "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f" + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/glide/zipball/257e0c3612ef3dc57eb7f90cb741198151a45a5f", - "reference": "257e0c3612ef3dc57eb7f90cb741198151a45a5f", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ec7383f25642e6fd4bb0c9554fc2311245391781", + "reference": "ec7383f25642e6fd4bb0c9554fc2311245391781", "shasum": "" }, "require": { - "intervention/image": "^2.4", - "league/flysystem": "^1.0", + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.16.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-08-30T10:23:59+00:00" + }, + { + "name": "league/glide", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/glide.git", + "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/glide/zipball/2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", + "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", + "shasum": "" + }, + "require": { + "intervention/image": "^2.7", + "league/flysystem": "^2.0|^3.0", "php": "^7.2|^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0|^2.0" }, "require-dev": { "mockery/mockery": "^1.3.3", @@ -2523,11 +2883,6 @@ "phpunit/phpunit": "^8.5|^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { "League\\Glide\\": "src/" @@ -2563,32 +2918,32 @@ ], "support": { "issues": "https://github.com/thephpleague/glide/issues", - "source": "https://github.com/thephpleague/glide/tree/1.7.1" + "source": "https://github.com/thephpleague/glide/tree/2.3.0" }, - "time": "2022-04-27T04:03:46+00:00" + "time": "2023-07-08T06:26:07+00:00" }, { "name": "league/mime-type-detection", - "version": "1.11.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { @@ -2609,7 +2964,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0" }, "funding": [ { @@ -2621,33 +2976,100 @@ "type": "tidelift" } ], - "time": "2022-04-17T13:12:02+00:00" + "time": "2023-08-05T12:09:49+00:00" }, { - "name": "mews/purifier", - "version": "3.3.8", + "name": "masterminds/html5", + "version": "2.8.1", "source": { "type": "git", - "url": "https://github.com/mewebstudio/Purifier.git", - "reference": "164b420c4a80d2d0a89c1023f0aa9b3c0e3d6dc5" + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/164b420c4a80d2d0a89c1023f0aa9b3c0e3d6dc5", - "reference": "164b420c4a80d2d0a89c1023f0aa9b3c0e3d6dc5", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", "shasum": "" }, "require": { - "ezyang/htmlpurifier": "4.13.*", - "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0", - "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0", + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + }, + "time": "2023-05-10T11:58:31+00:00" + }, + { + "name": "mews/purifier", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/mewebstudio/Purifier.git", + "reference": "48e7bddc18140412d7cd815b6eea2fc7a141c432" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/48e7bddc18140412d7cd815b6eea2fc7a141c432", + "reference": "48e7bddc18140412d7cd815b6eea2fc7a141c432", + "shasum": "" + }, + "require": { + "ezyang/htmlpurifier": "^4.16.0", + "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^7.2|^8.0" }, "require-dev": { "graham-campbell/testbench": "^3.2|^5.5.1", "mockery/mockery": "^1.3.3", - "phpunit/phpunit": "^8.0|^9.0" + "phpunit/phpunit": "^8.0|^9.0|^10.0" }, "suggest": { "laravel/framework": "To test the Laravel bindings", @@ -2684,64 +3106,60 @@ "role": "Developer" } ], - "description": "Laravel 5/6/7 HtmlPurifier Package", + "description": "Laravel 5/6/7/8/9/10 HtmlPurifier Package", "homepage": "https://github.com/mewebstudio/purifier", "keywords": [ + "Laravel Purifier", + "Laravel Security", "Purifier", "htmlpurifier", - "laravel5 HtmlPurifier", - "laravel5 Purifier", - "laravel5 Security", - "laravel6 HtmlPurifier", - "laravel6 Purifier", - "laravel6 Security", + "laravel HtmlPurifier", "security", "xss" ], "support": { "issues": "https://github.com/mewebstudio/Purifier/issues", - "source": "https://github.com/mewebstudio/Purifier/tree/3.3.8" + "source": "https://github.com/mewebstudio/Purifier/tree/3.4.1" }, - "time": "2022-07-20T12:14:06+00:00" + "time": "2023-03-14T08:28:28+00:00" }, { "name": "monolog/monolog", - "version": "2.8.0", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2764,7 +3182,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2792,7 +3210,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + "source": "https://github.com/Seldaek/monolog/tree/3.4.0" }, "funding": [ { @@ -2804,31 +3222,32 @@ "type": "tidelift" } ], - "time": "2022-07-24T11:55:47+00:00" + "time": "2023-06-21T08:46:11+00:00" }, { "name": "mpdf/mpdf", - "version": "v8.1.4", + "version": "v8.2.0", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "add590e93b7502efafd9839a68cff99f3497b318" + "reference": "170a236a588d177c2aa7447ce490a030ca68e6f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/add590e93b7502efafd9839a68cff99f3497b318", - "reference": "add590e93b7502efafd9839a68cff99f3497b318", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/170a236a588d177c2aa7447ce490a030ca68e6f4", + "reference": "170a236a588d177c2aa7447ce490a030ca68e6f4", "shasum": "" }, "require": { "ext-gd": "*", "ext-mbstring": "*", + "mpdf/psr-http-message-shim": "^1.0 || ^2.0", + "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0", - "php-http/message-factory": "^1.0", - "psr/http-message": "^1.0", - "psr/log": "^1.0 || ^2.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" }, "require-dev": { @@ -2845,6 +3264,9 @@ }, "type": "library", "autoload": { + "files": [ + "src/functions.php" + ], "psr-4": { "Mpdf\\": "src/" } @@ -2881,20 +3303,112 @@ "type": "custom" } ], - "time": "2022-12-15T11:24:39+00:00" + "time": "2023-09-01T11:44:52+00:00" }, { - "name": "myclabs/deep-copy", - "version": "1.11.0", + "name": "mpdf/psr-http-message-shim", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "url": "https://github.com/mpdf/psr-http-message-shim.git", + "reference": "1cf4c0b68b8461cea27411ff961482ce7687e34f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/1cf4c0b68b8461cea27411ff961482ce7687e34f", + "reference": "1cf4c0b68b8461cea27411ff961482ce7687e34f", + "shasum": "" + }, + "require": { + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrHttpMessageShim\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + }, + { + "name": "Nigel Cunningham", + "email": "nigel.cunningham@technocrat.com.au" + } + ], + "description": "Shim to allow support of different psr/message versions.", + "support": { + "issues": "https://github.com/mpdf/psr-http-message-shim/issues", + "source": "https://github.com/mpdf/psr-http-message-shim/tree/2.0.0" + }, + "time": "2023-09-01T06:08:18+00:00" + }, + { + "name": "mpdf/psr-log-aware-trait", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-log-aware-trait.git", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", + "shasum": "" + }, + "require": { + "psr/log": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrLogAwareTrait\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + } + ], + "description": "Trait to allow support of different psr/log versions.", + "support": { + "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", + "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" + }, + "time": "2023-05-03T06:19:36+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { @@ -2932,7 +3446,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -2940,29 +3454,33 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nesbot/carbon", - "version": "2.64.0", + "version": "2.70.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "889546413c97de2d05063b8cb7b193c2531ea211" + "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/889546413c97de2d05063b8cb7b193c2531ea211", - "reference": "889546413c97de2d05063b8cb7b193c2531ea211", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3298b38ea8612e5f77d38d1a99438e42f70341d", + "reference": "d3298b38ea8612e5f77d38d1a99438e42f70341d", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", @@ -3042,7 +3560,156 @@ "type": "tidelift" } ], - "time": "2022-11-26T17:36:00+00:00" + "time": "2023-09-07T16:43:50+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.4", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab", + "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": "7.1 - 8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.4" + }, + "time": "2023-08-05T18:56:25+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.1", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/9124157137da01b1f5a5a22d6486cb975f26db7e", + "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.1" + }, + "time": "2023-07-30T15:42:21+00:00" }, { "name": "nicmart/tree", @@ -3092,16 +3759,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.2", + "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { @@ -3142,44 +3809,131 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, - "time": "2022-11-12T15:38:23+00:00" + "time": "2023-08-13T19:53:39+00:00" }, { - "name": "nyholm/psr7", - "version": "1.5.1", + "name": "nunomaduro/termwind", + "version": "v1.15.1", "source": { "type": "git", - "url": "https://github.com/Nyholm/psr7.git", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a" + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Nyholm/psr7/zipball/f734364e38a876a23be4d906a2a089e1315be18a", - "reference": "f734364e38a876a23be4d906a2a089e1315be18a", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", "shasum": "" }, "require": { - "php": ">=7.1", - "php-http/message-factory": "^1.0", + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2023-02-08T01:06:31+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "reference": "3cb4d163b58589e47b35103e8e5e6a6a475b47be", + "shasum": "" + }, + "require": { + "php": ">=7.2", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.1 || ^2.0" }, "provide": { + "php-http/message-factory-implementation": "1.0", "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", "php-http/psr7-integration-tests": "^1.0", - "phpunit/phpunit": "^7.5 || 8.5 || 9.4", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", "symfony/error-handler": "^4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.8-dev" } }, "autoload": { @@ -3209,7 +3963,7 @@ ], "support": { "issues": "https://github.com/Nyholm/psr7/issues", - "source": "https://github.com/Nyholm/psr7/tree/1.5.1" + "source": "https://github.com/Nyholm/psr7/tree/1.8.0" }, "funding": [ { @@ -3221,7 +3975,7 @@ "type": "github" } ], - "time": "2022-06-22T07:13:36+00:00" + "time": "2023-05-02T11:26:24+00:00" }, { "name": "opis/closure", @@ -3340,26 +4094,25 @@ }, { "name": "php-http/client-common", - "version": "2.6.0", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0" + "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0", - "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0", + "url": "https://api.github.com/repos/php-http/client-common/zipball/880509727a447474d2a71b7d7fa5d268ddd3db4b", + "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "php-http/httplug": "^2.0", "php-http/message": "^1.6", - "php-http/message-factory": "^1.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.0 || ^2.0", "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", "symfony/polyfill-php80": "^1.17" }, @@ -3369,7 +4122,7 @@ "nyholm/psr7": "^1.2", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" }, "suggest": { "ext-json": "To detect JSON responses with the ContentTypePlugin", @@ -3379,11 +4132,6 @@ "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, "autoload": { "psr-4": { "Http\\Client\\Common\\": "src/" @@ -3409,49 +4157,59 @@ ], "support": { "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.6.0" + "source": "https://github.com/php-http/client-common/tree/2.7.0" }, - "time": "2022-09-29T09:59:43+00:00" + "time": "2023-05-17T06:46:59+00:00" }, { "name": "php-http/discovery", - "version": "1.14.3", + "version": "1.19.1", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735" + "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/31d8ee46d0215108df16a8527c7438e96a4d7735", - "reference": "31d8ee46d0215108df16a8527c7438e96a4d7735", + "url": "https://api.github.com/repos/php-http/discovery/zipball/57f3de01d32085fea20865f9b16fb0e69347c39e", + "reference": "57f3de01d32085fea20865f9b16fb0e69347c39e", "shasum": "" }, "require": { + "composer-plugin-api": "^1.0|^2.0", "php": "^7.1 || ^8.0" }, "conflict": { - "nyholm/psr7": "<1.0" + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" }, "require-dev": { + "composer/composer": "^1.0.2|^2.0", "graham-campbell/phpspec-skip-example-extension": "^5.0", "php-http/httplug": "^1.0 || ^2.0", "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1" + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "symfony/phpunit-bridge": "^6.2" }, - "suggest": { - "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories" - }, - "type": "library", + "type": "composer-plugin", "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true }, "autoload": { "psr-4": { "Http\\Discovery\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3463,7 +4221,7 @@ "email": "mark.sagikazar@gmail.com" } ], - "description": "Finds installed HTTPlug implementations and PSR-7 message factories", + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", "homepage": "http://php-http.org", "keywords": [ "adapter", @@ -3472,44 +4230,40 @@ "factory", "http", "message", + "psr17", "psr7" ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.14.3" + "source": "https://github.com/php-http/discovery/tree/1.19.1" }, - "time": "2022-07-11T14:04:40+00:00" + "time": "2023-07-11T07:02:26+00:00" }, { "name": "php-http/httplug", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "f640739f80dfa1152533976e3c112477f69274eb" + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/f640739f80dfa1152533976e3c112477f69274eb", - "reference": "f640739f80dfa1152533976e3c112477f69274eb", + "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "php-http/promise": "^1.1", "psr/http-client": "^1.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1", - "phpspec/phpspec": "^5.1 || ^6.0" + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "psr-4": { "Http\\Client\\": "src/" @@ -3538,29 +4292,28 @@ ], "support": { "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.3.0" + "source": "https://github.com/php-http/httplug/tree/2.4.0" }, - "time": "2022-02-21T09:52:22+00:00" + "time": "2023-04-14T15:10:03+00:00" }, { "name": "php-http/message", - "version": "1.13.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" + "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", - "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", + "url": "https://api.github.com/repos/php-http/message/zipball/47a14338bf4ebd67d317bf1144253d7db4ab55fd", + "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd", "shasum": "" }, "require": { "clue/stream-filter": "^1.5", - "php": "^7.1 || ^8.0", - "php-http/message-factory": "^1.0.2", - "psr/http-message": "^1.0" + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" }, "provide": { "php-http/message-factory-implementation": "1.0" @@ -3568,8 +4321,9 @@ "require-dev": { "ergebnis/composer-normalize": "^2.6", "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0", - "laminas/laminas-diactoros": "^2.0", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "slim/slim": "^3.0" }, @@ -3580,11 +4334,6 @@ "slim/slim": "Used with Slim Framework PSR-7 implementation" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, "autoload": { "files": [ "src/filters.php" @@ -3612,32 +4361,32 @@ ], "support": { "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.13.0" + "source": "https://github.com/php-http/message/tree/1.16.0" }, - "time": "2022-02-11T13:41:14+00:00" + "time": "2023-05-17T06:43:38+00:00" }, { "name": "php-http/message-factory", - "version": "v1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-http/message-factory.git", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", - "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", "shasum": "" }, "require": { "php": ">=5.4", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -3666,9 +4415,10 @@ ], "support": { "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/master" + "source": "https://github.com/php-http/message-factory/tree/1.1.0" }, - "time": "2015-12-19T14:08:53+00:00" + "abandoned": "psr/http-factory", + "time": "2023-04-14T14:16:17+00:00" }, { "name": "php-http/promise", @@ -3729,24 +4479,24 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8", - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" }, "type": "library", "extra": { @@ -3788,7 +4538,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" }, "funding": [ { @@ -3800,31 +4550,142 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:51:26+00:00" + "time": "2023-02-25T19:38:58+00:00" }, { - "name": "propaganistas/laravel-phone", - "version": "4.4.1", + "name": "phpseclib/phpseclib", + "version": "2.0.45", "source": { "type": "git", - "url": "https://github.com/Propaganistas/Laravel-Phone.git", - "reference": "945c34de77d5a80d01506e7f2220de4a769b8d75" + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "28d8f438a0064c9de80857e3270d071495544640" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/945c34de77d5a80d01506e7f2220de4a769b8d75", - "reference": "945c34de77d5a80d01506e7f2220de4a769b8d75", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/28d8f438a0064c9de80857e3270d071495544640", + "reference": "28d8f438a0064c9de80857e3270d071495544640", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.", + "ext-xml": "Install the XML extension to load XML formatted public keys." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.45" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2023-09-15T20:55:47+00:00" + }, + { + "name": "propaganistas/laravel-phone", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/Propaganistas/Laravel-Phone.git", + "reference": "32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Propaganistas/Laravel-Phone/zipball/32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc", + "reference": "32aa5ed857a9a6c1a80a0ebdbff4676f2f8e37cc", "shasum": "" }, "require": { "giggsey/libphonenumber-for-php": "^7.0|^8.0", - "illuminate/contracts": "^8.9|^9.0", - "illuminate/support": "^8.0|^9.0", - "illuminate/validation": "^8.0|^9.0", - "php": "^7.3|^8.0" + "illuminate/contracts": "^9.0|^10.0", + "illuminate/support": "^9.0|^10.0", + "illuminate/validation": "^9.0|^10.0", + "php": "^8.0" }, "require-dev": { - "nunomaduro/larastan": "^1.0", + "laravel/pint": "^1.4", + "nunomaduro/larastan": "^2.4", "orchestra/testbench": "*", "phpunit/phpunit": "^9.5.10" }, @@ -3863,7 +4724,7 @@ ], "support": { "issues": "https://github.com/Propaganistas/Laravel-Phone/issues", - "source": "https://github.com/Propaganistas/Laravel-Phone/tree/4.4.1" + "source": "https://github.com/Propaganistas/Laravel-Phone/tree/5.0.3" }, "funding": [ { @@ -3871,26 +4732,79 @@ "type": "github" } ], - "time": "2023-01-09T10:06:12+00:00" + "time": "2023-02-04T16:13:42+00:00" }, { - "name": "psr/container", - "version": "1.1.1", + "name": "psr/clock", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": "^7.0 || ^8.0" }, "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -3917,9 +4831,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -3973,21 +4887,21 @@ }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -4007,7 +4921,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -4019,27 +4933,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client/tree/1.0.2" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-04-10T20:12:12+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -4059,7 +4973,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for PSR-7 HTTP message factories", @@ -4074,31 +4988,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4113,7 +5027,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -4127,36 +5041,36 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", - "version": "1.1.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4177,31 +5091,31 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -4216,7 +5130,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -4228,22 +5142,22 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "psy/psysh", - "version": "v0.11.9", + "version": "v0.11.21", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "1acec99d6684a54ff92f8b548a4e41b566963778" + "reference": "bcb22101107f3bf770523b65630c9d547f60c540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778", - "reference": "1acec99d6684a54ff92f8b548a4e41b566963778", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/bcb22101107f3bf770523b65630c9d547f60c540", + "reference": "bcb22101107f3bf770523b65630c9d547f60c540", "shasum": "" }, "require": { @@ -4273,6 +5187,10 @@ "extra": { "branch-alias": { "dev-main": "0.11.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false } }, "autoload": { @@ -4304,9 +5222,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.9" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.21" }, - "time": "2022-11-06T15:29:46+00:00" + "time": "2023-09-17T21:15:54+00:00" }, { "name": "ralouphie/getallheaders", @@ -4354,42 +5272,52 @@ }, { "name": "ramsey/collection", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { "Ramsey\\Collection\\": "src/" @@ -4417,7 +5345,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -4429,29 +5357,27 @@ "type": "tidelift" } ], - "time": "2021-10-10T03:01:02+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.7.4", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "60a4c63ab724854332900504274f6150ff26d286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", + "reference": "60a4c63ab724854332900504274f6150ff26d286", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -4463,24 +5389,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", "php-parallel-lint/php-parallel-lint": "^1.1", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", @@ -4488,9 +5413,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } @@ -4515,7 +5437,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.4" }, "funding": [ { @@ -4527,25 +5449,25 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" + "time": "2023-04-15T23:01:58+00:00" }, { "name": "sentry/sdk", - "version": "3.3.0", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e" + "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/d0678fc7274dbb03046ed05cb24eb92945bedf8e", - "reference": "d0678fc7274dbb03046ed05cb24eb92945bedf8e", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/cd91b752f07c4bab9fb3b173f81af68a78a78d6d", + "reference": "cd91b752f07c4bab9fb3b173f81af68a78a78d6d", "shasum": "" }, "require": { "http-interop/http-factory-guzzle": "^1.0", - "sentry/sentry": "^3.9", + "sentry/sentry": "^3.19", "symfony/http-client": "^4.3|^5.0|^6.0" }, "type": "metapackage", @@ -4572,7 +5494,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php-sdk/issues", - "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.3.0" + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.5.0" }, "funding": [ { @@ -4584,36 +5506,36 @@ "type": "custom" } ], - "time": "2022-10-11T09:05:00+00:00" + "time": "2023-06-12T17:50:36+00:00" }, { "name": "sentry/sentry", - "version": "3.12.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304" + "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/4902f43640963ed45517fd7c1da7fdd5511bb304", - "reference": "4902f43640963ed45517fd7c1da7fdd5511bb304", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/624aafc22b84b089ffa43b71fb01e0096505ec4f", + "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "guzzlehttp/promises": "^1.5.3|^2.0", "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "php-http/async-client-implementation": "^1.0", "php-http/client-common": "^1.5|^2.0", - "php-http/discovery": "^1.11", + "php-http/discovery": "^1.15", "php-http/httplug": "^1.1|^2.0", "php-http/message": "^1.5", + "php-http/message-factory": "^1.1", "psr/http-factory": "^1.0", - "psr/http-message-implementation": "^1.0", + "psr/http-factory-implementation": "^1.0", "psr/log": "^1.0|^2.0|^3.0", "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0", "symfony/polyfill-php80": "^1.17" @@ -4624,6 +5546,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", "http-interop/http-factory-guzzle": "^1.0", "monolog/monolog": "^1.6|^2.0|^3.0", "nikic/php-parser": "^4.10.3", @@ -4640,11 +5563,6 @@ "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.12.x-dev" - } - }, "autoload": { "files": [ "src/functions.php" @@ -4655,7 +5573,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { @@ -4676,7 +5594,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.12.0" + "source": "https://github.com/getsentry/sentry-php/tree/3.21.0" }, "funding": [ { @@ -4688,38 +5606,37 @@ "type": "custom" } ], - "time": "2022-11-22T10:57:08+00:00" + "time": "2023-07-31T15:31:24+00:00" }, { "name": "sentry/sentry-laravel", - "version": "3.1.2", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "1626336dc478abcd8aa5cb128b69423299216bf9" + "reference": "c7e7611553f9f90af10ed98dde1a680220f02e4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1626336dc478abcd8aa5cb128b69423299216bf9", - "reference": "1626336dc478abcd8aa5cb128b69423299216bf9", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/c7e7611553f9f90af10ed98dde1a680220f02e4d", + "reference": "c7e7611553f9f90af10ed98dde1a680220f02e4d", "shasum": "" }, "require": { - "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0", + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sdk": "^3.3", - "sentry/sentry": "^3.12", + "sentry/sdk": "^3.4", + "sentry/sentry": "^3.20.1", "symfony/psr-http-message-bridge": "^1.0 | ^2.0" }, - "conflict": { - "laravel/lumen-framework": "*" - }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", - "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0", + "laravel/folio": "^1.0", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^8.4 | ^9.3" }, "type": "library", @@ -4747,7 +5664,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { @@ -4769,7 +5686,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/3.1.2" + "source": "https://github.com/getsentry/sentry-laravel/tree/3.8.0" }, "funding": [ { @@ -4781,20 +5698,20 @@ "type": "custom" } ], - "time": "2022-11-23T13:25:02+00:00" + "time": "2023-09-05T11:02:34+00:00" }, { "name": "setasign/fpdi", - "version": "v2.3.6", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31" + "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31", - "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", + "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b", "shasum": "" }, "require": { @@ -4807,7 +5724,7 @@ "require-dev": { "phpunit/phpunit": "~5.7", "setasign/fpdf": "~1.8", - "setasign/tfpdf": "1.31", + "setasign/tfpdf": "~1.31", "squizlabs/php_codesniffer": "^3.5", "tecnickcom/tcpdf": "~6.2" }, @@ -4845,7 +5762,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.3.6" + "source": "https://github.com/Setasign/FPDI/tree/v2.4.1" }, "funding": [ { @@ -4853,31 +5770,32 @@ "type": "tidelift" } ], - "time": "2021-02-11T11:37:01+00:00" + "time": "2023-07-27T08:12:09+00:00" }, { "name": "spatie/browsershot", - "version": "3.40.2", + "version": "3.58.2", "source": { "type": "git", "url": "https://github.com/spatie/browsershot.git", - "reference": "3e55eaf5ab8cee65d1661a567e89b3374afb9116" + "reference": "6503b2b429e10ff28a4cdb9fffaecc25ba6d032c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/browsershot/zipball/3e55eaf5ab8cee65d1661a567e89b3374afb9116", - "reference": "3e55eaf5ab8cee65d1661a567e89b3374afb9116", + "url": "https://api.github.com/repos/spatie/browsershot/zipball/6503b2b429e10ff28a4cdb9fffaecc25ba6d032c", + "reference": "6503b2b429e10ff28a4cdb9fffaecc25ba6d032c", "shasum": "" }, "require": { - "php": "^7.1", - "spatie/image": "^1.5.3", - "spatie/temporary-directory": "^1.1", - "symfony/process": "^4.2|^5.0" + "ext-json": "*", + "php": "^7.4|^8.0", + "spatie/image": "^1.5.3|^2.0", + "spatie/temporary-directory": "^1.1|^2.0", + "symfony/process": "^4.2|^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "^6.1|^7.5", - "spatie/phpunit-snapshot-assertions": "^1.0" + "pestphp/pest": "^1.20", + "spatie/phpunit-snapshot-assertions": "^4.2.3" }, "type": "library", "autoload": { @@ -4910,8 +5828,7 @@ "webpage" ], "support": { - "issues": "https://github.com/spatie/browsershot/issues", - "source": "https://github.com/spatie/browsershot/tree/3.40.2" + "source": "https://github.com/spatie/browsershot/tree/3.58.2" }, "funding": [ { @@ -4919,29 +5836,30 @@ "type": "github" } ], - "time": "2020-11-11T22:18:15+00:00" + "time": "2023-07-27T07:51:54+00:00" }, { "name": "spatie/calendar-links", - "version": "1.5.0", + "version": "1.8.5", "source": { "type": "git", "url": "https://github.com/spatie/calendar-links.git", - "reference": "fe4b566b6f47c1fac54e393ae72b44808ae48fa7" + "reference": "d6f6c5e7ff916e2a55e2160d4db4f15875cb6e07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/calendar-links/zipball/fe4b566b6f47c1fac54e393ae72b44808ae48fa7", - "reference": "fe4b566b6f47c1fac54e393ae72b44808ae48fa7", + "url": "https://api.github.com/repos/spatie/calendar-links/zipball/d6f6c5e7ff916e2a55e2160d4db4f15875cb6e07", + "reference": "d6f6c5e7ff916e2a55e2160d4db4f15875cb6e07", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.0", - "spatie/phpunit-snapshot-assertions": "^3.0|^4.0", - "vimeo/psalm": "^4.1" + "friendsofphp/php-cs-fixer": "^3.14", + "phpunit/phpunit": "^9.6 || ^10.0", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.0", + "vimeo/psalm": "^5.6" }, "type": "library", "autoload": { @@ -4969,7 +5887,7 @@ ], "support": { "issues": "https://github.com/spatie/calendar-links/issues", - "source": "https://github.com/spatie/calendar-links/tree/1.5.0" + "source": "https://github.com/spatie/calendar-links/tree/1.8.5" }, "funding": [ { @@ -4977,35 +5895,35 @@ "type": "custom" } ], - "time": "2021-04-22T15:06:47+00:00" + "time": "2023-03-02T16:05:13+00:00" }, { "name": "spatie/crawler", - "version": "4.7.6", + "version": "7.1.3", "source": { "type": "git", "url": "https://github.com/spatie/crawler.git", - "reference": "fe6e428b8ceaec561b9819bb948242ad0cfd40bb" + "reference": "f0f73947fdfaf68efdc68b73c4dbb28dfc785113" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/crawler/zipball/fe6e428b8ceaec561b9819bb948242ad0cfd40bb", - "reference": "fe6e428b8ceaec561b9819bb948242ad0cfd40bb", + "url": "https://api.github.com/repos/spatie/crawler/zipball/f0f73947fdfaf68efdc68b73c4dbb28dfc785113", + "reference": "f0f73947fdfaf68efdc68b73c4dbb28dfc785113", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^6.3 || ^7.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/guzzle": "^7.3", + "guzzlehttp/psr7": "^2.0", + "illuminate/collections": "^8.38|^9.0|^10.0", "nicmart/tree": "^0.3.0", - "php": "^7.3|^8.0", - "spatie/browsershot": "^3.14", - "spatie/robots-txt": "^1.0.1", - "symfony/dom-crawler": "^4.0 || ^5.0", - "tightenco/collect": "^5.6 || ^6.0 || ^7.0" + "php": "^8.0", + "spatie/browsershot": "^3.45", + "spatie/robots-txt": "^2.0", + "symfony/dom-crawler": "^5.2|^6.0" }, "require-dev": { - "larapack/dd": "^1.1", - "phpunit/phpunit": "^9.0" + "pestphp/pest": "^1.21", + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -5033,42 +5951,47 @@ ], "support": { "issues": "https://github.com/spatie/crawler/issues", - "source": "https://github.com/spatie/crawler/tree/4.7.6" + "source": "https://github.com/spatie/crawler/tree/7.1.3" }, "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, { "url": "https://github.com/spatie", "type": "github" } ], - "time": "2020-12-01T20:55:10+00:00" + "time": "2023-01-24T07:47:06+00:00" }, { "name": "spatie/image", - "version": "1.10.6", + "version": "2.2.7", "source": { "type": "git", "url": "https://github.com/spatie/image.git", - "reference": "897e819848096ea8eee8ed4a3531c6166f9a99e0" + "reference": "2f802853aab017aa615224daae1588054b5ab20e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image/zipball/897e819848096ea8eee8ed4a3531c6166f9a99e0", - "reference": "897e819848096ea8eee8ed4a3531c6166f9a99e0", + "url": "https://api.github.com/repos/spatie/image/zipball/2f802853aab017aa615224daae1588054b5ab20e", + "reference": "2f802853aab017aa615224daae1588054b5ab20e", "shasum": "" }, "require": { "ext-exif": "*", "ext-json": "*", "ext-mbstring": "*", - "league/glide": "^1.6", - "php": "^7.2|^8.0", - "spatie/image-optimizer": "^1.1", + "league/glide": "^2.2.2", + "php": "^8.0", + "spatie/image-optimizer": "^1.7", "spatie/temporary-directory": "^1.0|^2.0", "symfony/process": "^3.0|^4.0|^5.0|^6.0" }, "require-dev": { - "phpunit/phpunit": "^8.5.21|^9.5.4", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5", "symfony/var-dumper": "^4.0|^5.0|^6.0", "vimeo/psalm": "^4.6" }, @@ -5097,8 +6020,7 @@ "spatie" ], "support": { - "issues": "https://github.com/spatie/image/issues", - "source": "https://github.com/spatie/image/tree/1.10.6" + "source": "https://github.com/spatie/image/tree/2.2.7" }, "funding": [ { @@ -5110,20 +6032,20 @@ "type": "github" } ], - "time": "2021-12-21T10:01:09+00:00" + "time": "2023-07-24T13:54:13+00:00" }, { "name": "spatie/image-optimizer", - "version": "1.6.2", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "6db75529cbf8fa84117046a9d513f277aead90a0" + "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/6db75529cbf8fa84117046a9d513f277aead90a0", - "reference": "6db75529cbf8fa84117046a9d513f277aead90a0", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/af179994e2d2413e4b3ba2d348d06b4eaddbeb30", + "reference": "af179994e2d2413e4b3ba2d348d06b4eaddbeb30", "shasum": "" }, "require": { @@ -5133,6 +6055,7 @@ "symfony/process": "^4.2|^5.0|^6.0" }, "require-dev": { + "pestphp/pest": "^1.21", "phpunit/phpunit": "^8.5.21|^9.4.4", "symfony/var-dumper": "^4.2|^5.0|^6.0" }, @@ -5162,42 +6085,39 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.6.2" + "source": "https://github.com/spatie/image-optimizer/tree/1.7.1" }, - "time": "2021-12-21T10:08:05+00:00" + "time": "2023-07-27T07:57:32+00:00" }, { - "name": "spatie/laravel-mix-preload", - "version": "1.3.0", + "name": "spatie/laravel-package-tools", + "version": "1.16.1", "source": { "type": "git", - "url": "https://github.com/spatie/laravel-mix-preload.git", - "reference": "cfd4549939e7b7e0df9361b36eaa3ef11e8bc16f" + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-mix-preload/zipball/cfd4549939e7b7e0df9361b36eaa3ef11e8bc16f", - "reference": "cfd4549939e7b7e0df9361b36eaa3ef11e8bc16f", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/cc7c991555a37f9fa6b814aa03af73f88026a83d", + "reference": "cc7c991555a37f9fa6b814aa03af73f88026a83d", "shasum": "" }, "require": { - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", - "php": "^7.3|^8.0" + "illuminate/contracts": "^9.28|^10.0", + "php": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.5.7" + "mockery/mockery": "^1.5", + "orchestra/testbench": "^7.7|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5.24", + "spatie/pest-plugin-test-time": "^1.1" }, "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\MixPreload\\MixPreloadServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "Spatie\\MixPreload\\": "src" + "Spatie\\LaravelPackageTools\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5206,60 +6126,60 @@ ], "authors": [ { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", + "name": "Freek Van der Herten", + "email": "freek@spatie.be", "role": "Developer" } ], - "description": "Add preload and prefetch links based your Mix manifest", - "homepage": "https://github.com/spatie/laravel-mix-preload", + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", "keywords": [ - "laravel-mix-preload", + "laravel-package-tools", "spatie" ], "support": { - "issues": "https://github.com/spatie/laravel-mix-preload/issues", - "source": "https://github.com/spatie/laravel-mix-preload/tree/1.3.0" + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.1" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://www.patreon.com/spatie", - "type": "patreon" + "url": "https://github.com/spatie", + "type": "github" } ], - "time": "2022-02-01T14:36:12+00:00" + "time": "2023-08-23T09:04:39+00:00" }, { "name": "spatie/laravel-sitemap", - "version": "5.8.0", + "version": "6.3.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-sitemap.git", - "reference": "90c4dd061ba251c2bff9edf83d5e1d38d17f1529" + "reference": "39844ec1836e76f9f090075c49b5ae2b5fea79f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/90c4dd061ba251c2bff9edf83d5e1d38d17f1529", - "reference": "90c4dd061ba251c2bff9edf83d5e1d38d17f1529", + "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/39844ec1836e76f9f090075c49b5ae2b5fea79f9", + "reference": "39844ec1836e76f9f090075c49b5ae2b5fea79f9", "shasum": "" }, "require": { - "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0", - "nesbot/carbon": "^1.21|^2.0", - "php": "^7.2", - "spatie/crawler": "^4.1.0" + "guzzlehttp/guzzle": "^7.2", + "illuminate/support": "^8.0|^9.0|^10.0", + "nesbot/carbon": "^2.63", + "php": "^8.0", + "spatie/crawler": "^7.0", + "spatie/laravel-package-tools": "^1.5", + "symfony/dom-crawler": "^5.1.14|^6.0" }, "require-dev": { - "mockery/mockery": "^1.3.1", - "orchestra/testbench": "~3.8.8|^4.0|^5.0|^6.0", - "phpunit/phpunit": "^8.3|^9.0|^9.3", - "spatie/phpunit-snapshot-assertions": "^3.0.0", - "spatie/temporary-directory": "^1.1" + "mockery/mockery": "^1.4", + "orchestra/testbench": "^6.23|^7.0|^8.0", + "pestphp/pest": "^1.22", + "phpunit/phpunit": "^9.5", + "spatie/pest-plugin-snapshots": "^1.1", + "spatie/phpunit-snapshot-assertions": "^4.0", + "spatie/temporary-directory": "^2.0" }, "type": "library", "extra": { @@ -5293,8 +6213,7 @@ "spatie" ], "support": { - "issues": "https://github.com/spatie/laravel-sitemap/issues", - "source": "https://github.com/spatie/laravel-sitemap/tree/5.8.0" + "source": "https://github.com/spatie/laravel-sitemap/tree/6.3.1" }, "funding": [ { @@ -5302,24 +6221,24 @@ "type": "custom" } ], - "time": "2020-09-09T09:29:31+00:00" + "time": "2023-06-27T08:05:18+00:00" }, { "name": "spatie/regex", - "version": "1.4.2", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/spatie/regex.git", - "reference": "1500ed75af430df3a32047494c43d79d45cf152b" + "reference": "d543de2019a0068e7b80da0ba24f1c51c7469303" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/regex/zipball/1500ed75af430df3a32047494c43d79d45cf152b", - "reference": "1500ed75af430df3a32047494c43d79d45cf152b", + "url": "https://api.github.com/repos/spatie/regex/zipball/d543de2019a0068e7b80da0ba24f1c51c7469303", + "reference": "d543de2019a0068e7b80da0ba24f1c51c7469303", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.0|^8.1" }, "require-dev": { "phpunit/phpunit": "^9.3" @@ -5353,7 +6272,7 @@ ], "support": { "issues": "https://github.com/spatie/regex/issues", - "source": "https://github.com/spatie/regex/tree/1.4.2" + "source": "https://github.com/spatie/regex/tree/3.1.1" }, "funding": [ { @@ -5365,24 +6284,24 @@ "type": "github" } ], - "time": "2020-11-03T23:05:25+00:00" + "time": "2021-11-30T21:13:59+00:00" }, { "name": "spatie/robots-txt", - "version": "1.0.10", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/spatie/robots-txt.git", - "reference": "8802a2bee670b3c13cfd21ede0322f72b3efb711" + "reference": "f40a12b89f98dd18f3665673d04757298f5fbbf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/robots-txt/zipball/8802a2bee670b3c13cfd21ede0322f72b3efb711", - "reference": "8802a2bee670b3c13cfd21ede0322f72b3efb711", + "url": "https://api.github.com/repos/spatie/robots-txt/zipball/f40a12b89f98dd18f3665673d04757298f5fbbf9", + "reference": "f40a12b89f98dd18f3665673d04757298f5fbbf9", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "php": "^8.0" }, "require-dev": { "larapack/dd": "^1.0", @@ -5414,29 +6333,39 @@ ], "support": { "issues": "https://github.com/spatie/robots-txt/issues", - "source": "https://github.com/spatie/robots-txt/tree/1.0.10" + "source": "https://github.com/spatie/robots-txt/tree/2.0.2" }, - "time": "2020-12-07T11:10:49+00:00" + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2022-05-18T15:14:21+00:00" }, { "name": "spatie/temporary-directory", - "version": "1.3.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/spatie/temporary-directory.git", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6" + "reference": "0c804873f6b4042aa8836839dca683c7d0f71831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/f517729b3793bca58f847c5fd383ec16f03ffec6", - "reference": "f517729b3793bca58f847c5fd383ec16f03ffec6", + "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/0c804873f6b4042aa8836839dca683c7d0f71831", + "reference": "0c804873f6b4042aa8836839dca683c7d0f71831", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.0|^9.0" + "phpunit/phpunit": "^9.5" }, "type": "library", "autoload": { @@ -5465,134 +6394,59 @@ ], "support": { "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/1.3.0" - }, - "time": "2020-11-09T15:54:21+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" + "source": "https://github.com/spatie/temporary-directory/tree/2.1.2" }, "funding": [ { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://spatie.be/open-source/support-us", + "type": "custom" }, { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" + "url": "https://github.com/spatie", + "type": "github" } ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2023-04-28T07:47:42+00:00" }, { "name": "symfony/console", - "version": "v5.4.16", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8e9b9c8dfb33af6057c94e1b44846bee700dc5ef", - "reference": "8e9b9c8dfb33af6057c94e1b44846bee700dc5ef", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5621,12 +6475,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.16" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -5642,25 +6496,24 @@ "type": "tidelift" } ], - "time": "2022-11-25T14:09:27+00:00" + "time": "2023-08-16T10:10:12+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.11", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "c1681789f059ab756001052164726ae88512ae3d" + "reference": "883d961421ab1709877c10ac99451632a3d6fa57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/c1681789f059ab756001052164726ae88512ae3d", - "reference": "c1681789f059ab756001052164726ae88512ae3d", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", + "reference": "883d961421ab1709877c10ac99451632a3d6fa57", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -5692,7 +6545,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.11" + "source": "https://github.com/symfony/css-selector/tree/v6.3.2" }, "funding": [ { @@ -5708,29 +6561,29 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2023-07-12T16:00:22+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.5.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -5759,7 +6612,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -5775,38 +6628,30 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/dom-crawler", - "version": "v5.4.15", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b8fd0ff9a0f00d944f1534f6d21e84f92eda7258" + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b8fd0ff9a0f00d944f1534f6d21e84f92eda7258", - "reference": "b8fd0ff9a0f00d944f1534f6d21e84f92eda7258", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "masterminds/html5": "^2.6", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "masterminds/html5": "<2.6" + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "masterminds/html5": "^2.6", - "symfony/css-selector": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/css-selector": "" + "symfony/css-selector": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5834,7 +6679,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v5.4.15" + "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" }, "funding": [ { @@ -5850,31 +6695,34 @@ "type": "tidelift" } ], - "time": "2022-10-27T08:04:35+00:00" + "time": "2023-08-01T07:43:40+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.15", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "539cf1428b8442303c6e876ad7bf5a7babd91091" + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/539cf1428b8442303c6e876ad7bf5a7babd91091", - "reference": "539cf1428b8442303c6e876ad7bf5a7babd91091", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/var-dumper": "^5.4|^6.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -5905,7 +6753,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.15" + "source": "https://github.com/symfony/error-handler/tree/v6.3.2" }, "funding": [ { @@ -5921,48 +6769,43 @@ "type": "tidelift" } ], - "time": "2022-10-27T06:32:25+00:00" + "time": "2023-07-16T17:05:46+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.4.9", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", - "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -5990,7 +6833,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -6006,33 +6849,30 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:45:39+00:00" + "time": "2023-07-06T06:56:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6069,7 +6909,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -6085,26 +6925,27 @@ "type": "tidelift" } ], - "time": "2022-01-02T09:53:40+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/finder", - "version": "v5.4.11", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", - "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" }, "type": "library", "autoload": { @@ -6132,7 +6973,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.11" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -6148,36 +6989,38 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:37:50+00:00" + "time": "2023-07-31T08:31:44+00:00" }, { "name": "symfony/http-client", - "version": "v5.4.17", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "772129f800fc0bfaa6bd40c40934d544f0957d30" + "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/772129f800fc0bfaa6bd40c40934d544f0957d30", - "reference": "772129f800fc0bfaa6bd40c40934d544f0957d30", + "url": "https://api.github.com/repos/symfony/http-client/zipball/15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00", + "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-client-contracts": "^2.4", - "symfony/polyfill-php73": "^1.11", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.0|^2|^3" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "^3", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.3" }, "provide": { "php-http/async-client-implementation": "*", "php-http/client-implementation": "*", "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "2.4" + "symfony/http-client-implementation": "3.0" }, "require-dev": { "amphp/amp": "^2.5", @@ -6188,10 +7031,10 @@ "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -6218,8 +7061,11 @@ ], "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", + "keywords": [ + "http" + ], "support": { - "source": "https://github.com/symfony/http-client/tree/v5.4.17" + "source": "https://github.com/symfony/http-client/tree/v6.3.2" }, "funding": [ { @@ -6235,32 +7081,29 @@ "type": "tidelift" } ], - "time": "2022-12-13T11:07:37+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v2.5.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70" + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", - "reference": "ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", + "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6270,7 +7113,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\HttpClient\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6297,7 +7143,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" }, "funding": [ { @@ -6313,40 +7159,41 @@ "type": "tidelift" } ], - "time": "2022-04-12T15:48:08+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.16", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5032c5849aef24741e1970cb03511b0dd131d838" + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5032c5849aef24741e1970cb03511b0dd131d838", - "reference": "5032c5849aef24741e1970cb03511b0dd131d838", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.2" }, "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, "type": "library", "autoload": { "psr-4": { @@ -6373,7 +7220,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.16" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" }, "funding": [ { @@ -6389,76 +7236,77 @@ "type": "tidelift" } ], - "time": "2022-11-07T08:06:40+00:00" + "time": "2023-08-22T08:20:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.16", + "version": "v6.3.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "b432c57c5de73634b1859093c1f58e3cd84455a1" + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b432c57c5de73634b1859093c1f58e3cd84455a1", - "reference": "b432c57c5de73634b1859093c1f58e3cd84455a1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^6.3.4", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.3.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/clock": "^6.2", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.3.4", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4.5|^6.0.5", + "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^6.3", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, "type": "library", "autoload": { "psr-4": { @@ -6485,7 +7333,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/v5.4.16" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" }, "funding": [ { @@ -6501,43 +7349,123 @@ "type": "tidelift" } ], - "time": "2022-11-28T18:08:58+00:00" + "time": "2023-08-26T13:54:49+00:00" }, { - "name": "symfony/mime", - "version": "v5.4.16", + "name": "symfony/mailer", + "version": "v6.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "46eeedb08f0832b1b61a84c612d945fc85ee4734" + "url": "https://github.com/symfony/mailer.git", + "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/46eeedb08f0832b1b61a84c612d945fc85ee4734", - "reference": "46eeedb08f0832b1b61a84c612d945fc85ee4734", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b03d9be1dea29bfec0a6c7b603f5072a4c97435", + "reference": "7b03d9be1dea29bfec0a6c7b603f5072a4c97435", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.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-29T12:49:39+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4", - "symfony/serializer": "<5.4.14|>=6.0,<6.0.14|>=6.1,<6.1.6" + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.4.14|~6.0.14|^6.1.6" + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "~6.2.13|^6.3.2" }, "type": "library", "autoload": { @@ -6569,7 +7497,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.16" + "source": "https://github.com/symfony/mime/tree/v6.3.3" }, "funding": [ { @@ -6585,27 +7513,25 @@ "type": "tidelift" } ], - "time": "2022-11-26T16:45:22+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/options-resolver", - "version": "v5.4.11", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", - "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a10f19f5198d589d5c33333cffe98dc9820332dd", + "reference": "a10f19f5198d589d5c33333cffe98dc9820332dd", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -6638,7 +7564,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" + "source": "https://github.com/symfony/options-resolver/tree/v6.3.0" }, "funding": [ { @@ -6654,20 +7580,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:00:38+00:00" + "time": "2023-05-12T14:21:09+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -6682,7 +7608,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6720,7 +7646,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -6736,103 +7662,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -6844,7 +7687,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6884,7 +7727,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -6900,20 +7743,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -6927,7 +7770,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6971,7 +7814,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -6987,20 +7830,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -7012,7 +7855,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7055,7 +7898,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -7071,20 +7914,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -7099,7 +7942,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7138,7 +7981,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -7154,20 +7997,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { @@ -7176,7 +8019,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7214,7 +8057,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -7230,99 +8073,20 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.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": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -7331,7 +8095,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7376,7 +8140,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -7392,29 +8156,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", + "name": "symfony/polyfill-php83", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7426,7 +8191,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" + "Symfony\\Polyfill\\Php83\\": "" }, "classmap": [ "Resources/stubs" @@ -7446,7 +8211,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7455,7 +8220,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -7471,25 +8236,106 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { - "name": "symfony/process", - "version": "v5.4.11", + "name": "symfony/polyfill-uuid", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", - "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/process", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "shasum": "" + }, + "require": { + "php": ">=8.1" }, "type": "library", "autoload": { @@ -7517,7 +8363,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.11" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -7533,36 +8379,37 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2023-08-07T10:39:22+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.1.4", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "a125b93ef378c492e274f217874906fb9babdebb" + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/a125b93ef378c492e274f217874906fb9babdebb", - "reference": "a125b93ef378c492e274f217874906fb9babdebb", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/http-message": "^1.0", - "symfony/http-foundation": "^4.4 || ^5.0 || ^6.0" + "php": ">=7.2.5", + "psr/http-message": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-foundation": "^5.4 || ^6.0" }, "require-dev": { "nyholm/psr7": "^1.1", "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^4.4 || ^5.0 || ^6.0", - "symfony/config": "^4.4 || ^5.0 || ^6.0", - "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", - "symfony/framework-bundle": "^4.4 || ^5.0 || ^6.0", - "symfony/http-kernel": "^4.4 || ^5.0 || ^6.0", - "symfony/phpunit-bridge": "^5.4@dev || ^6.0" + "symfony/browser-kit": "^5.4 || ^6.0", + "symfony/config": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/framework-bundle": "^5.4 || ^6.0", + "symfony/http-kernel": "^5.4 || ^6.0", + "symfony/phpunit-bridge": "^6.2" }, "suggest": { "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" @@ -7570,7 +8417,7 @@ "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-main": "2.1-dev" + "dev-main": "2.3-dev" } }, "autoload": { @@ -7605,7 +8452,7 @@ ], "support": { "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.1.4" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" }, "funding": [ { @@ -7621,47 +8468,40 @@ "type": "tidelift" } ], - "time": "2022-11-28T22:46:34+00:00" + "time": "2023-07-26T11:53:26+00:00" }, { "name": "symfony/routing", - "version": "v5.4.15", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69" + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5c9b129efe9abce9470e384bf65d8a7e262eee69", - "reference": "5c9b129efe9abce9470e384bf65d8a7e262eee69", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -7695,7 +8535,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.15" + "source": "https://github.com/symfony/routing/tree/v6.3.3" }, "funding": [ { @@ -7711,37 +8551,33 @@ "type": "tidelift" } ], - "time": "2022-10-13T14:10:41+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.5.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7751,7 +8587,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7778,7 +8617,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -7794,38 +8633,38 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/string", - "version": "v5.4.15", + "version": "v6.3.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed" + "reference": "53d1a83225002635bca3482fcbf963001313fb68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", - "reference": "571334ce9f687e3e6af72db4d3b2a9431e4fd9ed", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": ">=3.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -7864,7 +8703,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.15" + "source": "https://github.com/symfony/string/tree/v6.3.2" }, "funding": [ { @@ -7880,57 +8719,55 @@ "type": "tidelift" } ], - "time": "2022-10-05T15:16:54+00:00" + "time": "2023-07-05T08:41:27+00:00" }, { "name": "symfony/translation", - "version": "v5.4.14", + "version": "v6.3.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f0ed07675863aa6e3939df8b1bc879450b585cab" + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f0ed07675863aa6e3939df8b1bc879450b585cab", - "reference": "f0ed07675863aa6e3939df8b1bc879450b585cab", + "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/console": "<5.3", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { + "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", + "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0" }, "type": "library", "autoload": { @@ -7961,7 +8798,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.14" + "source": "https://github.com/symfony/translation/tree/v6.3.3" }, "funding": [ { @@ -7977,32 +8814,29 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:01:20+00:00" + "time": "2023-07-31T07:08:24+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.5.2", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/136b19dd05cdf0709db6537d058bcab6dd6e2dbe", - "reference": "136b19dd05cdf0709db6537d058bcab6dd6e2dbe", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -8012,7 +8846,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8039,7 +8876,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -8055,43 +8892,112 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2023-05-30T17:17:10+00:00" }, { - "name": "symfony/var-dumper", - "version": "v5.4.14", + "name": "symfony/uid", + "version": "v6.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "6894d06145fefebd9a4c7272baa026a1c394a430" + "url": "https://github.com/symfony/uid.git", + "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6894d06145fefebd9a4c7272baa026a1c394a430", - "reference": "6894d06145fefebd9a4c7272baa026a1c394a430", + "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", + "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.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-04-08T07:25:02+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, "bin": [ "Resources/bin/var-dump-server" ], @@ -8128,7 +9034,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.14" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" }, "funding": [ { @@ -8144,74 +9050,20 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:01:20+00:00" - }, - { - "name": "tightenco/collect", - "version": "v7.26.1", - "source": { - "type": "git", - "url": "https://github.com/tighten/collect.git", - "reference": "5e460929279ad806e59fc731e649e9b25fc8774a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tighten/collect/zipball/5e460929279ad806e59fc731e649e9b25fc8774a", - "reference": "5e460929279ad806e59fc731e649e9b25fc8774a", - "shasum": "" - }, - "require": { - "php": "^7.1.3", - "symfony/var-dumper": "^3.4 || ^4.0 || ^5.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "nesbot/carbon": "^2.23.0", - "phpunit/phpunit": "^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Collect/Support/helpers.php", - "src/Collect/Support/alias.php" - ], - "psr-4": { - "Tightenco\\Collect\\": "src/Collect" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" - } - ], - "description": "Collect - Illuminate Collections as a separate package.", - "keywords": [ - "collection", - "laravel" - ], - "support": { - "issues": "https://github.com/tighten/collect/issues", - "source": "https://github.com/tighten/collect/tree/v7.26.1" - }, - "time": "2020-09-05T00:05:48+00:00" + "time": "2023-08-24T14:51:05+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.5", + "version": "2.2.6", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19" + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19", - "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", "shasum": "" }, "require": { @@ -8249,9 +9101,9 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" }, - "time": "2022-09-12T13:28:28+00:00" + "time": "2023-01-03T09:29:04+00:00" }, { "name": "uwil/k8s-laravel", @@ -8403,16 +9255,16 @@ }, { "name": "voku/portable-ascii", - "version": "1.6.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" + "reference": "b56450eed252f6801410d810c8e1727224ae0743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", - "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", "shasum": "" }, "require": { @@ -8449,7 +9301,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.6.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" }, "funding": [ { @@ -8473,7 +9325,7 @@ "type": "tidelift" } ], - "time": "2022-01-24T18:55:24+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { "name": "webmozart/assert", @@ -8537,35 +9389,38 @@ "packages-dev": [ { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "4be43904336affa5c2f70744a348312336afd0da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", + "reference": "4be43904336affa5c2f70744a348312336afd0da", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", + "php": ">=5.4", "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { "composer/composer": "*", + "ext-json": "*", + "ext-zip": "*", "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" + "phpcompatibility/php-compatibility": "^9.0", + "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -8581,7 +9436,7 @@ }, { "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", @@ -8605,10 +9460,10 @@ "tests" ], "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2022-02-04T12:51:07+00:00" + "time": "2023-01-05T11:28:13+00:00" }, { "name": "doctrine/cache", @@ -8705,38 +9560,40 @@ }, { "name": "doctrine/dbal", - "version": "3.3.8", + "version": "3.6.6", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "f873a820227bc352d023791775a01f078a30dfe1" + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/f873a820227bc352d023791775a01f078a30dfe1", - "reference": "f873a820227bc352d023791775a01f078a30dfe1", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", "shasum": "" }, "require": { "composer-runtime-api": "^2", "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1.0", - "php": "^7.3 || ^8.0", + "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": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", - "phpstan/phpstan": "1.8.2", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "9.5.21", - "psalm/plugin-phpunit": "0.17.0", - "squizlabs/php_codesniffer": "3.7.1", - "symfony/cache": "^5.2|^6.0", - "symfony/console": "^2.7|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.24.0" + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.29", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.9", + "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." @@ -8796,7 +9653,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.3.8" + "source": "https://github.com/doctrine/dbal/tree/3.6.6" }, "funding": [ { @@ -8812,29 +9669,33 @@ "type": "tidelift" } ], - "time": "2022-08-05T15:35:35+00:00" + "time": "2023-08-17T05:38:17+00:00" }, { "name": "doctrine/deprecations", - "version": "v1.0.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "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" @@ -8853,36 +9714,35 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-06-03T09:27:29+00:00" }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" }, "type": "library", "autoload": { @@ -8931,7 +9791,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" }, "funding": [ { @@ -8947,237 +9807,24 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.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%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-03-03T08:28:38+00:00" - }, - { - "name": "facade/flare-client-php", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/facade/flare-client-php.git", - "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", - "reference": "213fa2c69e120bca4c51ba3e82ed1834ef3f41b8", - "shasum": "" - }, - "require": { - "facade/ignition-contracts": "~1.0", - "illuminate/pipeline": "^5.5|^6.0|^7.0|^8.0", - "php": "^7.1|^8.0", - "symfony/http-foundation": "^3.3|^4.1|^5.0", - "symfony/mime": "^3.4|^4.0|^5.1", - "symfony/var-dumper": "^3.4|^4.0|^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "phpunit/phpunit": "^7.5", - "spatie/phpunit-snapshot-assertions": "^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/facade/flare-client-php", - "keywords": [ - "exception", - "facade", - "flare", - "reporting" - ], - "support": { - "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.10.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2022-08-09T11:23:57+00:00" - }, - { - "name": "facade/ignition", - "version": "2.17.6", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition.git", - "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", - "reference": "6acd82e986a2ecee89e2e68adfc30a1936d1ab7c", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "facade/flare-client-php": "^1.9.1", - "facade/ignition-contracts": "^1.0.2", - "illuminate/support": "^7.0|^8.0", - "monolog/monolog": "^2.0", - "php": "^7.2.5|^8.0", - "symfony/console": "^5.0", - "symfony/var-dumper": "^5.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "livewire/livewire": "^2.4", - "mockery/mockery": "^1.3", - "orchestra/testbench": "^5.0|^6.0", - "psalm/plugin-laravel": "^1.2" - }, - "suggest": { - "laravel/telescope": "^3.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Facade\\Ignition\\IgnitionServiceProvider" - ], - "aliases": { - "Flare": "Facade\\Ignition\\Facades\\Flare" - } - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Facade\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://github.com/facade/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/facade/ignition/issues", - "source": "https://github.com/facade/ignition" - }, - "time": "2022-06-30T18:26:59+00:00" + "time": "2022-10-12T20:59:15+00:00" }, { "name": "fakerphp/faker", - "version": "v1.20.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", - "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", + "php": "^7.4 || ^8.0", "psr/container": "^1.0 || ^2.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, @@ -9188,7 +9835,8 @@ "bamarni/composer-bin-plugin": "^1.4.1", "doctrine/persistence": "^1.3 || ^2.0", "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" }, "suggest": { "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", @@ -9200,7 +9848,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "v1.20-dev" + "dev-main": "v1.21-dev" } }, "autoload": { @@ -9225,22 +9873,22 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" }, - "time": "2022-07-20T13:12:54+00:00" + "time": "2023-06-12T08:44:38+00:00" }, { "name": "filp/whoops", - "version": "2.14.6", + "version": "2.15.3", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "f7948baaa0330277c729714910336383286305da" + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", - "reference": "f7948baaa0330277c729714910336383286305da", + "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", + "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", "shasum": "" }, "require": { @@ -9290,7 +9938,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.6" + "source": "https://github.com/filp/whoops/tree/2.15.3" }, "funding": [ { @@ -9298,7 +9946,7 @@ "type": "github" } ], - "time": "2022-11-02T16:23:29+00:00" + "time": "2023-07-13T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9410,24 +10058,95 @@ "time": "2021-05-20T17:46:49+00:00" }, { - "name": "laravel/sail", - "version": "v1.16.3", + "name": "laravel/pint", + "version": "v1.13.1", "source": { "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "0dbee8802e17911afbe29a8506316343829b056e" + "url": "https://github.com/laravel/pint.git", + "reference": "22f204242d68095b3ba7dab5d3ef0240454a4652" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/0dbee8802e17911afbe29a8506316343829b056e", - "reference": "0dbee8802e17911afbe29a8506316343829b056e", + "url": "https://api.github.com/repos/laravel/pint/zipball/22f204242d68095b3ba7dab5d3ef0240454a4652", + "reference": "22f204242d68095b3ba7dab5d3ef0240454a4652", "shasum": "" }, "require": { - "illuminate/console": "^8.0|^9.0", - "illuminate/contracts": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "php": "^7.3|^8.0" + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.21.1", + "illuminate/view": "^10.5.1", + "laravel-zero/framework": "^10.1.2", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.5.1", + "nunomaduro/termwind": "^1.15.1", + "pestphp/pest": "^2.4.0" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2023-09-06T11:03:34+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.25.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "reference": "e81a7bd7ac1a745ccb25572830fecf74a89bb48a", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^8.0", + "symfony/yaml": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^6.0|^7.0|^8.0", + "phpstan/phpstan": "^1.10" }, "bin": [ "bin/sail" @@ -9467,42 +10186,44 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-11-21T16:19:18+00:00" + "time": "2023-09-11T17:37:09+00:00" }, { "name": "mockery/mockery", - "version": "1.5.1", + "version": "1.6.6", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", + "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", "shasum": "" }, "require": { "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" + "php": ">=7.3" }, "conflict": { "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" + "phpunit/phpunit": "^8.5 || ^9.6.10", + "psalm/plugin-phpunit": "^0.18.4", + "symplify/easy-coding-standard": "^11.5.0", + "vimeo/psalm": "^4.30" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Mockery": "library/" + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" } }, "notification-url": "https://packagist.org/downloads/", @@ -9513,12 +10234,20 @@ { "name": "Pádraic Brady", "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" + "homepage": "https://github.com/padraic", + "role": "Author" }, { "name": "Dave Marshall", "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" } ], "description": "Mockery is a simple yet flexible PHP mock object framework", @@ -9536,41 +10265,47 @@ "testing" ], "support": { + "docs": "https://docs.mockery.io/", "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.1" + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" }, - "time": "2022-09-07T15:32:08+00:00" + "time": "2023-08-09T00:03:52+00:00" }, { "name": "nunomaduro/collision", - "version": "v5.11.0", + "version": "v7.8.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + "reference": "61553ad3260845d7e3e49121b7074619233d361b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", - "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/61553ad3260845d7e3e49121b7074619233d361b", + "reference": "61553ad3260845d7e3e49121b7074619233d361b", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0", - "filp/whoops": "^2.14.3", - "php": "^7.3 || ^8.0", - "symfony/console": "^5.0" + "filp/whoops": "^2.15.3", + "nunomaduro/termwind": "^1.15.1", + "php": "^8.1.0", + "symfony/console": "^6.3.2" }, "require-dev": { - "brianium/paratest": "^6.1", - "fideloper/proxy": "^4.4.1", - "fruitcake/laravel-cors": "^2.0.3", - "laravel/framework": "8.x-dev", - "nunomaduro/larastan": "^0.6.2", - "nunomaduro/mock-final-classes": "^1.0", - "orchestra/testbench": "^6.0", - "phpstan/phpstan": "^0.12.64", - "phpunit/phpunit": "^9.5.0" + "brianium/paratest": "^7.2.4", + "laravel/framework": "^10.17.1", + "laravel/pint": "^1.10.5", + "laravel/sail": "^1.23.1", + "laravel/sanctum": "^3.2.5", + "laravel/tinker": "^2.8.1", + "nunomaduro/larastan": "^2.6.4", + "orchestra/testbench-core": "^8.5.9", + "pestphp/pest": "^2.12.1", + "phpunit/phpunit": "^10.3.1", + "sebastian/environment": "^6.0.1", + "spatie/laravel-ignition": "^2.2.0" }, "type": "library", "extra": { @@ -9581,6 +10316,9 @@ } }, "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], "psr-4": { "NunoMaduro\\Collision\\": "src/" } @@ -9626,7 +10364,7 @@ "type": "patreon" } ], - "time": "2022-01-10T16:22:52+00:00" + "time": "2023-08-07T08:03:21+00:00" }, { "name": "phar-io/manifest", @@ -9741,22 +10479,24 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "1.13.1", + "version": "1.24.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "aac44118344d197e6d5f7c6cee91885f0a89acdd" + "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/aac44118344d197e6d5f7c6cee91885f0a89acdd", - "reference": "aac44118344d197e6d5f7c6cee91885f0a89acdd", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/3510b0a6274cc42f7219367cb3abfc123ffa09d6", + "reference": "3510b0a6274cc42f7219367cb3abfc123ffa09d6", "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", @@ -9780,50 +10520,50 @@ "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.13.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.0" }, - "time": "2022-11-20T08:52:26+00:00" + "time": "2023-09-07T20:46:32+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.19", + "version": "10.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" + "reference": "1df504e42a88044c27a90136910f0b3fe9e91939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", - "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1df504e42a88044c27a90136910f0b3fe9e91939", + "reference": "1df504e42a88044c27a90136910f0b3fe9e91939", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -9851,7 +10591,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.5" }, "funding": [ { @@ -9859,32 +10600,32 @@ "type": "github" } ], - "time": "2022-11-18T07:47:47+00:00" + "time": "2023-09-12T14:37:22+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9911,7 +10652,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -9919,28 +10661,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -9948,7 +10690,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9974,7 +10716,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -9982,32 +10724,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10033,7 +10775,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -10041,32 +10784,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10092,7 +10835,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -10100,24 +10843,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.26", + "version": "10.3.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + "reference": "b8d59476f19115c9774b3b447f78131781c6c32b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b8d59476f19115c9774b3b447f78131781c6c32b", + "reference": "b8d59476f19115c9774b3b447f78131781c6c32b", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -10127,27 +10869,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -10155,7 +10896,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "10.3-dev" } }, "autoload": { @@ -10186,7 +10927,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.3.4" }, "funding": [ { @@ -10202,24 +10944,24 @@ "type": "tidelift" } ], - "time": "2022-10-28T06:00:21+00:00" + "time": "2023-09-12T14:42:28+00:00" }, { "name": "psr/cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { @@ -10239,7 +10981,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for caching libraries", @@ -10249,34 +10991,34 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2016-08-06T20:24:11+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -10299,7 +11041,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" }, "funding": [ { @@ -10307,32 +11049,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2023-02-03T06:58:15+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -10355,7 +11097,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -10363,32 +11105,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10410,7 +11152,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -10418,34 +11160,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10484,7 +11228,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" }, "funding": [ { @@ -10492,33 +11237,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-08-14T13:18:12+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c70b73893e10757af9c6a48929fa6a333b56a97a", + "reference": "c70b73893e10757af9c6a48929fa6a333b56a97a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10541,7 +11286,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.1" }, "funding": [ { @@ -10549,33 +11295,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-08-31T09:55:53+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/912dc2fbe3e3c1e7873313cc801b100b6c68c87b", + "reference": "912dc2fbe3e3c1e7873313cc801b100b6c68c87b", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^10.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10607,7 +11353,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.3" }, "funding": [ { @@ -10615,27 +11362,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-01T07:48:21+00:00" }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -10643,7 +11390,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10662,7 +11409,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -10670,7 +11417,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" }, "funding": [ { @@ -10678,34 +11426,34 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-04-11T05:39:26+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "c3fa8483f9539b190f7cd4bfc4a07631dd1df344" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c3fa8483f9539b190f7cd4bfc4a07631dd1df344", + "reference": "c3fa8483f9539b190f7cd4bfc4a07631dd1df344", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10747,7 +11495,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.0" }, "funding": [ { @@ -10755,38 +11504,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2023-09-18T07:15:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10811,7 +11557,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" }, "funding": [ { @@ -10819,33 +11566,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-07-19T07:19:23+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d", + "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -10868,7 +11615,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1" }, "funding": [ { @@ -10876,34 +11624,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-08-31T09:25:50+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10925,7 +11673,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -10933,32 +11681,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -10980,7 +11728,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -10988,32 +11736,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11040,10 +11788,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -11051,87 +11799,32 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11154,7 +11847,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -11162,29 +11855,29 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11207,7 +11900,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -11215,36 +11908,36 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.6.4", + "version": "8.13.4", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "8a02c83e59c3230a2a4367b29956a2f2b56e3a24" + "reference": "4b2af2fb17773656d02fbfb5d18024ebd19fe322" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/8a02c83e59c3230a2a4367b29956a2f2b56e3a24", - "reference": "8a02c83e59c3230a2a4367b29956a2f2b56e3a24", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/4b2af2fb17773656d02fbfb5d18024ebd19fe322", + "reference": "4b2af2fb17773656d02fbfb5d18024ebd19fe322", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": ">=1.11.0 <1.14.0", + "phpstan/phpdoc-parser": "^1.23.0", "squizlabs/php_codesniffer": "^3.7.1" }, "require-dev": { "phing/phing": "2.17.4", "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.4.10|1.9.2", - "phpstan/phpstan-deprecation-rules": "1.0.0", - "phpstan/phpstan-phpunit": "1.0.0|1.2.2", - "phpstan/phpstan-strict-rules": "1.4.4", - "phpunit/phpunit": "7.5.20|8.5.21|9.5.26" + "phpstan/phpstan": "1.10.26", + "phpstan/phpstan-deprecation-rules": "1.1.3", + "phpstan/phpstan-phpunit": "1.3.13", + "phpstan/phpstan-strict-rules": "1.5.1", + "phpunit/phpunit": "7.5.20|8.5.21|9.6.8|10.2.6" }, "type": "phpcodesniffer-standard", "extra": { @@ -11254,7 +11947,7 @@ }, "autoload": { "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" } }, "notification-url": "https://packagist.org/downloads/", @@ -11268,7 +11961,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.6.4" + "source": "https://github.com/slevomat/coding-standard/tree/8.13.4" }, "funding": [ { @@ -11280,20 +11973,327 @@ "type": "tidelift" } ], - "time": "2022-11-14T09:26:24+00:00" + "time": "2023-07-25T10:28:55+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.7.1", + "name": "spatie/backtrace", + "version": "1.5.3", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" + "url": "https://github.com/spatie/backtrace.git", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/483f76a82964a0431aa836b6ed0edde0c248e3ab", + "reference": "483f76a82964a0431aa836b6ed0edde0c248e3ab", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/backtrace/tree/1.5.3" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2023-06-28T12:59:17+00:00" + }, + { + "name": "spatie/flare-client-php", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/flare-client-php.git", + "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544", + "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544", + "shasum": "" + }, + "require": { + "illuminate/pipeline": "^8.0|^9.0|^10.0", + "nesbot/carbon": "^2.62.1", + "php": "^8.0", + "spatie/backtrace": "^1.5.2", + "symfony/http-foundation": "^5.0|^6.0", + "symfony/mime": "^5.2|^6.0", + "symfony/process": "^5.2|^6.0", + "symfony/var-dumper": "^5.2|^6.0" + }, + "require-dev": { + "dms/phpunit-arraysubset-asserts": "^0.3.0", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "spatie/phpunit-snapshot-assertions": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\FlareClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Send PHP errors to Flare", + "homepage": "https://github.com/spatie/flare-client-php", + "keywords": [ + "exception", + "flare", + "reporting", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/flare-client-php/issues", + "source": "https://github.com/spatie/flare-client-php/tree/1.4.2" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-07-28T08:07:24+00:00" + }, + { + "name": "spatie/ignition", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/ignition.git", + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ignition/zipball/d92b9a081e99261179b63a858c7a4b01541e7dd1", + "reference": "d92b9a081e99261179b63a858c7a4b01541e7dd1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "spatie/backtrace": "^1.5.3", + "spatie/flare-client-php": "^1.4.0", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "illuminate/cache": "^9.52", + "mockery/mockery": "^1.4", + "pestphp/pest": "^1.20", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "psr/simple-cache-implementation": "*", + "symfony/cache": "^6.0", + "symfony/process": "^5.4|^6.0", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "simple-cache-implementation": "To cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spatie\\Ignition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for PHP applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/ignition/issues", + "source": "https://github.com/spatie/ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-08-21T15:06:37+00:00" + }, + { + "name": "spatie/laravel-ignition", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ignition.git", + "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0", + "reference": "4ed813d16edb5a1ab0d7f4b1d116c37ee8cdf3c0", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "illuminate/support": "^10.0", + "php": "^8.1", + "spatie/flare-client-php": "^1.3.5", + "spatie/ignition": "^1.9", + "symfony/console": "^6.2.3", + "symfony/var-dumper": "^6.2.3" + }, + "require-dev": { + "livewire/livewire": "^2.11", + "mockery/mockery": "^1.5.1", + "openai-php/client": "^0.3.4", + "orchestra/testbench": "^8.0", + "pestphp/pest": "^1.22.3", + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan-deprecation-rules": "^1.1.1", + "phpstan/phpstan-phpunit": "^1.3.3", + "vlucas/phpdotenv": "^5.5" + }, + "suggest": { + "openai-php/client": "Require get solutions from OpenAI", + "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelIgnition\\IgnitionServiceProvider" + ], + "aliases": { + "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\LaravelIgnition\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Spatie", + "email": "info@spatie.be", + "role": "Developer" + } + ], + "description": "A beautiful error page for Laravel applications.", + "homepage": "https://flareapp.io/ignition", + "keywords": [ + "error", + "flare", + "laravel", + "page" + ], + "support": { + "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", + "forum": "https://twitter.com/flareappio", + "issues": "https://github.com/spatie/laravel-ignition/issues", + "source": "https://github.com/spatie/laravel-ignition" + }, + "funding": [ + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2023-08-23T06:24:34+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.7.2", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", + "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", "shasum": "" }, "require": { @@ -11329,14 +12329,87 @@ "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", "keywords": [ "phpcs", - "standards" + "standards", + "static analysis" ], "support": { "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", "source": "https://github.com/squizlabs/PHP_CodeSniffer", "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" }, - "time": "2022-06-18T07:21:10+00:00" + "time": "2023-02-22T23:07:41+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", + "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.3.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-31T07:08:24+00:00" }, { "name": "theseer/tokenizer", @@ -11390,12 +12463,12 @@ } ], "aliases": [], - "minimum-stability": "dev", + "minimum-stability": "stable", "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^7.3|^8.0" + "php": "^8.2" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/config/app.php b/config/app.php index 4437a6f..8c8a405 100644 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,7 @@ [ - - 'App' => Illuminate\Support\Facades\App::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'Date' => Illuminate\Support\Facades\Date::class, - 'DB' => Illuminate\Support\Facades\DB::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Http' => Illuminate\Support\Facades\Http::class, - 'Js' => Illuminate\Support\Js::class, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, - // phpcs:ignore - // 'Redis' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'Str' => Illuminate\Support\Str::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, - 'NutriscoreEnum' => \App\Enums\NutriscoreEnum::class, - 'ExpertiseProductPageEnum' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::class, - - ], - + 'aliases' => Facade::defaultAliases()->merge([])->toArray(), ]; diff --git a/config/auth.php b/config/auth.php index f794833..0e3de5f 100644 --- a/config/auth.php +++ b/config/auth.php @@ -14,7 +14,7 @@ return [ */ 'defaults' => [ - 'guard' => 'backend', + 'guard' => 'frontend', 'passwords' => 'users', ], @@ -40,6 +40,10 @@ return [ 'driver' => 'session', 'provider' => 'users', ], + 'frontend' => [ + 'driver' => 'session', + 'provider' => 'users', + ], ], /* @@ -62,7 +66,7 @@ return [ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User::class, + 'model' => \App\Models\User::class, ], ], @@ -102,5 +106,4 @@ return [ */ 'password_timeout' => 10800, - ]; diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php index a5ffa26..6c96342 100644 --- a/config/breadcrumbs.php +++ b/config/breadcrumbs.php @@ -23,7 +23,7 @@ return [ | */ - 'view' => 'fo/modules/breadcrumb/layout', + 'view' => 'modules/breadcrumbs/breadcrumb-layout', /* |-------------------------------------------------------------------------- @@ -38,6 +38,7 @@ return [ */ 'files' => [ + base_path('routes/breadcrumbs-bo.php'), base_path('routes/breadcrumbs-fo.php'), ], diff --git a/config/broadcasting.php b/config/broadcasting.php index b80d371..9f4b353 100644 --- a/config/broadcasting.php +++ b/config/broadcasting.php @@ -36,9 +36,13 @@ return [ 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'useTLS' => true, + 'host' => env('PUSHER_HOST') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', + 'port' => env('PUSHER_PORT', 443), + 'scheme' => env('PUSHER_SCHEME', 'https'), + 'encrypted' => true, + 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', ], + 'client_options' => [], ], 'ably' => [ @@ -58,7 +62,5 @@ return [ 'null' => [ 'driver' => 'null', ], - ], - ]; diff --git a/config/cache.php b/config/cache.php index 004bb8e..d98ec69 100644 --- a/config/cache.php +++ b/config/cache.php @@ -62,8 +62,7 @@ return [ env('MEMCACHED_PASSWORD'), ], 'options' => [ - // phpcs:ignore - // Memcached::OPT_CONNECT_TIMEOUT => 2000, + // Memcached::OPT_CONNECT_TIMEOUT => 2000, . ], 'servers' => [ [ @@ -100,12 +99,11 @@ return [ | Cache Key Prefix |-------------------------------------------------------------------------- | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. + | When utilizing the APC, database, memcached, Redis, or DynamoDB cache + | stores there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. | */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'), - + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'), ]; diff --git a/config/cors.php b/config/cors.php index 32a0f68..cf8eadd 100644 --- a/config/cors.php +++ b/config/cors.php @@ -15,7 +15,7 @@ return [ | */ - 'paths' => ['api/*', 'sanctum/csrf-cookie'], + 'paths' => ['api/*'], 'allowed_methods' => ['*'], @@ -30,5 +30,4 @@ return [ 'max_age' => 0, 'supports_credentials' => false, - ]; diff --git a/config/database.php b/config/database.php index ac4559f..561bb02 100644 --- a/config/database.php +++ b/config/database.php @@ -74,7 +74,7 @@ return [ 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, - 'schema' => 'public', + 'search_path' => 'public', 'sslmode' => 'prefer', ], @@ -129,7 +129,8 @@ return [ 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], @@ -137,11 +138,10 @@ return [ 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), - 'password' => env('REDIS_PASSWORD', null), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), ], - ], - ]; diff --git a/config/filesystems.php b/config/filesystems.php index 0dece94..de37585 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -13,7 +13,7 @@ return [ | */ - 'default' => env('FILESYSTEM_DRIVER', 'local'), + 'default' => env('FILESYSTEM_DISK', 'local'), /* |-------------------------------------------------------------------------- @@ -22,7 +22,7 @@ return [ | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have - | been setup for each driver as an example of the required options. + | been set up for each driver as an example of the required values. | | Supported Drivers: "local", "ftp", "sftp", "s3" | @@ -33,6 +33,7 @@ return [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'throw' => false, ], 'public' => [ @@ -40,6 +41,14 @@ return [ 'root' => storage_path('app/public'), 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', + 'throw' => false, + ], + + 'private' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'visibility' => 'private', + 'throw' => false, ], 's3' => [ @@ -51,6 +60,7 @@ return [ 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, ], ], @@ -69,5 +79,4 @@ return [ 'links' => [ public_path('storage') => storage_path('app/public'), ], - ]; diff --git a/config/hashing.php b/config/hashing.php index db3d9dd..91f17eb 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -48,5 +48,4 @@ return [ 'threads' => 1, 'time' => 4, ], - ]; diff --git a/config/logging.php b/config/logging.php index 1e2fad7..a315897 100644 --- a/config/logging.php +++ b/config/logging.php @@ -3,6 +3,7 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ @@ -30,7 +31,10 @@ return [ | */ - 'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => false, + ], /* |-------------------------------------------------------------------------- @@ -58,6 +62,7 @@ return [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'daily' => [ @@ -65,6 +70,7 @@ return [ 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, + 'replace_placeholders' => true, ], 'slack' => [ @@ -73,16 +79,19 @@ return [ 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, ], 'papertrail' => [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => SyslogUdpHandler::class, + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), ], + 'processors' => [PsrLogMessageProcessor::class], ], 'stderr' => [ @@ -93,16 +102,20 @@ return [ 'with' => [ 'stream' => 'php://stderr', ], + 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => LOG_USER, + 'replace_placeholders' => true, ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, ], 'null' => [ @@ -129,7 +142,5 @@ return [ 'channels' => ['daily', 'stdout'], 'ignore_exceptions' => false, ], - ], - ]; diff --git a/config/mail.php b/config/mail.php index 1d92b97..2a9b7e0 100644 --- a/config/mail.php +++ b/config/mail.php @@ -28,7 +28,7 @@ return [ | sending an e-mail. You will specify which one you are using for your | mailers below. You are free to add additional mailers as required. | - | Supported: "smtp", "sendmail", "mailgun", "ses", + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", | "postmark", "log", "array", "failover" | */ @@ -42,7 +42,7 @@ return [ 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'auth_mode' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN'), ], 'ses' => [ @@ -50,16 +50,16 @@ return [ ], 'mailgun' => [ - 'transport' => 'mailgun', + 'transport' => 'mailgun' ], 'postmark' => [ - 'transport' => 'postmark', + 'transport' => 'postmark' ], 'sendmail' => [ 'transport' => 'sendmail', - 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), ], 'log' => [ @@ -96,11 +96,6 @@ return [ 'name' => env('MAIL_FROM_NAME', 'Example'), ], - // Contacts List. - 'contactsList' => [ - 'contactform' => explode(",", env('MAIL_LIST_CONTACTFORM', 'equipe.web@ldc.fr')) - ], - /* |-------------------------------------------------------------------------- | Markdown Mail Settings @@ -119,5 +114,4 @@ return [ resource_path('views/vendor/mail'), ], ], - ]; diff --git a/config/purifier.php b/config/purifier.php index 384793e..d74b7a6 100644 --- a/config/purifier.php +++ b/config/purifier.php @@ -29,12 +29,22 @@ return [ // * For iframes 'URI.SafeIframeRegexp' => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", 'HTML.Doctype' => 'HTML 4.01 Transitional', - 'HTML.Allowed' => 'h1[style],h2[style],h3[style],h4[style],h5[style],h6[style],figure[class|style],oembed[url],div[style],b,strong,i,em,u,a[href|title|target|rel],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt', - 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border-color', + // * Legacy filter en full avec safe legacy. + // 'HTML.Allowed' => 'h1[style|id],h2[style|id],h3[style|id],h4[style|id],h5[style|id],h6[style|id],figure[class|style],oembed[url],div[style],b,strong,i,em,u,s,pre,code[class],a[href|title|target|rel|id],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt,mark[class]', + // * Restricted basics. + 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]', + // * Legacy filter en full avec safe legacy. + // 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border,border-color,margin-left', + // * Restricted basics. + 'CSS.AllowedProperties' => 'text-align,margin-left', 'AutoFormat.AutoParagraph' => false, 'AutoFormat.RemoveEmpty' => false, 'AutoFormat.RemoveEmpty.RemoveNbsp' => false, ], + "youtube" => [ + "HTML.SafeIframe" => 'true', + "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", + ], 'custom_definition' => [ 'id' => 'html5-definitions', 'rev' => 1, @@ -101,11 +111,18 @@ return [ ], 'custom_attributes' => [ ['a', 'target', 'Enum#_blank,_self,_target,_top'], + ['a', 'id', 'Text'], ['ol', 'style', 'Text'], ['figure', 'style', 'Text'], ['img', 'style', 'Text'], ['span', 'style', 'Text'], ['oembed', 'url', 'Text'], + ['h1', 'id', 'Text'], + ['h2', 'id', 'Text'], + ['h3', 'id', 'Text'], + ['h4', 'id', 'Text'], + ['h5', 'id', 'Text'], + ['h6', 'id', 'Text'], ], 'custom_elements' => [ ['u', 'Inline', 'Inline', 'Common'], diff --git a/config/queue.php b/config/queue.php index c312794..f7cdbf2 100644 --- a/config/queue.php +++ b/config/queue.php @@ -73,6 +73,22 @@ return [ ], + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'job_batches', + ], + /* |-------------------------------------------------------------------------- | Failed Queue Jobs @@ -89,5 +105,4 @@ return [ 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ], - ]; diff --git a/config/services.php b/config/services.php index 0361033..97bd20f 100644 --- a/config/services.php +++ b/config/services.php @@ -14,15 +14,20 @@ return [ | */ - 'google' => [ - 'recaptcha' => [ - 'public' => env('GOOGLE_RECAPTCHA_PUBLIC'), - 'private' => env('GOOGLE_RECAPTCHA_PRIVATE'), - 'version' => env('GOOGLE_RECAPTCHA_VERSION', "3") === "3" ? true : false - ] + 'mailgun' => [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + 'scheme' => 'https', ], - 'matomo' => [ - 'site_id' => env('MATOMO_SITE_ID') + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], ]; diff --git a/config/session.php b/config/session.php index b096861..0ad9db0 100644 --- a/config/session.php +++ b/config/session.php @@ -72,7 +72,7 @@ return [ | */ - 'connection' => env('SESSION_CONNECTION', null), + 'connection' => env('SESSION_CONNECTION'), /* |-------------------------------------------------------------------------- @@ -100,7 +100,7 @@ return [ | */ - 'store' => env('SESSION_STORE', null), + 'store' => env('SESSION_STORE'), /* |-------------------------------------------------------------------------- @@ -155,7 +155,7 @@ return [ | */ - 'domain' => env('SESSION_DOMAIN', null), + 'domain' => env('SESSION_DOMAIN'), /* |-------------------------------------------------------------------------- @@ -197,5 +197,4 @@ return [ */ 'same_site' => 'lax', - ]; diff --git a/config/view.php b/config/view.php index 53008fd..d8b71b1 100644 --- a/config/view.php +++ b/config/view.php @@ -15,6 +15,8 @@ return [ 'paths' => [ resource_path('views'), + // ! for vendor publish (mail notifications par ex) + resource_path('views/vendor'), ], /* diff --git a/database/factories/AdviceFactory.php b/database/factories/AdviceFactory.php index cc35a31..26badb6 100644 --- a/database/factories/AdviceFactory.php +++ b/database/factories/AdviceFactory.php @@ -34,7 +34,7 @@ class AdviceFactory extends Factory $guest_nb = null; $difficulty = null; - if ($type == AdviceTypeEnum::recipes()->value) { + if ($type == AdviceTypeEnum::recipes->value()) { $cooking_time = $this->faker->numberBetween(0, 10); $preparation_time = $this->faker->numberBetween(0, 10); if ($this->faker->boolean(50)) { @@ -43,8 +43,8 @@ class AdviceFactory extends Factory } $guest_nb = rand(1, 10); /** @var \App\Enums\Advices\AdviceDifficultyEnum */ - $difficulty = collect(AdviceDifficultyEnum::toArray())->random(); - } elseif ($type == AdviceTypeEnum::tips()->value) { + $difficulty = collect(AdviceDifficultyEnum::toArray())->random()->value; + } elseif ($type == AdviceTypeEnum::tips->value()) { $video_title = $this->faker->words(8, true); $video_id = '7rpgfetac0U'; $guest_nb = $this->faker->boolean(50) ? rand(1, 10) : null; @@ -61,27 +61,27 @@ class AdviceFactory extends Factory } return [ - 'title' => $title, - 'slug' => Str::slug($title), - 'seo_title' => $this->faker->words(8, true), - 'seo_description' => $this->faker->words(25, true), - 'type' => $type, - 'picture_title' => $this->faker->words(5, true), - 'picture_alt' => $this->faker->words(8, true), - 'sticker_title' => $this->faker->words(5, true), - 'sticker_alt' => $this->faker->words(8, true), + 'title' => $title, + 'slug' => Str::slug($title), + 'seo_title' => $this->faker->words(8, true), + 'seo_description' => $this->faker->words(25, true), + 'type' => $type, + 'picture_title' => $this->faker->words(5, true), + 'picture_alt' => $this->faker->words(8, true), + 'sticker_title' => $this->faker->words(5, true), + 'sticker_alt' => $this->faker->words(8, true), 'sticker_sm_title' => $this->faker->words(5, true), - 'sticker_sm_alt' => $this->faker->words(8, true), - 'preparation' => $this->faker->words(25, true), - 'advice' => $this->faker->boolean(75) ? $this->faker->words(25, true) : null, - 'ingredients' => $ingredients, - 'guests_nb' => $guest_nb, - 'youtube_title' => $video_title, + 'sticker_sm_alt' => $this->faker->words(8, true), + 'preparation' => $this->faker->words(25, true), + 'advice' => $this->faker->boolean(75) ? $this->faker->words(25, true) : null, + 'ingredients' => $ingredients, + 'guests_nb' => $guest_nb, + 'youtube_title' => $video_title, 'youtube_video_id' => $video_id, - 'cooking_time' => $cooking_time, + 'cooking_time' => $cooking_time, 'preparation_time' => $preparation_time, - 'difficulty' => $difficulty, - 'status' => $this->faker->boolean(75) + 'difficulty' => $difficulty, + 'status' => $this->faker->boolean(75) ]; } } diff --git a/database/factories/ExpertiseProductFactory.php b/database/factories/ExpertiseProductFactory.php index 68eb8dd..07e0b0b 100644 --- a/database/factories/ExpertiseProductFactory.php +++ b/database/factories/ExpertiseProductFactory.php @@ -31,13 +31,13 @@ class ExpertiseProductFactory extends Factory } return [ - 'label' => $this->faker->unique()->words(rand(2, 3), true), - 'title' => $this->faker->unique()->words(rand(2, 4), true), - 'subtitle' => $this->faker->unique()->words(rand(8, 10), true), - 'points' => $points, - 'is_frenchpoultry' => $this->faker->boolean(50), + 'label' => $this->faker->unique()->words(rand(2, 3), true), + 'title' => $this->faker->unique()->words(rand(2, 4), true), + 'subtitle' => $this->faker->unique()->words(rand(8, 10), true), + 'points' => $points, + 'is_frenchpoultry' => $this->faker->boolean(50), 'is_natureeleveurs' => $this->faker->boolean(50), - 'nutriscore' => collect(NutriscoreEnum::toArray())->random(), + 'nutriscore' => collect(NutriscoreEnum::toArray())->random()->value, ]; } } diff --git a/database/factories/NewsCategoryFactory.php b/database/factories/NewsCategoryFactory.php index fd8d629..30d43a7 100644 --- a/database/factories/NewsCategoryFactory.php +++ b/database/factories/NewsCategoryFactory.php @@ -29,7 +29,7 @@ class NewsCategoryFactory extends Factory } return [ 'label' => $label, - 'slug' => Str::slug($label), + 'slug' => Str::slug($label), ]; } } diff --git a/database/factories/NewsFactory.php b/database/factories/NewsFactory.php index 22fefee..12e4f8d 100644 --- a/database/factories/NewsFactory.php +++ b/database/factories/NewsFactory.php @@ -42,21 +42,21 @@ class NewsFactory extends Factory $eventText = null; } return [ - 'title' => $title, - 'slug' => Str::slug($title), - 'subtitle' => $this->faker->unique()->words(rand(8, 10), true), - 'seo_title' => $this->faker->words(8, true), + 'title' => $title, + 'slug' => Str::slug($title), + 'subtitle' => $this->faker->unique()->words(rand(8, 10), true), + 'seo_title' => $this->faker->words(8, true), 'seo_description' => $this->faker->words(25, true), - 'picture_title' => $this->faker->words(5, true), - 'picture_alt' => $this->faker->words(8, true), - 'picture2_title' => $picture2Title, - 'picture2_alt' => $picture2Alt, - 'content' => $this->faker->words(25, true), - 'content2' => $content2, - 'event_start' => $eventStart, - 'event_end' => $eventEnd, - 'event_text' => $eventText, - 'status' => $this->faker->boolean(75) + 'picture_title' => $this->faker->words(5, true), + 'picture_alt' => $this->faker->words(8, true), + 'picture2_title' => $picture2Title, + 'picture2_alt' => $picture2Alt, + 'content' => $this->faker->words(25, true), + 'content2' => $content2, + 'event_start' => $eventStart, + 'event_end' => $eventEnd, + 'event_text' => $eventText, + 'status' => $this->faker->boolean(75) ]; } } diff --git a/database/factories/ProductFactory.php b/database/factories/ProductFactory.php index 89ff9aa..b402094 100644 --- a/database/factories/ProductFactory.php +++ b/database/factories/ProductFactory.php @@ -49,24 +49,24 @@ class ProductFactory extends Factory $label = $this->faker->unique()->words(rand(2, 4), true); return [ - 'label' => $label, - 'slug' => Str::slug($label), - 'seo_title' => $this->faker->words(8, true), - 'seo_description' => $this->faker->words(25, true), - 'species' => collect(ProductSpeciesEnum::toArray())->random(), - 'nutriscore' => collect(NutriscoreEnum::toArray())->random(), - 'sticker_sm_title' => $this->faker->words(5, true), - 'sticker_sm_alt' => $this->faker->words(8, true), - 'packaging' => $packaging, - 'caliber' => $caliber, + 'label' => $label, + 'slug' => Str::slug($label), + 'seo_title' => $this->faker->words(8, true), + 'seo_description' => $this->faker->words(25, true), + 'species' => collect(ProductSpeciesEnum::toArray())->random()->value, + 'nutriscore' => collect(NutriscoreEnum::toArray())->random()->value, + 'sticker_sm_title' => $this->faker->words(5, true), + 'sticker_sm_alt' => $this->faker->words(8, true), + 'packaging' => $packaging, + 'caliber' => $caliber, 'nutritionnal_values' => $nutritionnal_values, - 'ingredients' => $this->faker->unique()->words(rand(15, 25), true), - 'advantage' => $this->faker->unique()->words(rand(15, 25), true), - 'preparation' => $this->faker->unique()->words(rand(15, 25), true), - 'is_frenchpoultry' => $this->faker->boolean(75), - 'is_vip' => $this->faker->boolean(25), - 'is_egalim' => $this->faker->boolean(25), - 'status' => $this->faker->boolean(75) + 'ingredients' => $this->faker->unique()->words(rand(15, 25), true), + 'advantage' => $this->faker->unique()->words(rand(15, 25), true), + 'preparation' => $this->faker->unique()->words(rand(15, 25), true), + 'is_frenchpoultry' => $this->faker->boolean(75), + 'is_vip' => $this->faker->boolean(25), + 'is_egalim' => $this->faker->boolean(25), + 'status' => $this->faker->boolean(75) ]; } } diff --git a/database/factories/RangeFactory.php b/database/factories/RangeFactory.php index 9b1b2b8..8a98ae1 100644 --- a/database/factories/RangeFactory.php +++ b/database/factories/RangeFactory.php @@ -25,14 +25,14 @@ class RangeFactory extends Factory $label = $this->faker->unique()->words(rand(2, 4), true); return [ - 'label' => $label, - 'slug' => Str::slug($label), - 'seo_title' => $this->faker->words(8, true), - 'seo_description' => $this->faker->words(25, true), - 'color' => $this->faker->unique()->rgbCssColor(), - 'picture_alt' => $this->faker->unique()->words(rand(5, 6), true), - 'picture_title' => $this->faker->unique()->words(rand(2, 4), true), - 'picture_banner_alt' => $this->faker->unique()->words(rand(5, 6), true), + 'label' => $label, + 'slug' => Str::slug($label), + 'seo_title' => $this->faker->words(8, true), + 'seo_description' => $this->faker->words(25, true), + 'color' => $this->faker->unique()->rgbCssColor(), + 'picture_alt' => $this->faker->unique()->words(rand(5, 6), true), + 'picture_title' => $this->faker->unique()->words(rand(2, 4), true), + 'picture_banner_alt' => $this->faker->unique()->words(rand(5, 6), true), 'picture_banner_title' => $this->faker->unique()->words(rand(2, 4), true), ]; } diff --git a/database/factories/SlideFactory.php b/database/factories/SlideFactory.php index c70ddde..6101968 100644 --- a/database/factories/SlideFactory.php +++ b/database/factories/SlideFactory.php @@ -35,15 +35,15 @@ class SlideFactory extends Factory $picture_title = $this->faker->unique()->words(rand(2, 4), true); return [ - 'title' => $this->faker->unique()->words(rand(2, 4), true), - 'content' => $this->faker->unique()->words(rand(15, 25), true), - 'button_display' => $button_displayed, - 'button_text' => $button_text, - 'button_url' => $button_url, - 'button_targetblank' => $button_targetblank, - 'picture_alt' => $picture_alt, - 'picture_title' => $picture_title, - 'picture_thumbnail_alt' => $picture_alt, + 'title' => $this->faker->unique()->words(rand(2, 4), true), + 'content' => $this->faker->unique()->words(rand(15, 25), true), + 'button_display' => $button_displayed, + 'button_text' => $button_text, + 'button_url' => $button_url, + 'button_targetblank' => $button_targetblank, + 'picture_alt' => $picture_alt, + 'picture_title' => $picture_title, + 'picture_thumbnail_alt' => $picture_alt, 'picture_thumbnail_title' => $picture_title ]; } diff --git a/database/factories/SubrangeFactory.php b/database/factories/SubrangeFactory.php index 30874c8..d0f49b0 100644 --- a/database/factories/SubrangeFactory.php +++ b/database/factories/SubrangeFactory.php @@ -25,8 +25,8 @@ class SubrangeFactory extends Factory $label = $this->faker->unique()->words(rand(2, 4), true); return [ - 'label' => $label, - 'slug' => Str::slug($label), + 'label' => $label, + 'slug' => Str::slug($label), 'range_id' => rand(1, 5) ]; } diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index 8bc20ad..73b6d60 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -15,11 +15,11 @@ class UserFactory extends Factory public function definition() { return [ - 'name' => $this->faker->name(), - 'email' => $this->faker->unique()->safeEmail(), + 'name' => $this->faker->name(), + 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', - 'remember_token' => Str::random(10), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', + 'remember_token' => Str::random(10), ]; } diff --git a/database/migrations/2023_09_19_102909_alter_users_table.php b/database/migrations/2023_09_19_102909_alter_users_table.php new file mode 100644 index 0000000..b2a644d --- /dev/null +++ b/database/migrations/2023_09_19_102909_alter_users_table.php @@ -0,0 +1,55 @@ +string('lastname')->comment('Nom de l\'utilisateur')->after('id'); + $table->string('firstname')->comment('Prénom de l\'utilisateur')->after('lastname'); + }); + + foreach (User::all() as $user) { + $user->firstname = explode(' ', $user->name)[0]; + $user->lastname = explode(' ', $user->name)[1] ?? '.'; + $user->save(); + } + + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('name'); + }); + } + + /** + * Reverse the migrations. + * + * + * @return void + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->string('name')->comment('Nom de l\'utilisateur')->after('id'); + }); + + foreach (User::all() as $user) { + $user->name = $user->firstname . ' ' . $user->lastname; + $user->save(); + } + + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('firstname'); + $table->dropColumn('lastname'); + }); + } +}; diff --git a/package-lock.json b/package-lock.json index f1f0907..7a3124b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,13 @@ { "name": "srcs", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "dependencies": { - "@fancyapps/ui": "^4.0.31", - "swiper": "^8.4.2" - }, "devDependencies": { + "@babel/types": "^7.21.2", "@ckpack/vue-color": "^1.1.9", + "@fancyapps/ui": "^4.0.31", "@fortawesome/fontawesome-svg-core": "^6.1.2", "@fortawesome/free-brands-svg-icons": "^6.1.2", "@fortawesome/free-regular-svg-icons": "^6.1.2", @@ -17,46 +15,52 @@ "@fortawesome/vue-fontawesome": "^3.0.1", "@rushstack/eslint-patch": "^1.1.4", "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.3", + "@types/bootstrap": "^5.2.7", "@types/cropperjs": "^1.3.0", "@types/toastify-js": "^1.11.1", "@types/webpack-env": "^1.18.0", "@typescript-eslint/eslint-plugin": "^5.36.2", "@typescript-eslint/parser": "^5.36.2", + "@vitejs/plugin-legacy": "^4.0.1", + "@vitejs/plugin-vue": "^4.0.0", "@vue/eslint-config-typescript": "^11.0.0", - "axios": "^0.21", - "bootstrap": "^5.2.0", - "clean-webpack-plugin": "^4.0.0", + "axios": "^1.1.2", + "bootstrap": "^5.3.2", "cropperjs": "^1.5.12", - "eslint": "^8.23.0", + "eslint": "^8.35.0", + "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-vue": "^9.4.0", - "eslint-webpack-plugin": "^3.2.0", - "laravel-mix": "^6.0.6", - "laravel-mix-clean": "^0.1.0", - "laravel-mix-eslint": "^0.2.0", - "laravel-mix-polyfill": "^3.0.1", - "laravel-mix-stylelint": "^1.0.0", + "laravel-vite-plugin": "^0.7.2", "lodash": "^4.17.19", - "postcss": "^8.1.14", + "postcss": "^8.4.21", + "postcss-discard-comments": "^5.1.2", + "postcss-html": "^1.5.0", + "postcss-scss": "^4.0.6", "prettier": "^2.7.1", "print-js": "^1.6.0", "resolve-url-loader": "^5.0.0", - "sass": "^1.54.8", - "sass-loader": "^12.6.0", + "sass": "^1.58.3", "slugify": "^1.6.5", - "stylelint": "^14.11.0", + "stylelint": "^14.16.1", "stylelint-config-idiomatic-order": "^8.1.0", "stylelint-config-sass-guidelines": "^9.0.1", "stylelint-config-standard-scss": "^6.1.0", - "stylelint-webpack-plugin": "^3.3.0", - "sweetalert2": "^11.4.24", + "stylelint-scss": "^4.4.0", + "sweetalert2": "^11.4.8", + "swiper": "^8.4.2", "toastify-js": "^1.12.0", "ts-loader": "^9.3.1", - "typescript": "^4.8.2", + "typescript": "^4.9.5", "typescript-eslint": "^0.0.1-alpha.0", + "vite": "^4.0.0", + "vite-plugin-checker": "^0.5.6", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-stylelint": "^4.2.0", "vue": "^3.2.38", "vue-eslint-parser": "^9.1.0", - "vue-loader": "^16.8.3" + "vue-loader": "^16.8.3", + "vue-tsc": "^1.2.0", + "vue3-nestable": "^3.0.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -82,118 +86,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "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.10", + "@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==", - "dev": true, - "engines": { - "node": ">=0.8.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==", - "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/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.20.tgz", + "integrity": "sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.20", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.16", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.20", + "@babel/types": "^7.22.19", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", + "json5": "^2.2.3", "semver": "^6.3.1" }, "engines": { @@ -214,12 +147,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -241,25 +174,25 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -278,15 +211,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -310,9 +243,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -352,9 +285,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" @@ -386,40 +319,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.20.tgz", + "integrity": "sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -450,14 +383,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -467,13 +400,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -529,58 +462,58 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "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/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "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.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -588,81 +521,10 @@ "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.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -672,9 +534,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -687,14 +549,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -703,25 +565,6 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -985,9 +828,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -1035,9 +878,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1066,12 +909,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -1083,18 +926,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1105,15 +948,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", @@ -1131,9 +965,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1177,9 +1011,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1209,9 +1043,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1225,9 +1059,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1257,9 +1091,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1288,9 +1122,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1335,12 +1169,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1352,13 +1186,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", + "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.9", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5" }, @@ -1417,9 +1251,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1433,9 +1267,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1449,16 +1283,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1484,9 +1318,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1500,9 +1334,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1517,9 +1351,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1548,13 +1382,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1611,35 +1445,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/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/@babel/plugin-transform-shorthand-properties": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", @@ -1780,17 +1585,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.20.tgz", + "integrity": "sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/compat-data": "^7.22.20", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -1811,41 +1616,41 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-block-scoping": "^7.22.15", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-destructuring": "^7.22.15", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -1859,7 +1664,7 @@ "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.19", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", "babel-plugin-polyfill-regenerator": "^0.5.2", @@ -1903,9 +1708,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1914,34 +1719,40 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.20.tgz", + "integrity": "sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", + "@babel/parser": "^7.22.16", + "@babel/types": "^7.22.19", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1949,23 +1760,14 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "version": "7.22.19", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.19.tgz", + "integrity": "sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.19", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1988,16 +1790,6 @@ "vue": "^3.2.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/@csstools/selector-specificity": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", @@ -2015,21 +1807,364 @@ } }, "node_modules/@ctrl/tinycolor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz", - "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", "dev": true, "engines": { "node": ">=10" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10.0.0" + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2048,9 +2183,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", + "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2079,10 +2214,37 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2091,7 +2253,8 @@ "node_modules/@fancyapps/ui": { "version": "4.0.31", "resolved": "https://registry.npmjs.org/@fancyapps/ui/-/ui-4.0.31.tgz", - "integrity": "sha512-D7+PMIloxSOFJyY+lXcNlVDhmssOmDT6PT5fqQUIiws2hT7PH29r0EKZxERmACSQpm6qrFkP7rSguzXWvRJduQ==" + "integrity": "sha512-D7+PMIloxSOFJyY+lXcNlVDhmssOmDT6PT5fqQUIiws2hT7PH29r0EKZxERmACSQpm6qrFkP7rSguzXWvRJduQ==", + "dev": true }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.4.2", @@ -2166,9 +2329,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2235,6 +2398,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -2256,12 +2420,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2307,10 +2465,23 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/@rushstack/eslint-patch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", - "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.4.0.tgz", + "integrity": "sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==", "dev": true }, "node_modules/@sipec/vue3-tags-input": { @@ -2325,113 +2496,15 @@ "vue": "3.x" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/bootstrap": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.6.tgz", - "integrity": "sha512-BlAc3YATdasbHoxMoBWODrSF6qwQO/E9X8wVxCCSa6rWjnaZfpkr2N6pUMCY6jj2+wf0muUtLySbvU9etX6YqA==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.7.tgz", + "integrity": "sha512-vWs0HzobIB8Af2F0B1GXpaVLSVn1NWULDYgTIWp08Et/r2B3aAwwhFBeOs/rRFWJA38EZTXkWP3tepIjpQkpLg==", "dev": true, "dependencies": { "@popperjs/core": "^2.9.2" } }, - "node_modules/@types/clean-css": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.6.tgz", - "integrity": "sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, "node_modules/@types/cropperjs": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@types/cropperjs/-/cropperjs-1.3.0.tgz", @@ -2457,6 +2530,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, + "peer": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -2468,118 +2542,18 @@ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", "dev": true }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/imagemin": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.1.tgz", - "integrity": "sha512-DSpM//dRPzme7doePGkmR1uoquHi0h0ElaA5qFnxHECfFcB8z/jhMI8eqmxWNpHn9ZG18p4PC918sZLhR0cr5A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-svgo": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", - "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", - "dev": true, - "dependencies": { - "@types/imagemin": "*", - "@types/svgo": "^1" - } - }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -2588,10 +2562,11 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true + "version": "20.6.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", + "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==", + "dev": true, + "peer": true }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -2605,79 +2580,16 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/svgo": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", - "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", "dev": true }, "node_modules/@types/toastify-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.0.tgz", - "integrity": "sha512-fqpDHaKhFukN9KRm24bbH0wozvHmSwjvkaLjBUrWcSfSS4zysIwTYqNLG3XbSNhRlsTNRNLGS23tp/VhPwsfHQ==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.1.tgz", + "integrity": "sha512-9CTM+LKFmS0+Ii+RH55XPKcmNxCjLticj8kxeCxa7PnSVCZPQurb9XtKQtoMl/fv7WaqUpRezDcFuY8n92CtUg==", "dev": true }, "node_modules/@types/webpack-env": { @@ -2686,15 +2598,6 @@ "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==", "dev": true }, - "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", @@ -2883,6 +2786,71 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vitejs/plugin-legacy": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz", + "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "browserslist": "^4.21.9", + "core-js": "^3.31.1", + "magic-string": "^0.30.1", + "regenerator-runtime": "^0.13.11", + "systemjs": "^6.14.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "peerDependencies": { + "terser": "^5.4.0", + "vite": "^4.0.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz", + "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.1.tgz", + "integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.10.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.1.tgz", + "integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.1.tgz", + "integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.10.1" + } + }, "node_modules/@vue/compiler-core": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", @@ -2957,6 +2925,54 @@ } } }, + "node_modules/@vue/language-core": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.11.tgz", + "integrity": "sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.10.0", + "@volar/source-map": "~1.10.0", + "@vue/compiler-dom": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.0", + "muggle-string": "^0.3.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@vue/reactivity": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", @@ -3019,11 +3035,22 @@ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", "dev": true }, + "node_modules/@vue/typescript": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.11.tgz", + "integrity": "sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.10.0", + "@vue/language-core": "1.8.11" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" @@ -3033,25 +3060,29 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3062,13 +3093,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", @@ -3081,6 +3114,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, + "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -3090,6 +3124,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, + "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -3098,13 +3133,15 @@ "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", @@ -3121,6 +3158,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", @@ -3134,6 +3172,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-buffer": "1.11.6", @@ -3146,6 +3185,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", @@ -3160,71 +3200,25 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, + "peer": true, "dependencies": { "@webassemblyjs/ast": "1.11.6", "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } + "peer": true }, "node_modules/acorn": { "version": "8.10.0", @@ -3243,6 +3237,7 @@ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, + "peer": true, "peerDependencies": { "acorn": "^8" } @@ -3285,64 +3280,41 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "peer": true, "peerDependencies": { "ajv": "^6.9.1" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { @@ -3355,18 +3327,15 @@ } }, "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": "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": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/anymatch": { @@ -3388,11 +3357,39 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/array-union": { "version": "2.1.0", @@ -3403,13 +3400,84 @@ "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "peer": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/arrify": { @@ -3421,49 +3489,6 @@ "node": ">=0.10.0" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -3473,87 +3498,34 @@ "node": ">=8" } }, - "node_modules/autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", + "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/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "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": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, + "peer": true, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { @@ -3610,32 +3582,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -3654,87 +3600,6 @@ "node": ">=8" } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -3742,9 +3607,9 @@ "dev": true }, "node_modules/bootstrap": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.1.tgz", - "integrity": "sha512-jzwza3Yagduci2x0rr9MeFSORjcHpt0lRZukZPZQJT1Dth5qzV7XcgGqYzi39KGAVYR8QEDVoO0ubFKOxzMG+g==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", "dev": true, "funding": [ { @@ -3782,99 +3647,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/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" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { "version": "4.21.10", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", @@ -3907,49 +3679,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "engines": { - "node": ">= 0.8" - } + "peer": true }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, + "peer": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -3967,16 +3709,6 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -4003,22 +3735,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "version": "1.0.30001535", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz", + "integrity": "sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg==", "dev": true, "funding": [ { @@ -4036,28 +3756,17 @@ ] }, "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": "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": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "engines": { - "node": "*" + "node": ">=4" } }, "node_modules/chokidar": { @@ -4104,124 +3813,24 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, + "peer": true, "engines": { "node": ">=6.0" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", - "dev": true, - "dependencies": { - "del": "^4.1.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": ">=4.0.0 <6.0.0" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/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==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect.js": { - "version": "4.36.1", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", - "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", - "dev": true - }, "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/colord": { @@ -4230,92 +3839,24 @@ "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "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": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", - "dev": true, - "dependencies": { - "commander": "^2.9.0" - }, - "bin": { - "concat": "bin/concat" - }, - "engines": { - "node": ">=6" - } + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -4323,85 +3864,16 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, "node_modules/core-js": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", - "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.2.tgz", + "integrity": "sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==", "dev": true, "hasInstallScript": true, "funding": { @@ -4410,9 +3882,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "version": "3.32.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.2.tgz", + "integrity": "sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==", "dev": true, "dependencies": { "browserslist": "^4.21.10" @@ -4422,12 +3894,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -4444,53 +3910,10 @@ "node": ">=10" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/cropperjs": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.13.tgz", - "integrity": "sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.1.tgz", + "integrity": "sha512-F4wsi+XkDHCOMrHMYjrTEE4QBOrsHHN5/2VsVAaRq8P7E5z7xQpT75S+f/9WikmBEailas3+yo+6zPIomW+NOA==", "dev": true }, "node_modules/cross-spawn": { @@ -4507,49 +3930,6 @@ "node": ">= 8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, "node_modules/css-functions-list": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", @@ -4559,108 +3939,6 @@ "node": ">=12.22" } }, - "node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -4673,100 +3951,18 @@ "node": ">=4" } }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/csstype": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", "dev": true }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4824,134 +4020,48 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/des.js": { + "node_modules/define-data-property": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", + "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "peer": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=0.4.0" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4964,24 +4074,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4995,52 +4087,28 @@ } }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/dom7": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", + "dev": true, "dependencies": { "ssr-window": "^4.0.0" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -5054,12 +4122,12 @@ ] }, "node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1" + "domelementtype": "^2.3.0" }, "engines": { "node": ">= 4" @@ -5069,90 +4137,23 @@ } }, "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/domutils/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, "node_modules/electron-to-chromium": { - "version": "1.4.496", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", - "integrity": "sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "1.4.523", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", + "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==", "dev": true }, "node_modules/emoji-regex": { @@ -5170,15 +4171,6 @@ "node": ">= 4" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -5193,26 +4185,17 @@ } }, "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "engines": { + "node": ">=0.12" + }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -5222,11 +4205,146 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "peer": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true, + "peer": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "peer": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "peer": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } }, "node_modules/escalade": { "version": "3.1.1", @@ -5237,35 +4355,26 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, "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==", + "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": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -5309,6 +4418,133 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-import-resolver-alias": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", + "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", + "dev": true, + "engines": { + "node": ">= 4" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-vue": { "version": "9.17.0", "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", @@ -5355,28 +4591,65 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 12.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/eslint-scope": { @@ -5404,6 +4677,54 @@ "node": ">=4.0" } }, + "node_modules/eslint/node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -5487,141 +4808,16 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "peer": true, "engines": { "node": ">=0.8.x" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "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/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5686,18 +4882,6 @@ "reusify": "^1.0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5710,53 +4894,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5769,56 +4906,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5836,37 +4923,23 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", + "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.7", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/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": ">=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/follow-redirects": { @@ -5889,41 +4962,34 @@ } } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "engines": { - "node": ">= 0.6" + "peer": true, + "dependencies": { + "is-callable": "^1.1.3" } }, - "node_modules/fraction.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", - "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", + "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, - "engines": { - "node": "*" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 6" } }, "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==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -5931,15 +4997,9 @@ "universalify": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5947,9 +5007,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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, @@ -5966,6 +5026,35 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5975,20 +5064,12 @@ "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dev": true, + "peer": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -5999,16 +5080,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { @@ -6047,7 +5133,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/global-modules": { "version": "2.0.0", @@ -6088,18 +5175,28 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "peer": true, "dependencies": { - "type-fest": "^0.20.2" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { @@ -6128,6 +5225,19 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -6140,18 +5250,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -6173,13 +5271,36 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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": ">=8" + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { @@ -6187,6 +5308,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -6199,6 +5321,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4" }, @@ -6206,32 +5329,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/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" + "node": ">= 0.4" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hash-sum": { @@ -6240,16 +5351,6 @@ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -6259,17 +5360,6 @@ "he": "bin/he" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -6300,139 +5390,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", - "dev": true, - "dependencies": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/html-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", @@ -6446,153 +5403,23 @@ } }, "node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "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/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "dev": true, "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "url": "https://github.com/sponsors/fb55" } - ] + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } }, "node_modules/ignore": { "version": "5.2.4", @@ -6603,88 +5430,16 @@ "node": ">= 4" } }, - "node_modules/imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "dependencies": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imagemin/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/img-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", - "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", - "dev": true, - "dependencies": { - "loader-utils": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/img-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/img-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } + "node_modules/immutability-helper": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.1.1.tgz", + "integrity": "sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==", + "dev": true }, "node_modules/immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", "dev": true }, "node_modules/import-fresh": { @@ -6712,25 +5467,6 @@ "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -6771,22 +5507,34 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" } }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, - "engines": { - "node": ">= 10" + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { @@ -6795,6 +5543,19 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "peer": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -6807,11 +5568,35 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-core-module": { "version": "2.13.0", @@ -6825,19 +5610,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "bin": { - "is-docker": "cli.js" + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -6870,6 +5656,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6879,37 +5678,20 @@ "node": ">=0.12.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "peer": true, "dependencies": { - "is-path-inside": "^2.1.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd/node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.2" + "node": ">= 0.4" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { @@ -6939,35 +5721,103 @@ "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==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "peer": true, "dependencies": { - "is-docker": "^2.0.0" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "peer": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "peer": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "peer": true }, "node_modules/isexe": { "version": "2.0.0", @@ -6975,27 +5825,29 @@ "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { @@ -7003,6 +5855,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7043,6 +5896,12 @@ "node": ">=4" } }, + "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", @@ -7085,13 +5944,13 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "node_modules/keyv": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "json-buffer": "3.0.1" } }, "node_modules/kind-of": { @@ -7103,144 +5962,26 @@ "node": ">=0.10.0" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/known-css-properties": { "version": "0.26.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", "dev": true }, - "node_modules/laravel-mix": { - "version": "6.0.49", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", - "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.15.8", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "@babel/runtime": "^7.15.4", - "@types/babel__core": "^7.1.16", - "@types/clean-css": "^4.2.5", - "@types/imagemin-gifsicle": "^7.0.1", - "@types/imagemin-mozjpeg": "^8.0.1", - "@types/imagemin-optipng": "^5.2.1", - "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.4.0", - "babel-loader": "^8.2.3", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "clean-css": "^5.2.4", - "cli-table3": "^0.6.0", - "collect.js": "^4.28.5", - "commander": "^7.2.0", - "concat": "^1.0.3", - "css-loader": "^5.2.6", - "cssnano": "^5.0.8", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "glob": "^7.2.0", - "html-loader": "^1.3.2", - "imagemin": "^7.0.1", - "img-loader": "^4.0.0", - "lodash": "^4.17.21", - "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.6.2", - "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.1.0", - "postcss-loader": "^6.2.0", - "semver": "^7.3.5", - "strip-ansi": "^6.0.0", - "style-loader": "^2.0.0", - "terser": "^5.9.0", - "terser-webpack-plugin": "^5.2.4", - "vue-style-loader": "^4.1.3", - "webpack": "^5.60.0", - "webpack-cli": "^4.9.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.8.0", - "webpack-notifier": "^1.14.1", - "webpackbar": "^5.0.0-3", - "yargs": "^17.2.1" - }, - "bin": { - "laravel-mix": "bin/cli.js", - "mix": "bin/cli.js" - }, - "engines": { - "node": ">=12.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.15.8", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "postcss": "^8.3.11", - "webpack": "^5.60.0", - "webpack-cli": "^4.9.1" - } - }, - "node_modules/laravel-mix-clean": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", - "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", - "dev": true - }, - "node_modules/laravel-mix-eslint": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", - "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", - "dev": true, - "peerDependencies": { - "laravel-mix": ">=2.1.7" - } - }, - "node_modules/laravel-mix-polyfill": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", - "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", - "dev": true, - "dependencies": { - "core-js": "^2.6.9 || ^3.1.4", - "regenerator-runtime": "^0.13.2" - }, - "peerDependencies": { - "laravel-mix": "^6.0.0" - } - }, - "node_modules/laravel-mix-polyfill/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/laravel-mix-stylelint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", - "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", - "dev": true - }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "node_modules/laravel-vite-plugin": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.7.8.tgz", + "integrity": "sha512-HWYqpQYHR3kEQ1LsHX7gHJoNNf0bz5z5mDaHBLzS+PGLCTmYqlU5/SZyeEgObV7z7bC/cnStYcY9H1DI1D5Udg==", "dev": true, "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "vite-plugin-full-reload": "^1.0.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" } }, "node_modules/levn": { @@ -7256,15 +5997,6 @@ "node": ">= 0.8.0" } }, - "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, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -7276,6 +6008,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "peer": true, "engines": { "node": ">=6.11.5" } @@ -7321,39 +6054,24 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "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/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -7375,30 +6093,6 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/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/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -7427,55 +6121,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/meow": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", @@ -7502,29 +6147,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, "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 + "dev": true, + "peer": true }, "node_modules/merge2": { "version": "1.4.1", @@ -7535,15 +6163,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -7557,37 +6176,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -7609,15 +6197,6 @@ "node": ">= 0.6" } }, - "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/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -7627,57 +6206,6 @@ "node": ">=4" } }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -7695,6 +6223,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7719,18 +6248,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.6", @@ -7762,84 +6284,12 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", - "dev": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } + "peer": true }, "node_modules/node-releases": { "version": "2.0.13", @@ -7871,27 +6321,6 @@ "node": ">=0.10.0" } }, - "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": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -7916,49 +6345,92 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "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-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -7970,38 +6442,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/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -8019,12 +6459,6 @@ "node": ">= 0.8.0" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8055,40 +6489,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -8098,22 +6498,6 @@ "node": ">=6" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8126,19 +6510,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -8157,31 +6528,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "process": "^0.11.1", + "util": "^0.10.3" } }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8200,12 +6556,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -8221,12 +6571,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -8236,22 +6580,6 @@ "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8270,104 +6598,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "dev": true, "funding": [ { @@ -8392,53 +6626,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", @@ -8451,92 +6638,26 @@ "postcss": "^8.2.15" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/postcss-html": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz", + "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "htmlparser2": "^8.0.0", + "js-tokens": "^8.0.0", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" }, "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "node": "^12 || >=14" } }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } + "node_modules/postcss-html/node_modules/js-tokens": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz", + "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==", + "dev": true }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", @@ -8544,344 +6665,6 @@ "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -8905,9 +6688,9 @@ } }, "node_modules/postcss-scss": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.7.tgz", - "integrity": "sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.8.tgz", + "integrity": "sha512-Cr0X8Eu7xMhE96PJck6ses/uVVXDtE5ghUTKNUYgm8ozgP2TkgV3LWs3WgLV1xaSSLq8ZFiXaUrj0LVgG1fGEA==", "dev": true, "funding": [ { @@ -8927,7 +6710,7 @@ "node": ">=12.0" }, "peerDependencies": { - "postcss": "^8.4.19" + "postcss": "^8.4.29" } }, "node_modules/postcss-selector-parser": { @@ -8979,37 +6762,6 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -9040,15 +6792,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/print-js": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", @@ -9064,82 +6807,19 @@ "node": ">= 0.6.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "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/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { - "node": ">=0.4.x" + "node": ">=6" } }, "node_modules/queue-microtask": { @@ -9176,53 +6856,11 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "peer": true, "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -9352,36 +6990,6 @@ "node": ">=8" } }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9394,18 +7002,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -9426,9 +7022,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -9438,9 +7034,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/regenerator-transform": { @@ -9458,6 +7054,24 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -9496,33 +7110,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -9532,16 +7119,10 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -9555,27 +7136,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -9601,15 +7161,6 @@ "node": ">=12" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9621,25 +7172,34 @@ } }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "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/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/rollup": { + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", + "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==", "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/run-parallel": { @@ -9665,6 +7225,25 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9683,18 +7262,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "peer": true }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", + "version": "1.67.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.67.0.tgz", + "integrity": "sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -9708,115 +7297,25 @@ "node": ">=14.0.0" } }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "peer": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -9850,188 +7349,29 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, + "peer": true, "dependencies": { "randombytes": "^2.1.0" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, + "peer": true, "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/shebang-command": { @@ -10055,26 +7395,12 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, + "peer": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -10116,6 +7442,39 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/slugify": { "version": "1.6.6", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", @@ -10125,23 +7484,6 @@ "node": ">=8.0.0" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10165,6 +7507,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "peer": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -10202,109 +7545,12 @@ "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/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" - } - }, "node_modules/ssr-window": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==", "dev": true }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.2.tgz", - "integrity": "sha512-Cw6eJDX9AxEEL0g5pYj8Zx9KXtDf60rxwS2ze0HBanS0aKhj1sBlzcsmg+R0qYy8byFa854/yR2X5ZmBSClVmg==", - "dev": true - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "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": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10319,6 +7565,54 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10331,13 +7625,14 @@ "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==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/strip-indent": { @@ -10364,66 +7659,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/stylelint": { "version": "14.16.1", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", @@ -10647,30 +7888,6 @@ "stylelint": "^14.5.1 || ^15.0.0" } }, - "node_modules/stylelint-webpack-plugin": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-3.3.0.tgz", - "integrity": "sha512-F53bapIZ9zI16ero8IWm6TrUE6SSibZBphJE9b5rR2FxtvmGmm1YmS+a5xjQzn63+cv71GVSCu4byX66fBLpEw==", - "dev": true, - "dependencies": { - "globby": "^11.1.0", - "jest-worker": "^28.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylelint": "^13.0.0 || ^14.0.0", - "webpack": "^5.0.0" - } - }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -10687,15 +7904,15 @@ } }, "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": "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": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-hyperlinks": { @@ -10711,6 +7928,27 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -10729,31 +7967,10 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/sweetalert2": { - "version": "11.7.27", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.27.tgz", - "integrity": "sha512-QbRXGQn1sb7HEhzA/K2xtWIwQHh/qkSbb1w6jYcTql2xy17876lTREEt1D4X6Q0x2wHtfUjKJ+Cb8IVkRoq7DQ==", + "version": "11.7.28", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.28.tgz", + "integrity": "sha512-9895DVuYTDlV4Hx4IJablFKMdSqzwpy0PKycztbO4cXnOeVMmw55weOq4gcZAh3/tAyunCKjApFDrlSAcswwcA==", "dev": true, "funding": { "type": "individual", @@ -10764,6 +7981,7 @@ "version": "8.4.7", "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.4.7.tgz", "integrity": "sha512-VwO/KU3i9IV2Sf+W2NqyzwWob4yX9Qdedq6vBtS0rFqJ6Fa5iLUJwxQkuD4I38w0WDJwmFl8ojkdcRFPHWD+2g==", + "dev": true, "funding": [ { "type": "patreon", @@ -10783,6 +8001,12 @@ "node": ">= 4.7.0" } }, + "node_modules/systemjs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.14.2.tgz", + "integrity": "sha512-1TlOwvKWdXxAY9vba+huLu99zrQURDWA8pUTYsRIYDZYQbGyK+pyEP4h4dlySsqo7ozyJBmYD20F+iUHhAltEg==", + "dev": true + }, "node_modules/table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -10831,10 +8055,11 @@ } }, "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -10853,6 +8078,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", "dev": true, + "peer": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", @@ -10882,87 +8108,16 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "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/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", "dev": true }, "node_modules/to-fast-properties": { @@ -10992,15 +8147,6 @@ "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==", "dev": true }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -11029,10 +8175,106 @@ "webpack": "^5.0.0" } }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-loader/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/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/tsutils": { @@ -11050,18 +8292,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11075,9 +8305,9 @@ } }, "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==", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { "node": ">=10" @@ -11086,17 +8316,73 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, + "peer": true, "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { @@ -11118,6 +8404,22 @@ "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==", "dev": true }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -11167,15 +8469,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -11215,29 +8508,10 @@ "punycode": "^2.1.0" } }, - "node_modules/uri-js/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/url": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", - "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.0" - } - }, "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "dependencies": { "inherits": "2.0.3" @@ -11255,24 +8529,6 @@ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", @@ -11289,19 +8545,361 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite": { + "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 0.8" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "node_modules/vite-plugin-checker": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.6.tgz", + "integrity": "sha512-ftRyON0gORUHDxcDt2BErmsikKSkfvl1i2DoP6Jt2zDO9InfvM6tqO1RkXhSjkaXEhKPea6YOnhFaZxW3BzudQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-eslint": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", + "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "@types/eslint": "^8.4.5", + "rollup": "^2.77.2" + }, + "peerDependencies": { + "eslint": ">=7", + "vite": ">=2" + } + }, + "node_modules/vite-plugin-eslint/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", + "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + }, + "peerDependencies": { + "vite": "^2 || ^3 || ^4" + } + }, + "node_modules/vite-plugin-stylelint": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-stylelint/-/vite-plugin-stylelint-4.3.0.tgz", + "integrity": "sha512-S8BONq5X8TndOFt+My4lkeHxVZvkDQRL++TV0nvnuYgOU/CvDddPPOT4V6go+ETzWK0NEtXqCGFnpkmm8c8Xcg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "@types/stylelint": "^13.0.0", + "postcss": "^7.0.0 || ^8.0.0", + "rollup": "^2.0.0 || ^3.0.0", + "stylelint": "^13.0.0 || ^14.0.0 || ^15.0.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@types/stylelint": { + "optional": true + }, + "postcss": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/vite-plugin-stylelint/node_modules/@rollup/pluginutils": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.4.tgz", + "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==", + "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" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true, + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", "dev": true }, "node_modules/vue": { @@ -11380,46 +8978,112 @@ "webpack": "^4.1.0 || ^5.0.0-0" } }, - "node_modules/vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "node_modules/vue-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "node_modules/vue-style-loader/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, - "node_modules/vue-style-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/vue-style-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/vue-loader/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/vue-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.11.tgz", + "integrity": "sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==", + "dev": true, + "dependencies": { + "@vue/language-core": "1.8.11", + "@vue/typescript": "1.8.11", + "semver": "^7.3.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue3-nestable": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vue3-nestable/-/vue3-nestable-3.0.3.tgz", + "integrity": "sha512-1f2Y/eWZbH+QgGAwgnDKyU0Lp0O5+zRO1rmF9eJfB1rG6ZJb8KEcrEwzvpoOGkPC+Z3xDzUQeQCeFruDRBrrBA==", + "dev": true, + "dependencies": { + "immutability-helper": "^3.1.1", + "path": "^0.12.7", + "vue": "^3.2.31" } }, "node_modules/watchpack": { @@ -11427,6 +9091,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, + "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -11435,20 +9100,12 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/webpack": { "version": "5.88.2", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", "dev": true, + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.0", @@ -11491,259 +9148,16 @@ } } }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/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/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-notifier": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", - "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", - "dev": true, - "dependencies": { - "node-notifier": "^9.0.0", - "strip-ansi": "^6.0.0" - }, - "peerDependencies": { - "@types/webpack": ">4.41.31" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - } - } - }, "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "peer": true, "engines": { "node": ">=10.13.0" } }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11759,27 +9173,41 @@ "node": ">= 8" } }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "peer": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wrappy": { @@ -11801,27 +9229,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": 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", @@ -11831,24 +9238,6 @@ "node": ">=12" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -11864,24 +9253,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -11891,15 +9262,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -11912,8845 +9274,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@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, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", - "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.10", - "chalk": "^2.4.2" - }, - "dependencies": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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, - "requires": { - "color-name": "1.1.3" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", - "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.10", - "@babel/parser": "^7.22.10", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", - "dev": true, - "requires": { - "@babel/types": "^7.22.10", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.10" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", - "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" - } - }, - "@babel/helpers": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", - "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.10", - "@babel/types": "^7.22.10" - } - }, - "@babel/highlight": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", - "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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, - "requires": { - "color-name": "1.1.3" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", - "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-generator-functions": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", - "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", - "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", - "babel-plugin-polyfill-corejs2": "^0.4.5", - "babel-plugin-polyfill-corejs3": "^0.8.3", - "babel-plugin-polyfill-regenerator": "^0.5.2", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", - "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.14.0" - } - }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - }, - "@babel/traverse": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", - "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.10", - "@babel/types": "^7.22.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", - "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - } - }, - "@ckpack/vue-color": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.5.0.tgz", - "integrity": "sha512-dj1zXVyay2m4LdlLJCQSdIS2FYwUl77BZqyKmUXiehyqjCP0bGYnPcL38lrShzYUc2FdkYQX8ANZZjRahd4PQw==", - "dev": true, - "requires": { - "@ctrl/tinycolor": "^3.6.0", - "material-colors": "^1.2.6" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "requires": {} - }, - "@ctrl/tinycolor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz", - "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@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, - "requires": { - "eslint-visitor-keys": "^3.3.0" - } - }, - "@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "requires": { - "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" - } - }, - "@eslint/js": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", - "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", - "dev": true - }, - "@fancyapps/ui": { - "version": "4.0.31", - "resolved": "https://registry.npmjs.org/@fancyapps/ui/-/ui-4.0.31.tgz", - "integrity": "sha512-D7+PMIloxSOFJyY+lXcNlVDhmssOmDT6PT5fqQUIiws2hT7PH29r0EKZxERmACSQpm6qrFkP7rSguzXWvRJduQ==" - }, - "@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", - "dev": true - }, - "@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "dev": true, - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@fortawesome/free-brands-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.2.tgz", - "integrity": "sha512-LKOwJX0I7+mR/cvvf6qIiqcERbdnY+24zgpUSouySml+5w8B4BJOx8EhDR/FTKAu06W12fmUIcv6lzPSwYKGGg==", - "dev": true, - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@fortawesome/free-regular-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz", - "integrity": "sha512-0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==", - "dev": true, - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", - "dev": true, - "requires": { - "@fortawesome/fontawesome-common-types": "6.4.2" - } - }, - "@fortawesome/vue-fontawesome": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz", - "integrity": "sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==", - "dev": true, - "requires": {} - }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@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 - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "dev": true - }, - "@rushstack/eslint-patch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", - "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==", - "dev": true - }, - "@sipec/vue3-tags-input": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@sipec/vue3-tags-input/-/vue3-tags-input-3.0.4.tgz", - "integrity": "sha512-zE4OiFkWvlvvGT3FZQ9hRrvJW935VPW0fe4K03SxM5Q/UQZMqph763UHXTuyK1orWNQMTbDx9tKPLIMZTiDXLA==", - "dev": true, - "requires": { - "vue": "^3.0.0-beta.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/bootstrap": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.6.tgz", - "integrity": "sha512-BlAc3YATdasbHoxMoBWODrSF6qwQO/E9X8wVxCCSa6rWjnaZfpkr2N6pUMCY6jj2+wf0muUtLySbvU9etX6YqA==", - "dev": true, - "requires": { - "@popperjs/core": "^2.9.2" - } - }, - "@types/clean-css": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.6.tgz", - "integrity": "sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==", - "dev": true, - "requires": { - "@types/node": "*", - "source-map": "^0.6.0" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cropperjs": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/cropperjs/-/cropperjs-1.3.0.tgz", - "integrity": "sha512-U3a/z302duKpXUHfMneFjrWDDoq5n+nsJ/YeJHoTI9LXSBtSsqMUyxEJPIMAzfDawF5nuG5c9FN2gY//ZGl5PA==", - "dev": true, - "requires": { - "cropperjs": "*" - } - }, - "@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.1.tgz", - "integrity": "sha512-DSpM//dRPzme7doePGkmR1uoquHi0h0ElaA5qFnxHECfFcB8z/jhMI8eqmxWNpHn9ZG18p4PC918sZLhR0cr5A==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-svgo": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", - "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", - "dev": true, - "requires": { - "@types/imagemin": "*", - "@types/svgo": "^1" - } - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "20.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz", - "integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", - "dev": true, - "requires": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/svgo": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", - "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", - "dev": true - }, - "@types/toastify-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.0.tgz", - "integrity": "sha512-fqpDHaKhFukN9KRm24bbH0wozvHmSwjvkaLjBUrWcSfSS4zysIwTYqNLG3XbSNhRlsTNRNLGS23tp/VhPwsfHQ==", - "dev": true - }, - "@types/webpack-env": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz", - "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==", - "dev": true - }, - "@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "requires": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "requires": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/eslint-config-typescript": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", - "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", - "vue-eslint-parser": "^9.1.1" - } - }, - "@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "requires": { - "@vue/shared": "3.3.4" - } - }, - "@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "requires": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "requires": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "requires": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} - }, - "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, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.15", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz", - "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==", - "dev": true, - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001520", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", - "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", - "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "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 - }, - "bootstrap": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.1.tgz", - "integrity": "sha512-jzwza3Yagduci2x0rr9MeFSORjcHpt0lRZukZPZQJT1Dth5qzV7XcgGqYzi39KGAVYR8QEDVoO0ubFKOxzMG+g==", - "dev": true, - "requires": {} - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001522", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", - "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w==", - "dev": true, - "requires": { - "del": "^4.1.1" - } - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "collect.js": { - "version": "4.36.1", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.36.1.tgz", - "integrity": "sha512-jd97xWPKgHn6uvK31V6zcyPd40lUJd7gpYxbN2VOVxGWO4tyvS9Li4EpsFjXepGTo2tYcOTC4a8YsbQXMJ4XUw==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", - "dev": true, - "requires": { - "commander": "^2.9.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "core-js": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.32.1.tgz", - "integrity": "sha512-lqufgNn9NLnESg5mQeYsxQP5w7wrViSj0jr/kv6ECQiByzQkrn1MKvV0L3acttpDqfQrHLwr2KCMgX5b8X+lyQ==", - "dev": true - }, - "core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", - "dev": true, - "requires": { - "browserslist": "^4.21.10" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cropperjs": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.13.tgz", - "integrity": "sha512-by7jKAo73y5/Do0K6sxdTKHgndY0NMjG2bEdgeJxycbcmHuCiMXqw8sxy5C5Y5WTOTcDGmbT7Sr5CgKOXR06OA==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "dev": true, - "requires": {} - }, - "css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", - "dev": true - }, - "css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - } - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "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, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dom7": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/dom7/-/dom7-4.0.6.tgz", - "integrity": "sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==", - "requires": { - "ssr-window": "^4.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.496", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.496.tgz", - "integrity": "sha512-qeXC3Zbykq44RCrBa4kr8v/dWzYJA8rAwpyh9Qd+NKWoJfjG5vvJqy9XOJ9H4P/lqulZBCgUWAYi+FeK5AuJ8g==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "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 - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", - "dev": true - }, - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.47.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", - "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "^8.47.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "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" - }, - "dependencies": { - "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, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "eslint-plugin-vue": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", - "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", - "xml-name-validator": "^4.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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==", - "dev": true - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - } - }, - "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, - "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - } - }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "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, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "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 - }, - "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 - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "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, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true - }, - "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, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.1.tgz", - "integrity": "sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "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, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "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 - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "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" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "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" - } - }, - "globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "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 - }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "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 - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "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, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "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, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", - "dev": true, - "requires": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - } - } - }, - "html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - } - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "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 - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "requires": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "dependencies": { - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - } - } - }, - "img-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", - "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "immutable": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", - "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "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 - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - }, - "dependencies": { - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - } - } - }, - "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 - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "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 - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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 - }, - "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, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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 - }, - "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 - }, - "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 - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true - }, - "known-css-properties": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", - "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", - "dev": true - }, - "laravel-mix": { - "version": "6.0.49", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", - "integrity": "sha512-bBMFpFjp26XfijPvY5y9zGKud7VqlyOE0OWUcPo3vTBY5asw8LTjafAbee1dhfLz6PWNqDziz69CP78ELSpfKw==", - "dev": true, - "requires": { - "@babel/core": "^7.15.8", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "@babel/runtime": "^7.15.4", - "@types/babel__core": "^7.1.16", - "@types/clean-css": "^4.2.5", - "@types/imagemin-gifsicle": "^7.0.1", - "@types/imagemin-mozjpeg": "^8.0.1", - "@types/imagemin-optipng": "^5.2.1", - "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.4.0", - "babel-loader": "^8.2.3", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "clean-css": "^5.2.4", - "cli-table3": "^0.6.0", - "collect.js": "^4.28.5", - "commander": "^7.2.0", - "concat": "^1.0.3", - "css-loader": "^5.2.6", - "cssnano": "^5.0.8", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "glob": "^7.2.0", - "html-loader": "^1.3.2", - "imagemin": "^7.0.1", - "img-loader": "^4.0.0", - "lodash": "^4.17.21", - "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.6.2", - "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.1.0", - "postcss-loader": "^6.2.0", - "semver": "^7.3.5", - "strip-ansi": "^6.0.0", - "style-loader": "^2.0.0", - "terser": "^5.9.0", - "terser-webpack-plugin": "^5.2.4", - "vue-style-loader": "^4.1.3", - "webpack": "^5.60.0", - "webpack-cli": "^4.9.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.8.0", - "webpack-notifier": "^1.14.1", - "webpackbar": "^5.0.0-3", - "yargs": "^17.2.1" - } - }, - "laravel-mix-clean": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", - "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", - "dev": true - }, - "laravel-mix-eslint": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", - "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", - "dev": true, - "requires": {} - }, - "laravel-mix-polyfill": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", - "integrity": "sha512-05Oldnhek6jkg9JMl7Nf/qnkwuTOlwR7DLFWntfy98QOx5o/ipmnsayP9qVTxdLZNcBRuMz6Agt9fxZdO2AUJw==", - "dev": true, - "requires": { - "core-js": "^2.6.9 || ^3.1.4", - "regenerator-runtime": "^0.13.2" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - } - } - }, - "laravel-mix-stylelint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", - "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", - "dev": true - }, - "launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "requires": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "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, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "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 - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "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 - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "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 - }, - "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, - "requires": { - "mime-db": "1.52.0" - } - }, - "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 - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "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 - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "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 - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "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 - }, - "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 - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "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, - "requires": { - "path-key": "^3.0.0" - } - }, - "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, - "requires": { - "boolbase": "^1.0.0" - } - }, - "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 - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "requires": { - "@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" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "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, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "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, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "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, - "requires": { - "@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" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "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 - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true - }, - "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 - }, - "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 - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "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 - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "requires": {} - }, - "postcss-scss": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.7.tgz", - "integrity": "sha512-xPv2GseoyXPa58Nro7M73ZntttusuCmZdeOojUFR5PZDz2BR62vfYx1w9TyOnp1+nYFowgOMipsCBhxzVkAEPw==", - "dev": true, - "requires": {} - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sorting": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", - "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", - "dev": true, - "requires": { - "lodash": "^4.17.14", - "postcss": "^7.0.17" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "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, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "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 - }, - "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 - }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "dev": true - }, - "print-js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", - "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - } - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true - }, - "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 - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", - "dev": true, - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "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 - }, - "resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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 - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "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, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "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, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "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 - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "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 - }, - "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 - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "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 - }, - "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, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "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, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "ssr-window": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ssr-window/-/ssr-window-4.0.2.tgz", - "integrity": "sha512-ISv/Ch+ig7SOtw7G2+qkwfVASzazUnvlDTwypdLoPoySv+6MqlOV10VwPSE6EWkGjhW50lUmghPmpYZXMu/+AQ==" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "std-env": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.2.tgz", - "integrity": "sha512-Cw6eJDX9AxEEL0g5pYj8Zx9KXtDf60rxwS2ze0HBanS0aKhj1sBlzcsmg+R0qYy8byFa854/yR2X5ZmBSClVmg==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "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, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "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 - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "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 - }, - "style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylelint": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", - "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^7.1.0", - "css-functions-list": "^3.1.0", - "debug": "^4.3.4", - "fast-glob": "^3.2.12", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.1", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.26.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.19", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.3.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.2" - }, - "dependencies": { - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "stylelint-config-idiomatic-order": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-8.1.0.tgz", - "integrity": "sha512-iTPY6JjbkIdzy+21x3a1xi/tG33zKhLJb6lZl1xg6jZrXjgIYelnRZ5xVtbcEP9rElxZq/Zu1eGthfvI+ri+YQ==", - "dev": true, - "requires": { - "stylelint-order": "^3.1.1" - } - }, - "stylelint-config-recommended": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", - "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", - "dev": true, - "requires": {} - }, - "stylelint-config-recommended-scss": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-8.0.0.tgz", - "integrity": "sha512-BxjxEzRaZoQb7Iinc3p92GS6zRdRAkIuEu2ZFLTxJK2e1AIcCb5B5MXY9KOXdGTnYFZ+KKx6R4Fv9zU6CtMYPQ==", - "dev": true, - "requires": { - "postcss-scss": "^4.0.2", - "stylelint-config-recommended": "^9.0.0", - "stylelint-scss": "^4.0.0" - } - }, - "stylelint-config-sass-guidelines": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz", - "integrity": "sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA==", - "dev": true, - "requires": { - "postcss-scss": "^4.0.2", - "stylelint-order": "^5.0.0", - "stylelint-scss": "^4.0.0" - }, - "dependencies": { - "postcss-sorting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", - "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", - "dev": true, - "requires": {} - }, - "stylelint-order": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", - "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", - "dev": true, - "requires": { - "postcss": "^8.3.11", - "postcss-sorting": "^7.0.1" - } - } - } - }, - "stylelint-config-standard": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz", - "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==", - "dev": true, - "requires": { - "stylelint-config-recommended": "^9.0.0" - } - }, - "stylelint-config-standard-scss": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-6.1.0.tgz", - "integrity": "sha512-iZ2B5kQT2G3rUzx+437cEpdcnFOQkwnwqXuY8Z0QUwIHQVE8mnYChGAquyKFUKZRZ0pRnrciARlPaR1RBtPb0Q==", - "dev": true, - "requires": { - "stylelint-config-recommended-scss": "^8.0.0", - "stylelint-config-standard": "^29.0.0" - } - }, - "stylelint-order": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-3.1.1.tgz", - "integrity": "sha512-4gP/r8j/6JGZ/LL41b2sYtQqfwZl4VSqTp7WeIwI67v/OXNQ08dnn64BGXNwAUSgb2+YIvIOxQaMzqMyQMzoyQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "postcss": "^7.0.17", - "postcss-sorting": "^5.0.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "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, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } - } - }, - "stylelint-scss": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", - "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", - "dev": true, - "requires": { - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - } - }, - "stylelint-webpack-plugin": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-3.3.0.tgz", - "integrity": "sha512-F53bapIZ9zI16ero8IWm6TrUE6SSibZBphJE9b5rR2FxtvmGmm1YmS+a5xjQzn63+cv71GVSCu4byX66fBLpEw==", - "dev": true, - "requires": { - "globby": "^11.1.0", - "jest-worker": "^28.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - }, - "sweetalert2": { - "version": "11.7.27", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.27.tgz", - "integrity": "sha512-QbRXGQn1sb7HEhzA/K2xtWIwQHh/qkSbb1w6jYcTql2xy17876lTREEt1D4X6Q0x2wHtfUjKJ+Cb8IVkRoq7DQ==", - "dev": true - }, - "swiper": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/swiper/-/swiper-8.4.7.tgz", - "integrity": "sha512-VwO/KU3i9IV2Sf+W2NqyzwWob4yX9Qdedq6vBtS0rFqJ6Fa5iLUJwxQkuD4I38w0WDJwmFl8ojkdcRFPHWD+2g==", - "requires": { - "dom7": "^4.0.4", - "ssr-window": "^4.0.2" - } - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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 - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "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, - "requires": { - "is-number": "^7.0.0" - } - }, - "toastify-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", - "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "ts-loader": { - "version": "9.4.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", - "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - } - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "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, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "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 - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "typescript-eslint": { - "version": "0.0.1-alpha.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-0.0.1-alpha.0.tgz", - "integrity": "sha512-1hNKM37dAWML/2ltRXupOq2uqcdRQyDFphl+341NTPXFLLLiDhErXx8VtaSLh3xP7SyHZdcCgpt9boYYVb3fQg==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - } - } - }, - "url": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", - "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", - "dev": true, - "requires": { - "punycode": "^1.4.1", - "qs": "^6.11.0" - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "requires": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "vue-eslint-parser": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz", - "integrity": "sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "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, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "vue-loader": { - "version": "16.8.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", - "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - } - }, - "vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", - "dev": true, - "requires": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - }, - "dependencies": { - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - } - }, - "webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-notifier": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", - "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", - "dev": true, - "requires": { - "node-notifier": "^9.0.0", - "strip-ansi": "^6.0.0" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "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, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "requires": {} - }, - "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==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "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 - } } } diff --git a/package.json b/package.json index 6ed56a8..966f15d 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,20 @@ { "private": true, "scripts": { - "dev": "npm run development", - "development": "mix", - "watch": "mix watch", - "watch-poll": "mix watch -- --watch-options-poll=1000", - "hot": "mix watch --hot", - "prod": "npm run production", - "production": "mix --production", - "eslint": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources", - "eslint-ci": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources -f junit", - "stylelint": "npx stylelint '**/*.scss'", - "stylelint-ci": "npx stylelint '**/*.scss' -f json" + "prod": "vite build --mode production", + "dev": "NODE_ENV=development vite build -d --mode development", + "watch": "NODE_ENV=development vite build --mode development --watch", + "eslint": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources", + "eslint-fix": "node ./node_modules/.bin/eslint --fix --max-warnings 0 -c .eslintrc.json ./resources", + "eslint-ci": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources -f junit", + "stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss'", + "stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --fix --max-warnings 0 '**/resources/**/*.scss'", + "stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss' -f json" }, "devDependencies": { + "@babel/types": "^7.21.2", "@ckpack/vue-color": "^1.1.9", + "@fancyapps/ui": "^4.0.31", "@fortawesome/fontawesome-svg-core": "^6.1.2", "@fortawesome/free-brands-svg-icons": "^6.1.2", "@fortawesome/free-regular-svg-icons": "^6.1.2", @@ -22,49 +22,51 @@ "@fortawesome/vue-fontawesome": "^3.0.1", "@rushstack/eslint-patch": "^1.1.4", "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.3", + "@types/bootstrap": "^5.2.7", "@types/cropperjs": "^1.3.0", "@types/toastify-js": "^1.11.1", "@types/webpack-env": "^1.18.0", "@typescript-eslint/eslint-plugin": "^5.36.2", "@typescript-eslint/parser": "^5.36.2", + "@vitejs/plugin-legacy": "^4.0.1", + "@vitejs/plugin-vue": "^4.0.0", "@vue/eslint-config-typescript": "^11.0.0", - "axios": "^0.21", - "bootstrap": "^5.2.0", - "clean-webpack-plugin": "^4.0.0", + "axios": "^1.1.2", + "bootstrap": "^5.3.2", "cropperjs": "^1.5.12", - "eslint": "^8.23.0", + "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-vue": "^9.4.0", - "eslint-webpack-plugin": "^3.2.0", - "laravel-mix": "^6.0.6", - "laravel-mix-clean": "^0.1.0", - "laravel-mix-eslint": "^0.2.0", - "laravel-mix-polyfill": "^3.0.1", - "laravel-mix-stylelint": "^1.0.0", + "eslint": "^8.35.0", + "laravel-vite-plugin": "^0.7.2", "lodash": "^4.17.19", - "postcss": "^8.1.14", + "postcss-discard-comments": "^5.1.2", + "postcss-html": "^1.5.0", + "postcss-scss": "^4.0.6", + "postcss": "^8.4.21", "prettier": "^2.7.1", "print-js": "^1.6.0", "resolve-url-loader": "^5.0.0", - "sass": "^1.54.8", - "sass-loader": "^12.6.0", + "sass": "^1.58.3", "slugify": "^1.6.5", - "stylelint": "^14.11.0", "stylelint-config-idiomatic-order": "^8.1.0", "stylelint-config-sass-guidelines": "^9.0.1", "stylelint-config-standard-scss": "^6.1.0", - "stylelint-webpack-plugin": "^3.3.0", - "sweetalert2": "^11.4.24", + "stylelint-scss": "^4.4.0", + "stylelint": "^14.16.1", + "sweetalert2": "^11.4.8", + "swiper": "^8.4.2", "toastify-js": "^1.12.0", "ts-loader": "^9.3.1", - "typescript": "^4.8.2", "typescript-eslint": "^0.0.1-alpha.0", - "vue": "^3.2.38", + "typescript": "^4.9.5", + "vite-plugin-checker": "^0.5.6", + "vite-plugin-eslint": "^1.8.1", + "vite-plugin-stylelint": "^4.2.0", + "vite": "^4.0.0", "vue-eslint-parser": "^9.1.0", - "vue-loader": "^16.8.3" - }, - "dependencies": { - "@fancyapps/ui": "^4.0.31", - "swiper": "^8.4.2" + "vue-loader": "^16.8.3", + "vue-tsc": "^1.2.0", + "vue": "^3.2.38", + "vue3-nestable": "^3.0.3" } } diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 8db67cd..47a87df 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -2,19 +2,18 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Language Lines - |-------------------------------------------------------------------------- - | - | The following language lines are used during authentication for various - | messages that we need to display to the user. You are free to modify - | these language lines according to your application's requirements. - | - */ + /** + *-------------------------------------------------------------------------- + * Authentication Language Lines + *-------------------------------------------------------------------------- + * + * The following language lines are used during authentication for various + * messages that we need to display to the user. You are free to modify + * these language lines according to your application's requirements. + * + */ - 'failed' => 'These credentials do not match our records.', - 'password' => 'The provided password is incorrect.', + 'failed' => 'These credentials do not match our records.', + 'password' => 'The password provided is incorrect.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - ]; diff --git a/resources/lang/en/crud.php b/resources/lang/en/crud.php new file mode 100644 index 0000000..a92b60e --- /dev/null +++ b/resources/lang/en/crud.php @@ -0,0 +1,70 @@ + [ + 'list' => 'List', + 'view' => 'View', + 'create' => 'Create', + 'duplicate' => 'Duplicate', + 'update' => 'Update', + 'delete' => 'Delete', + 'save' => 'Save', + 'edit' => 'Edit', + ], + + 'helpers' => [ + 'list' => 'List', + 'list_all' => 'List all :model', + 'create_model' => 'Create :model', + 'view_model' => 'View :model', + 'update_model' => 'Update :model', + 'duplicate_model' => 'Duplicate :model', + 'delete_model' => 'Delete :model', + 'save_model' => 'Save :model', + 'edit_model' => 'Edit :model', + 'no_results' => 'No results for :models', + 'publish' => 'Publish', + 'unpublish' => 'Unpublish', + ], + + 'libs' => [ + 'toolbox' => [ + 'assertFieldIsUnique' => 'The :value for the :attribute field is already in use', + 'assertNoInternalBoUrls' => ':attribute : It is forbidden to paste back-office uri into this field', + 'assertNoInternalUrls' => ':attribute : It is forbidden to paste a url of :appname into this field', + ] + ], + + 'messages' => [ + 'has_been_created' => ':model has been created', + 'cannot_be_created' => ':model cannot be created', + 'has_been_updated' => ':model has been updated', + 'cannot_be_updated' => ':model cannot be updated', + 'has_been_deleted' => ':model has been deleted', + 'cannot_be_deleted' => ':model cannot be deleted', + 'order_changed' => 'The order has been changed!', + 'order_not_changed' => 'The order hasn\'t been changed!', + 'publish_status_saved' => 'Change of publication status successful!', + 'right' => 'You don\'t have the rights to access this part !' + ], + + 'pagination' => [ + "previous" => "Previous page", + "next" => "Next page", + "specific_page" => "Go to page n°:id", + 'paginate_list' => 'Number of elements per page', + ], + + 'other' => [ + 'up' => 'Change the order of appearance upwards', + 'down' => 'Change the order of appearance downwards', + 'no_model_found' => 'None :model found', + 'publish' => 'Published', + 'unpublish' => 'Unpublished', + 'sort_ascending' => 'Sort :name in ascending order', + 'sort_descending' => 'Sort :name in descending order', + 'sort_delete' => 'Delete sorting', + 'sort_arrow' => 'Here, the arrows are used to sort, not filter.', + 'right' => 'You don\'t have the rights', + ] +]; diff --git a/resources/lang/en/enum.php b/resources/lang/en/enum.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/resources/lang/en/enum.php @@ -0,0 +1,3 @@ + [ - 'publish' => 'Published', - 'unpublish' => 'Unpublished', - ] -]; diff --git a/resources/lang/en/models.php b/resources/lang/en/models.php index 743b769..58c8613 100644 --- a/resources/lang/en/models.php +++ b/resources/lang/en/models.php @@ -2,15 +2,15 @@ return [ 'classes' => [ - 'home' => 'Home', - 'news' => 'News', + 'home' => 'Home', + 'news' => 'News', 'newscategories' => 'News categories', - 'ranges' => 'Ranges', - 'recipes' => 'Recipes', - 'slides' => 'Slides', - 'tags' => 'Tags', - 'tips' => 'Tips', - 'vips' => 'VIP Products', - 'products' => 'Products' + 'ranges' => 'Ranges', + 'recipes' => 'Recipes', + 'slides' => 'Slides', + 'tags' => 'Tags', + 'tips' => 'Tips', + 'vips' => 'VIP Products', + 'products' => 'Products' ] ]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php deleted file mode 100644 index b9c8c5e..0000000 --- a/resources/lang/en/pagination.php +++ /dev/null @@ -1,19 +0,0 @@ - '« Previous', - 'next' => 'Next »', - -]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php deleted file mode 100644 index c93837e..0000000 --- a/resources/lang/en/passwords.php +++ /dev/null @@ -1,22 +0,0 @@ - 'Your password has been reset!', - 'sent' => 'We have emailed your password reset link!', - 'throttled' => 'Please wait before retrying.', - 'token' => 'This password reset token is invalid.', - 'user' => "We can't find a user with that email address.", - -]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index bf95fce..243ff14 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -1,163 +1,129 @@ 'The :attribute must be accepted.', - 'accepted_if' => 'The :attribute must be accepted when :other is :value.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute must only contain letters.', - 'alpha_dash' => 'The :attribute must only contain letters, numbers, dashes and underscores.', - 'alpha_num' => 'The :attribute must only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', + "accepted" => "The :attribute must be accepted.", + "accepted_if" => "The :attribute must be accepted when :other is :value.", + "active_url" => "The :attribute is not a valid URL.", + "after" => "The :attribute must be a date after :date.", + "after_or_equal" => "The :attribute must be a date after or equal to :date.", + "alpha" => "The :attribute must only contain letters.", + "alpha_dash" => "The :attribute must only contain letters, numbers, dashes and underscores.", + "alpha_num" => "The :attribute must only contain letters and numbers.", + "array" => "The :attribute must be an array.", + "before" => "The :attribute must be a date before :date.", + "before_or_equal" => "The :attribute must be a date before or equal to :date.", + "between" => [ + "numeric" => "The :attribute must be between :min and :max.", + "file" => "The :attribute must be between :min and :max kilobytes.", + "string" => "The :attribute must be between :min and :max characters.", + "array" => "The :attribute must have between :min and :max items.", ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'current_password' => 'The password is incorrect.', - 'date' => 'The :attribute is not a valid date.', - 'date_equals' => 'The :attribute must be a date equal to :date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'declined' => 'The :attribute must be declined.', - 'declined_if' => 'The :attribute must be declined when :other is :value.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values.', - 'enum' => 'The selected :attribute is invalid.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field must have a value.', - 'gt' => [ - 'numeric' => 'The :attribute must be greater than :value.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'string' => 'The :attribute must be greater than :value characters.', - 'array' => 'The :attribute must have more than :value items.', + "boolean" => "The :attribute field must be true or false.", + "confirmed" => "The :attribute confirmation does not match.", + "current_password" => "The password is incorrect.", + "date" => "The :attribute is not a valid date.", + "date_equals" => "The :attribute must be a date equal to :date.", + "date_format" => "The :attribute does not match the format :format.", + 'declined' => 'The :attribute field must be declined.', + 'declined_if' => 'The :attribute field must be declined when :other has the value :value.', + "different" => "The :attribute and :other must be different.", + "digits" => "The :attribute must be :digits digits.", + "digits_between" => "The :attribute must be between :min and :max digits.", + "dimensions" => "The :attribute has invalid image dimensions.", + "distinct" => "The :attribute field has a duplicate value.", + "email" => "The :attribute must be a valid email address.", + "ends_with" => "The :attribute must end with one of the following: :values.", + "exists" => "The selected :attribute is invalid.", + 'enum' => 'The :attribute field selected is invalid.', + "file" => "The :attribute must be a file.", + "filled" => "The :attribute field must have a value.", + "gt" => [ + "numeric" => "The :attribute must be greater than :value.", + "file" => "The :attribute must be greater than :value kilobytes.", + "string" => "The :attribute must be greater than :value characters.", + "array" => "The :attribute must have more than :value items.", ], - 'gte' => [ - 'numeric' => 'The :attribute must be greater than or equal to :value.', - 'file' => 'The :attribute must be greater than or equal to :value kilobytes.', - 'string' => 'The :attribute must be greater than or equal to :value characters.', - 'array' => 'The :attribute must have :value items or more.', + "gte" => [ + "numeric" => "The :attribute must be greater than or equal to :value.", + "file" => "The :attribute must be greater than or equal to :value kilobytes.", + "string" => "The :attribute must be greater than or equal to :value characters.", + "array" => "The :attribute must have :value items or more.", ], - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'lt' => [ - 'numeric' => 'The :attribute must be less than :value.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'string' => 'The :attribute must be less than :value characters.', - 'array' => 'The :attribute must have less than :value items.', + "image" => "The :attribute must be an image.", + "in" => "The selected :attribute is invalid.", + "in_array" => "The :attribute field does not exist in :other.", + "integer" => "The :attribute must be an integer.", + "ip" => "The :attribute must be a valid IP address.", + "ipv4" => "The :attribute must be a valid IPv4 address.", + "ipv6" => "The :attribute must be a valid IPv6 address.", + "json" => "The :attribute must be a valid JSON string.", + "lt" => [ + "numeric" => "The :attribute must be less than :value.", + "file" => "The :attribute must be less than :value kilobytes.", + "string" => "The :attribute must be less than :value characters.", + "array" => "The :attribute must have less than :value items.", ], - 'lte' => [ - 'numeric' => 'The :attribute must be less than or equal to :value.', - 'file' => 'The :attribute must be less than or equal to :value kilobytes.', - 'string' => 'The :attribute must be less than or equal to :value characters.', - 'array' => 'The :attribute must not have more than :value items.', + "lte" => [ + "numeric" => "The :attribute must be less than or equal to :value.", + "file" => "The :attribute must be less than or equal to :value kilobytes.", + "string" => "The :attribute must be less than or equal to :value characters.", + "array" => "The :attribute must not have more than :value items.", ], - 'mac_address' => 'The :attribute must be a valid MAC address.', - 'max' => [ - 'numeric' => 'The :attribute must not be greater than :max.', - 'file' => 'The :attribute must not be greater than :max kilobytes.', - 'string' => 'The :attribute must not be greater than :max characters.', - 'array' => 'The :attribute must not have more than :max items.', + 'mac_address' => 'The :attribute field must be a valid MAC address.', + "max" => [ + "numeric" => "The :attribute must not be greater than :max.", + "file" => "The :attribute must not be greater than :max kilobytes.", + "string" => "The :attribute must not be greater than :max characters.", + "array" => "The :attribute must not have more than :max items.", ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', + "mimes" => "The :attribute must be a file of type: :values.", + "mimetypes" => "The :attribute must be a file of type: :values.", + "min" => [ + "numeric" => "The :attribute must be at least :min.", + "file" => "The :attribute must be at least :min kilobytes.", + "string" => "The :attribute must be at least :min characters.", + "array" => "The :attribute must have at least :min items.", ], - 'multiple_of' => 'The :attribute must be a multiple of :value.', - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute format is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'password' => 'The password is incorrect.', - 'present' => 'The :attribute field must be present.', - 'prohibited' => 'The :attribute field is prohibited.', - 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', - 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', - 'prohibits' => 'The :attribute field prohibits :other from being present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values are present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', + "multiple_of" => "The :attribute must be a multiple of :value.", + "not_in" => "The selected :attribute is invalid.", + "not_regex" => "The :attribute format is invalid.", + "numeric" => "The :attribute must be a number.", + "password" => "The password is incorrect.", + "present" => "The :attribute field must be present.", + 'prohibited' => 'The :attribute field is forbidden.', + 'prohibited_if' => 'The :attribute field is forbidden when :other has the value :value.', + 'prohibited_unless' => 'The :attribute field is forbidden unless :other is one of the :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + "regex" => "The :attribute format is invalid.", + "required" => "The :attribute field is required.", + 'required_array_keys' => 'The :attribute field must contain entries for :values.', + "required_if" => "The :attribute field is required when :other is :value.", + "required_unless" => "The :attribute field is required unless :other is in :values.", + "required_with" => "The :attribute field is required when :values is present.", + "required_with_all" => "The :attribute field is required when :values are present.", + "required_without" => "The :attribute field is required when :values is not present.", + "required_without_all" => "The :attribute field is required when none of :values are present.", + "same" => "The :attribute and :other must match.", + "size" => [ + "numeric" => "The :attribute must be :size.", + "file" => "The :attribute must be :size kilobytes.", + "string" => "The :attribute must be :size characters.", + "array" => "The :attribute must contain :size items.", ], - 'starts_with' => 'The :attribute must start with one of the following: :values.', - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid timezone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute must be a valid URL.', - 'uuid' => 'The :attribute must be a valid UUID.', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', - ], + "starts_with" => "The :attribute must start with one of the following: :values.", + "string" => "The :attribute must be a string.", + "timezone" => "The :attribute must be a valid timezone.", + "unique" => "The :attribute has already been taken.", + "uploaded" => "The :attribute failed to upload.", + "url" => "The :attribute must be a valid URL.", + "uuid" => "The :attribute must be a valid UUID.", + "custom" => [], + 'attributes' => [ + 'firstname' => 'Firstname', + 'lastname' => 'Lastname', + 'email' => 'E-mail', + 'publication' => 'Publication', + 'updated_at' => 'Updated_at', + 'order' => 'Order', ], - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap our attribute placeholder - | with something more reader friendly such as "E-Mail Address" instead - | of "email". This simply helps us make our message more expressive. - | - */ - - 'attributes' => [], - ]; diff --git a/resources/lang/en/vue.php b/resources/lang/en/vue.php new file mode 100644 index 0000000..b4376aa --- /dev/null +++ b/resources/lang/en/vue.php @@ -0,0 +1,30 @@ + [ + 'choose_a_file' => 'Choose a file', + 'change_source_picture' => 'Edit Source Image', + 'view_source_picture' => 'View image', + 'resize_source_picture' => 'Resize image', + 'resized_source_picture' => 'Image resized', + 'preview_picture' => 'Image preview', + 'change_picture_before_import' => 'Image modification before import', + 'close_window' => 'Close the window', + 'close_and_validate' => 'Validate the content and close the window', + 'close_window_without_validation' => 'Close the window without validating the content', + 'zoom_in' => 'Zoom in', + 'zoom_out' => 'Zoom out', + 'move_left' => 'Move left', + 'move_right' => 'Move right', + 'move_up' => 'Move up', + 'move_down' => 'Move down', + 'mirror_horizontal' => 'Horizontal mirror', + 'mirror_vertical' => 'Vertical mirror', + 'rotation' => 'Rotation', + 'rotate_rewind' => 'Counter-clockwise rotation', + 'rotate' => 'Clockwise rotation', + 'degres' => ':deg egrees', + 'validate' => 'Validate', + 'preview' => 'Preview', + ] +]; diff --git a/resources/lang/fr/auth.php b/resources/lang/fr/auth.php index f3a40ee..ef7a11e 100644 --- a/resources/lang/fr/auth.php +++ b/resources/lang/fr/auth.php @@ -1,19 +1,18 @@ 'Ces identifiants ne correspondent pas à nos enregistrements.', + 'failed' => 'Ces identifiants ne correspondent pas à nos enregistrements', 'password' => 'Le mot de passe fourni est incorrect.', 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.', ]; diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php new file mode 100644 index 0000000..dcfa399 --- /dev/null +++ b/resources/lang/fr/crud.php @@ -0,0 +1,70 @@ + [ + 'list' => 'Liste', + 'view' => 'Voir', + 'create' => 'Créer', + 'duplicate' => 'Dupliquer', + 'update' => 'Éditer', + 'delete' => 'Supprimer', + 'save' => 'Sauvegarder', + 'edit' => 'Mettre à jour', + ], + + 'helpers' => [ + 'list' => 'Liste', + 'list_all' => 'Lister tous les :model', + 'create_model' => 'Créer :model', + 'view_model' => 'Voir :model', + 'update_model' => 'Éditer :model', + 'duplicate_model' => 'Dupliquer :model', + 'delete_model' => 'Supprimer :model', + 'save_model' => 'Sauvegarder :model', + 'edit_model' => 'Mettre à jour :model', + 'no_results' => 'Aucun résultat pour :model', + 'publish' => 'Publié', + 'unpublish' => 'Dépublié', + ], + + 'libs' => [ + 'toolbox' => [ + 'assertFieldIsUnique' => 'La :valeur du champ :attribut est déjà utilisée', + 'assertNoInternalBoUrls' => ':attribute : Il est interdit de coller l\'uri de back-office dans ce champ', + 'assertNoInternalUrls' => ':attribute : Il est interdit de coller une url de :appname dans ce champ.', + ] + ], + + 'messages' => [ + 'has_been_created' => ':model a été créé', + 'cannot_be_created' => ':model ne peut être créé', + 'has_been_updated' => ':model a été mis à jour', + 'cannot_be_updated' => ':model ne peut être mis à jour', + 'has_been_deleted' => ':model a été supprimé', + 'cannot_be_deleted' => ':model ne peut être supprimé', + 'order_changed' => 'L\'ordre a été changé !', + 'order_not_changed' => 'L\'ordre n\'a pas été changé !', + 'publish_status_saved' => 'Changement de l\'état de publication réussit !', + 'right' => 'Vous n\'avez pas les droits pour accéder à cette partie !' + ], + + 'pagination' => [ + "previous" => "Page précédente", + "next" => "Page suivante", + "specific_page" => "Accéder à la page n°:id", + 'paginate_list' => 'Nombre d\'éléments par page', + ], + + 'other' => [ + 'up' => 'Modifier l\'ordre d\'apparition vers le haut', + 'down' => 'Modifier l\'ordre d\'apparition vers le bas', + 'no_model_found' => 'Aucun :model trouvés', + 'publish' => 'Publié', + 'unpublish' => 'Dépublié', + 'sort_ascending' => 'Trier :name dans l\'ordre croissant', + 'sort_descending' => 'Trier :name dans l\'ordre décroissant', + 'sort_delete' => 'Supprimer le tri', + 'sort_arrow' => 'Ici, les flèches sont utilisées pour trier et non pour filtrer', + 'right' => 'Vous n\'avez pas les droits', + ] +]; diff --git a/resources/lang/fr/enum.php b/resources/lang/fr/enum.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/resources/lang/fr/enum.php @@ -0,0 +1,3 @@ + [ - 'publish' => 'Publié', - 'unpublish' => 'Non publié', - ] -]; diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php index 1ed0a6c..13e84ba 100644 --- a/resources/lang/fr/models.php +++ b/resources/lang/fr/models.php @@ -2,15 +2,16 @@ return [ 'classes' => [ - 'home' => 'Accueil', - 'news' => 'Actualités', + 'home' => 'Accueil', + 'news' => 'Actualités', 'newscategories' => 'Catégories d\'actualités', - 'ranges' => 'Gammes', - 'recipes' => 'Recettes', - 'slides' => 'Slides', - 'tags' => 'Etiquettes', - 'tips' => 'Astuces', - 'vips' => 'Produits VIP', - 'products' => 'Produits' + 'ranges' => 'Gammes', + 'subranges' => 'Sous-gammes', + 'recipes' => 'Recettes', + 'slides' => 'Slides', + 'tags' => 'Étiquettes', + 'tips' => 'Astuces', + 'vips' => 'Produit VIP|Produits VIP', + 'products' => 'Produits' ] ]; diff --git a/resources/lang/fr/pagination.php b/resources/lang/fr/pagination.php deleted file mode 100644 index 826749e..0000000 --- a/resources/lang/fr/pagination.php +++ /dev/null @@ -1,18 +0,0 @@ - 'Suivant »', - 'previous' => '« Précédent', -]; diff --git a/resources/lang/fr/passwords.php b/resources/lang/fr/passwords.php deleted file mode 100644 index 0bfc2e6..0000000 --- a/resources/lang/fr/passwords.php +++ /dev/null @@ -1,21 +0,0 @@ - 'Votre mot de passe a été réinitialisé !', - 'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !', - 'throttled' => 'Veuillez patienter avant de réessayer.', - 'token' => 'Ce jeton de réinitialisation du mot de passe n\'est pas valide.', - 'user' => 'Aucun utilisateur n\'a été trouvé avec cette adresse email.', -]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php index 574e7ad..d30e4b8 100644 --- a/resources/lang/fr/validation.php +++ b/resources/lang/fr/validation.php @@ -1,18 +1,6 @@ 'Le champ :attribute doit être accepté.', 'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.', 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', @@ -129,26 +117,72 @@ return [ 'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.', 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', 'uuid' => 'Le champ :attribute doit être un UUID valide', - 'custom' => [], - 'phone' => 'Le champ :attribute n\'est pas un numéro de téléphone valide.', - 'color' => ':attribute doit être un code couleur valide (hexadecimal, RGB, RGBA ou un nom de couleur CSS)', - 'color_hex' => ':attribute doit être un code couleur hexadecimal valide', - 'color_rgb' => ':attribute doit être un code couleur RGB valide', - 'color_rgba' => ':attribute doit être un code couleur RGBA valide', - 'color_name' => ':attribute doit être un nom de couleur CSS valide', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'postal_code' => - 'Le champ :attribute accepte les codes postaux des pays suivants :countries comme par exemple :examples.', - + 'custom' => [ + 'text_warning' => 'Relisez votre contenu avant de le publier (minimum :number caractères).', + 'select_entity' => 'Sélectionnez :entity dans la liste déroulante.', + 'color' => 'Sélectionnez :entity parmis les couleurs existantes.', + 'dimensions_must_be' => 'Doit être :widthpx (largeur) par :heightpx (hauteur).', + 'image_alt' => 'La description de l\'image doit être adaptée aux moteurs de recherche et + aux non-voyants (5 à 6 mots, minimum 3 caractères).', + 'image_title' => + 'Utile pour les utilisateurs, affiché en passant la souris sur l\'image + (minimum 3 caractères).', + 'seo_title_helper' => 'Doit décrire précisément la page, recommandation pour un positionnement + optimal dans les moteurs de recherche (balise ).', + 'seo_description_helper' => 'Doit décrire précisément le contenu de la page (balise <meta> description).', + 'event_text_helper' => 'Doit décrire l\'évènement.', + 'slider_pictures' => 'Les images du slider doivent être de :widthpx (largeur) par :heightpx (hauteur), + (minimum :min et maximum :max images sont autorisées).', + 'list_items' => 'Doit décrire la valeur du :field (minimum :min caractères, + :lineMin à :lineMax lignes).', + ], + 'attributes' => [ + 'advantages' => 'Avantages', + 'associated_news' => 'Actualités associées', + 'associated_products' => 'Produits associés', + 'attribute_alt' => 'Attribut alt', + 'attribute_title' => 'Attribut title', + 'button' => 'Bouton', + 'caliber' => 'Calibre', + 'categories' => 'Catégorie(s)', + 'color' => 'Couleur', + 'content' => 'Contenu', + 'content_bloc' => 'Corps du bloc', + 'cooking_time' => 'Temps de cuisson', + 'created_at' => 'Créé le', + 'declare_event' => 'Déclarer un évènement', + 'description' => 'Description', + 'difficulty' => 'Difficulté', + 'event_end' => 'Date de fin de l\'évènement', + 'event_start' => 'Date de début de l\'évènement', + 'event' => 'Évènement', + 'general_informations' => 'Informations générales', + 'high_point' => 'Point fort', + 'id' => 'Id', + 'ingredients' => 'Ingrédients', + 'label' => 'Libellé', + 'link' => 'Lien', + 'nutritionnal_values' => 'Valeurs nutritionnelles', + 'order' => 'Ordre', + 'packaging' => 'Conditionnement', + 'page' => 'Espèce', + 'picture_banner' => 'Bannière', + 'picture_thumbnail_sm' => 'Petite vignette', + 'picture_thumbnail' => 'Vignette', + 'picture' => 'Image', + 'preparation_time' => 'Temps de préparation', + 'preparation' => 'Préparation', + 'seo_description' => 'Description SEO', + 'seo_title' => 'Titre SEO', + 'seo' => 'Contenu SEO', + 'species' => 'Espèce', + 'status' => 'État de publication', + 'subtitle' => 'Sous-titre', + 'title' => 'Titre', + 'updated_at' => 'Mis à jour le', + 'youtube_video' => 'Vidéo Youtube', + 'guests_nb' => 'Nombre de convives', + 'advice' => 'Conseil', + 'preparation' => 'Préparation', + ], ]; diff --git a/resources/lang/fr/vue.php b/resources/lang/fr/vue.php new file mode 100644 index 0000000..e61b679 --- /dev/null +++ b/resources/lang/fr/vue.php @@ -0,0 +1,30 @@ +<?php + +return [ + 'ImageInputComponent' => [ + 'choose_a_file' => 'Choisir un fichier', + 'change_source_picture' => 'Modifier l\'image source', + 'view_source_picture' => 'Voir l\'image', + 'resize_source_picture' => 'Redimensionner l\'image', + 'resized_source_picture' => 'Image redimensionnée', + 'preview_picture' => 'Aperçu de l\'image', + 'change_picture_before_import' => 'Modification de l\'image avant l\'importation', + 'close_window' => 'Fermer la fenêtre', + 'close_and_validate' => 'Valider le contenu et fermer la fenêtre', + 'close_window_without_validation' => 'Fermer la fenêtre sans valider le contenu', + 'zoom_in' => 'Zoom avant', + 'zoom_out' => 'Zoom arrière', + 'move_left' => 'Déplacer vers la gauche', + 'move_right' => 'Déplacer vers la droite', + 'move_up' => 'Déplacer en vers le haut', + 'move_down' => 'Déplacer en vers le bas', + 'mirror_horizontal' => 'Miroir horizontal', + 'mirror_vertical' => 'Miroir vertical', + 'rotation' => 'Rotation', + 'rotate_rewind' => 'Rotation dans le sens inverse des aiguilles d\'une montre', + 'rotate' => 'Rotation dans le sens des aiguilles d\'une montre', + 'degres' => ':deg degrés', + 'validate' => 'Valider', + 'preview' => 'Prévisualisation', + ] +]; diff --git a/resources/sass/_bootstrap.scss b/resources/sass/_bootstrap.scss deleted file mode 100644 index 5354c82..0000000 --- a/resources/sass/_bootstrap.scss +++ /dev/null @@ -1,38 +0,0 @@ -// 3. Include remainder of required parts. -@import "~bootstrap/scss/variables"; -@import "~bootstrap/scss/variables-dark"; -@import "~bootstrap/scss/maps"; -@import "~bootstrap/scss/mixins"; -@import "~bootstrap/scss/root"; - -// 4. Optionally include any other parts as needed. -@import "~bootstrap/scss/utilities"; - -// Override bootstrap utilities -@import "~bootstrap/scss/reboot"; -@import "~bootstrap/scss/type"; -@import "~bootstrap/scss/images"; -@import "~bootstrap/scss/containers"; -@import "~bootstrap/scss/grid"; -@import "~bootstrap/scss/helpers"; -@import "~bootstrap/scss/alert"; -@import "~bootstrap/scss/buttons"; -@import "~bootstrap/scss/button-group"; -@import "~bootstrap/scss/forms"; -@import "~bootstrap/scss/nav"; -@import "~bootstrap/scss/navbar"; -@import "~bootstrap/scss/list-group"; -@import "~bootstrap/scss/transitions"; -@import "~bootstrap/scss/carousel"; -@import "~bootstrap/scss/dropdown"; -@import "~bootstrap/scss/accordion"; -@import "~bootstrap/scss/tables"; -@import "~bootstrap/scss/tooltip"; -@import "~bootstrap/scss/card"; -@import "~bootstrap/scss/modal"; -@import "~bootstrap/scss/close"; -@import "~bootstrap/scss/pagination"; -@import "~bootstrap/scss/breadcrumb"; - -// 5. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`. -@import "~bootstrap/scss/utilities/api"; diff --git a/resources/sass/back.scss b/resources/sass/back.scss deleted file mode 100644 index 69e947a..0000000 --- a/resources/sass/back.scss +++ /dev/null @@ -1,15 +0,0 @@ -@import "~cropperjs/dist/cropper.css"; -@import "./bs-colors"; -@import "~bootstrap"; - -// Override bootstrap -@import "bo/utilities/bs-custom"; - -// Vendor -@import "vendor/ck-content"; - -// Other -@import "bo/base/common"; -@import "bo/partials/header"; -@import "bo/partials/footer"; -@import "bo/pages/home"; diff --git a/resources/sass/bo/base/_common.scss b/resources/sass/bo/base/_common.scss index 2ab0b95..81de739 100644 --- a/resources/sass/bo/base/_common.scss +++ b/resources/sass/bo/base/_common.scss @@ -1,9 +1,21 @@ -.need-word-counter { - border-radius: 0 0 0.375rem 0.375rem !important; +// * LAYOUT + +main { + min-height: calc(100vh - $bo-header-height - $bo-footer-height); } +.container-fluid { + margin-top: $bo-header-height; +} + +#footer { + box-shadow: 0 -0.125rem 0.25rem rgb(0 0 0 / 7.5%) !important; +} + +// * OTHERS + .table { - &.fix-action { + &-fix-action { th:last-child, td:last-child { position: sticky; @@ -21,6 +33,36 @@ text-overflow: ellipsis; white-space: nowrap; } + + &-col-sorter { + height: 3rem; + } +} + +.w-fit { + width: fit-content; +} + +.btn-md { + height: 38px; +} + +.btn-sm { + height: 31px; +} + +.pagination-custom .dropdown-menu { + overflow: auto; + min-width: 5rem; + max-height: 178px; +} + +.need-word-counter-password { + border-radius: 0 0 0 0.375rem !important; + + &-btn { + border-radius: 0 0 0.375rem !important; + } } .bo-image-preview { diff --git a/resources/sass/bo/bo.scss b/resources/sass/bo/bo.scss new file mode 100644 index 0000000..6e9807d --- /dev/null +++ b/resources/sass/bo/bo.scss @@ -0,0 +1,20 @@ +// * LIBS +@import "~/cropperjs/dist/cropper.css"; +@import "./utilities/variables"; +@import "~/bootstrap"; + +// * UTILITIES +@import "./utilities/bs-custom"; + +// * VENDOR +@import "./vendor/ck-content"; + +// * BASE +@import "./base/common"; + +// * PARTIALS +@import "./partials/header"; +@import "./partials/footer"; + +// * PAGES +@import "./pages/home"; diff --git a/resources/sass/bo/utilities/_variables.scss b/resources/sass/bo/utilities/_variables.scss new file mode 100644 index 0000000..d1ffd9d --- /dev/null +++ b/resources/sass/bo/utilities/_variables.scss @@ -0,0 +1,26 @@ +// Override bootstrap colors +$gray-100: #f8f9fa; +$gray-600: #6c757d; +$gray-900: #212529; +$primary: #006fa7; +$secondary: #6c757d; +$success: #198754; +$info: #0dcaf0; +$warning: #ffc107; +$danger: #dc3545; +$light: #f8f9fa; +$dark: #212529; +$theme-colors: ( + primary: $primary, + secondary: $secondary, + success: $success, + info: $info, + warning: $warning, + danger: $danger, + light: $light, + dark: $dark, +); + +// * DIMENSIONS +$bo-header-height: 56px; +$bo-footer-height: 40px; diff --git a/resources/sass/bo/vendor/_bootstrap.scss b/resources/sass/bo/vendor/_bootstrap.scss new file mode 100644 index 0000000..52f2a1a --- /dev/null +++ b/resources/sass/bo/vendor/_bootstrap.scss @@ -0,0 +1,45 @@ +// 1. Include new custom variables +@import "./../utilities/bootstrap-variables"; + +// 2. Include functions first (so you can manipulate colors, SVGs, calc, etc) +@import "~/bootstrap/scss/functions"; + +// 3. Include remainder of required Bootstrap stylesheets +@import "~/bootstrap/scss/variables"; +@import "~/bootstrap/scss/variables-dark"; + +// 4. Include remainder of required parts +@import "~/bootstrap/scss/maps"; +@import "~/bootstrap/scss/mixins"; +@import "~/bootstrap/scss/root"; + +// 5. Optionally include any other parts as needed +@import "~/bootstrap/scss/alert"; +@import "~/bootstrap/scss/buttons"; +@import "~/bootstrap/scss/button-group"; +@import "~/bootstrap/scss/containers"; +@import "~/bootstrap/scss/dropdown"; +@import "~/bootstrap/scss/forms"; +@import "~/bootstrap/scss/grid"; +@import "~/bootstrap/scss/helpers"; +@import "~/bootstrap/scss/images"; +@import "~/bootstrap/scss/list-group"; +@import "~/bootstrap/scss/nav"; +@import "~/bootstrap/scss/navbar"; +@import "~/bootstrap/scss/pagination"; +@import "~/bootstrap/scss/reboot"; +@import "~/bootstrap/scss/tables"; +@import "~/bootstrap/scss/tooltip"; +@import "~/bootstrap/scss/transitions"; +@import "~/bootstrap/scss/type"; +@import "~/bootstrap/scss/utilities"; +@import "~/bootstrap/scss/close"; +@import "~/bootstrap/scss/card"; +@import "~/bootstrap/scss/breadcrumb"; +@import "~/bootstrap/scss/badge"; + +// 6. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss` +@import "~/bootstrap/scss/utilities/api"; + +// 7. Overload bootstrap classes +@import "./../utilities/bootstrap-custom"; diff --git a/resources/sass/bo/vendor/_ck-content.scss b/resources/sass/bo/vendor/_ck-content.scss new file mode 100644 index 0000000..e444d58 --- /dev/null +++ b/resources/sass/bo/vendor/_ck-content.scss @@ -0,0 +1,482 @@ +// CKeditor fix in alert +.ck-editor__main { + color: initial; +} + +// FIX +.ck-content { + // * Import bootstrap reboot to counter count theme aggressive reset + @import "~/bootstrap/scss/functions"; + @import "~/bootstrap/scss/variables"; + @import "~/bootstrap/scss/variables-dark"; + @import "~/bootstrap/scss/maps"; + @import "~/bootstrap/scss/mixins"; + @import "~/bootstrap/scss/root"; + @import "~/bootstrap/scss/reboot"; +} + +/* + * CKEditor 5 (v38.0.1) content styles. + * Generated on Tue, 06 Jun 2023 11:41:38 GMT. + * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html + */ + +:root { + --ck-color-image-caption-background: hsl(0, 0%, 97%); + --ck-color-image-caption-text: hsl(0, 0%, 20%); + --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); + --ck-color-mention-text: hsl(341, 100%, 30%); + --ck-color-table-caption-background: hsl(0, 0%, 97%); + --ck-color-table-caption-text: hsl(0, 0%, 20%); + --ck-highlight-marker-blue: hsl(201, 97%, 72%); + --ck-highlight-marker-green: hsl(120, 93%, 68%); + --ck-highlight-marker-pink: hsl(345, 96%, 73%); + --ck-highlight-marker-yellow: hsl(60, 97%, 73%); + --ck-highlight-pen-green: hsl(112, 100%, 27%); + --ck-highlight-pen-red: hsl(0, 85%, 49%); + --ck-image-style-spacing: 1.5em; + --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); + --ck-todo-list-checkmark-size: 16px; +} + +/* @ckeditor/ckeditor5-basic-styles/theme/code.css */ +.ck-content code { + background-color: hsla(0, 0%, 78%, 0.3); + padding: 0.15em; + border-radius: 2px; +} +/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ +.ck-content blockquote { + overflow: hidden; + padding-right: 1.5em; + padding-left: 1.5em; + margin-left: 0; + margin-right: 0; + font-style: italic; + border-left: solid 5px hsl(0, 0%, 80%); +} +/* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ +.ck-content[dir="rtl"] blockquote { + border-left: 0; + border-right: solid 5px hsl(0, 0%, 80%); +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-tiny { + font-size: 0.7em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-small { + font-size: 0.85em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-big { + font-size: 1.4em; +} +/* @ckeditor/ckeditor5-font/theme/fontsize.css */ +.ck-content .text-huge { + font-size: 1.8em; +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-yellow { + background-color: var(--ck-highlight-marker-yellow); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-green { + background-color: var(--ck-highlight-marker-green); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-pink { + background-color: var(--ck-highlight-marker-pink); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .marker-blue { + background-color: var(--ck-highlight-marker-blue); +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .pen-red { + color: var(--ck-highlight-pen-red); + background-color: transparent; +} +/* @ckeditor/ckeditor5-highlight/theme/highlight.css */ +.ck-content .pen-green { + color: var(--ck-highlight-pen-green); + background-color: transparent; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image { + display: table; + clear: both; + text-align: center; + margin: 0.9em auto; + min-width: 50px; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image img { + display: block; + margin: 0 auto; + max-width: 100%; + min-width: 100%; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline { + /* + * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; + * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. + * This strange behavior does not happen with inline-flex. + */ + display: inline-flex; + max-width: 100%; + align-items: flex-start; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline picture { + display: flex; +} +/* @ckeditor/ckeditor5-image/theme/image.css */ +.ck-content .image-inline picture, +.ck-content .image-inline img { + flex-grow: 1; + flex-shrink: 1; + max-width: 100%; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized { + max-width: 100%; + display: block; + box-sizing: border-box; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized img { + width: 100%; +} +/* @ckeditor/ckeditor5-image/theme/imageresize.css */ +.ck-content .image.image_resized > figcaption { + display: block; +} +/* @ckeditor/ckeditor5-image/theme/imagecaption.css */ +.ck-content .image > figcaption { + display: table-caption; + caption-side: bottom; + word-break: break-word; + color: var(--ck-color-image-caption-text); + background-color: var(--ck-color-image-caption-background); + padding: 0.6em; + font-size: 0.75em; + outline-offset: -1px; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-left, +.ck-content .image-style-block-align-right { + max-width: calc(100% - var(--ck-image-style-spacing)); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-left, +.ck-content .image-style-align-right { + clear: none; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-side { + float: right; + margin-left: var(--ck-image-style-spacing); + max-width: 50%; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-left { + float: left; + margin-right: var(--ck-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-center { + margin-left: auto; + margin-right: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-align-right { + float: right; + margin-left: var(--ck-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-right { + margin-right: 0; + margin-left: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-style-block-align-left { + margin-left: 0; + margin-right: auto; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content p + .image-style-align-left, +.ck-content p + .image-style-align-right, +.ck-content p + .image-style-side { + margin-top: 0; +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-left, +.ck-content .image-inline.image-style-align-right { + margin-top: var(--ck-inline-image-style-spacing); + margin-bottom: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-left { + margin-right: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-image/theme/imagestyle.css */ +.ck-content .image-inline.image-style-align-right { + margin-left: var(--ck-inline-image-style-spacing); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list { + list-style: none; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list li { + margin-bottom: 5px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list li .todo-list { + margin-top: 5px; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input { + -webkit-appearance: none; + display: inline-block; + position: relative; + width: var(--ck-todo-list-checkmark-size); + height: var(--ck-todo-list-checkmark-size); + vertical-align: middle; + border: 0; + left: -25px; + margin-right: -15px; + right: 0; + margin-left: 0; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input::before { + display: block; + position: absolute; + box-sizing: border-box; + content: ""; + width: 100%; + height: 100%; + border: 1px solid hsl(0, 0%, 20%); + border-radius: 2px; + transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, + 250ms ease-in-out border; +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input::after { + display: block; + position: absolute; + box-sizing: content-box; + pointer-events: none; + content: ""; + left: calc(var(--ck-todo-list-checkmark-size) / 3); + top: calc(var(--ck-todo-list-checkmark-size) / 5.3); + width: calc(var(--ck-todo-list-checkmark-size) / 5.3); + height: calc(var(--ck-todo-list-checkmark-size) / 2.6); + border-style: solid; + border-color: transparent; + border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) + calc(var(--ck-todo-list-checkmark-size) / 8) 0; + transform: rotate(45deg); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input[checked]::before { + background: hsl(126, 64%, 41%); + border-color: hsl(126, 64%, 41%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label > input[checked]::after { + border-color: hsl(0, 0%, 100%); +} +/* @ckeditor/ckeditor5-list/theme/todolist.css */ +.ck-content .todo-list .todo-list__label .todo-list__label__description { + vertical-align: middle; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol { + list-style-type: decimal; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol { + list-style-type: lower-latin; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol { + list-style-type: lower-roman; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol ol { + list-style-type: upper-latin; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ol ol ol ol ol { + list-style-type: upper-roman; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul { + list-style-type: disc; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul { + list-style-type: circle; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul ul { + list-style-type: square; +} +/* @ckeditor/ckeditor5-list/theme/list.css */ +.ck-content ul ul ul ul { + list-style-type: square; +} +/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ +.ck-content .media { + clear: both; + margin: 0.9em 0; + display: block; + min-width: 15em; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break { + position: relative; + clear: both; + padding: 5px 0; + display: flex; + align-items: center; + justify-content: center; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break::after { + content: ""; + position: absolute; + border-bottom: 2px dashed hsl(0, 0%, 77%); + width: 100%; +} +/* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ +.ck-content .page-break__label { + position: relative; + z-index: 1; + padding: 0.3em 0.6em; + display: block; + text-transform: uppercase; + border: 1px solid hsl(0, 0%, 77%); + border-radius: 2px; + font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; + font-size: 0.75em; + font-weight: bold; + color: hsl(0, 0%, 20%); + background: hsl(0, 0%, 100%); + box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +/* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ +.ck-content .media { + clear: both; + margin: 0.9em 0; + display: block; + min-width: 15em; +} +/* @ckeditor/ckeditor5-table/theme/tablecaption.css */ +.ck-content .table > figcaption { + display: table-caption; + caption-side: top; + word-break: break-word; + text-align: center; + color: var(--ck-color-table-caption-text); + background-color: var(--ck-color-table-caption-background); + padding: 0.6em; + font-size: 0.75em; + outline-offset: -1px; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table { + margin: 0.9em auto; + display: table; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + height: 100%; + border: 1px double hsl(0, 0%, 70%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table td, +.ck-content .table table th { + min-width: 2em; + padding: 0.4em; + border: 1px solid hsl(0, 0%, 75%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content .table table th { + font-weight: bold; + background: hsla(0, 0%, 0%, 5%); +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content[dir="rtl"] .table th { + text-align: right; +} +/* @ckeditor/ckeditor5-table/theme/table.css */ +.ck-content[dir="ltr"] .table th { + text-align: left; +} +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table .ck-table-resized { + table-layout: fixed; +} +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table table { + overflow: hidden; +} +/* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ +.ck-content .table td, +.ck-content .table th { + position: relative; +} +/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ +.ck-content pre { + padding: 1em; + color: hsl(0, 0%, 20.8%); + background: hsla(0, 0%, 78%, 0.3); + border: 1px solid hsl(0, 0%, 77%); + border-radius: 2px; + text-align: left; + direction: ltr; + tab-size: 4; + white-space: pre-wrap; + font-style: normal; + min-width: 200px; +} +/* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ +.ck-content pre code { + background: unset; + padding: 0; + border-radius: 0; +} +/* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */ +.ck-content hr { + margin: 15px 0; + height: 4px; + background: hsl(0, 0%, 87%); + border: 0; +} +/* @ckeditor/ckeditor5-mention/theme/mention.css */ +.ck-content .mention { + background: var(--ck-color-mention-background); + color: var(--ck-color-mention-text); +} +@media print { + /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ + .ck-content .page-break { + padding: 0; + } + /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ + .ck-content .page-break::after { + display: none; + } +} diff --git a/resources/sass/fo/base/_base.scss b/resources/sass/fo/base/_base.scss index e25da16..c5b96b0 100644 --- a/resources/sass/fo/base/_base.scss +++ b/resources/sass/fo/base/_base.scss @@ -215,16 +215,16 @@ td { .bg-ardoise-radial { // $percent: 60%; - // background: radial-gradient(ellipse, transparent 35%, $noir2 $percent), no-repeat center/cover url("~@/images/fond-ardoise.jpg"); + // background: radial-gradient(ellipse, transparent 35%, $noir2 $percent), no-repeat center/cover url("@/images/fond-ardoise.jpg"); width: 100%; background: linear-gradient(0deg, $color-bg-body 0%, transparent 50%, $color-bg-body 100%), - no-repeat center/cover url("~@/images/fond-ardoise.jpg"); + no-repeat center/cover url("@/images/fond-ardoise.jpg"); } -.bg-ardoise { background: no-repeat center/cover url("~@/images/fond-ardoise.jpg"); } +.bg-ardoise { background: no-repeat center/cover url("@/images/fond-ardoise.jpg"); } -.bg-inox { background: no-repeat center/cover url("~@/images/fond-inox.jpg"); } +.bg-inox { background: no-repeat center/cover url("@/images/fond-inox.jpg"); } .bg-transparent { background-color: transparent; } .bg-default { background-color: $primary; } .bg-noir { background-color: $noir2; } @@ -278,7 +278,7 @@ td { .engag-start { @include border-top-radius(1rem); } .engag-end { @include border-bottom-radius(1rem); } -.card-footer .engag-start.coucher { background: no-repeat center/cover url("~@/images/coucher-de-soleil-dans-un-champ.jpg"); } +.card-footer .engag-start.coucher { background: no-repeat center/cover url("@/images/coucher-de-soleil-dans-un-champ.jpg"); } .pagination { .disabled .page-link { diff --git a/resources/sass/fo/base/_fonts.scss b/resources/sass/fo/base/_fonts.scss index 3d9ee34..4fb7eb3 100644 --- a/resources/sass/fo/base/_fonts.scss +++ b/resources/sass/fo/base/_fonts.scss @@ -1,4 +1,4 @@ -$font-path: "~@/fonts"; +$font-path: "@/fonts"; @font-face { font-display: swap; diff --git a/resources/sass/components/_buttons.scss b/resources/sass/fo/components/_buttons.scss similarity index 100% rename from resources/sass/components/_buttons.scss rename to resources/sass/fo/components/_buttons.scss diff --git a/resources/sass/components/_cards.scss b/resources/sass/fo/components/_cards.scss similarity index 94% rename from resources/sass/components/_cards.scss rename to resources/sass/fo/components/_cards.scss index ff982c1..44ae2d7 100644 --- a/resources/sass/components/_cards.scss +++ b/resources/sass/fo/components/_cards.scss @@ -1,3 +1,5 @@ +@use "sass:math"; + $svg-engag-width: 110px; $width-card-adn: 350px; $width-card-story: 250px; @@ -43,9 +45,9 @@ $width-card-prod-adn: 351px; } .card-swiper { - @include size-fract($width-card-swiper, 4 / 3); + @include size-fract($width-card-swiper, math.div(4, 3)); - background: no-repeat center/cover url("~@/images/fond-inox.jpg"); + background: no-repeat center/cover url("@/images/fond-inox.jpg"); .card-img-wrapper { z-index: 1; } svg + div { clip-path: url("#svgClip"); } @@ -58,7 +60,7 @@ $width-card-prod-adn: 351px; left: 0; width: $width-card-swiper; height: 34px; - background: no-repeat center/cover url("~@/images/separate-blue-312-horizontal.png"); + background: no-repeat center/cover url("@/images/separate-blue-312-horizontal.png"); content: ""; } } @@ -72,7 +74,7 @@ $width-card-prod-adn: 351px; .card-img-wrapper { z-index: 1; padding: 2rem 2rem 2.5rem; - background: no-repeat center/cover url("~@/images/fond-ardoise.jpg"); + background: no-repeat center/cover url("@/images/fond-ardoise.jpg"); } .card-img, @@ -85,7 +87,7 @@ $width-card-prod-adn: 351px; } .card-simple { - @include size-fract($width-card-simple, 340 / 349); + @include size-fract($width-card-simple, math.div(340, 349)); background-color: $color-bg-dropmenu; @@ -96,7 +98,7 @@ $width-card-prod-adn: 351px; } .card-ranges { - @include size-fract($width-card-ranges, 29 / 32); + @include size-fract($width-card-ranges, math.div(29, 32)); .card-img-top { scale: 1; @@ -238,7 +240,7 @@ $width-card-prod-adn: 351px; .card-adn { @extend %adn; - @include size-fract($width-card-adn - 25px, 350 / 174); + @include size-fract($width-card-adn - 25px, math.div(350, 174)); .card-subtitle { $nblines: 3; @@ -248,7 +250,7 @@ $width-card-prod-adn: 351px; } .card-adn-sm { - @include size-fract($width-card-adn, 350 / 81); + @include size-fract($width-card-adn, math.div(350, 81)); .card-subtitle { $nblines: 2; @@ -269,7 +271,7 @@ $width-card-prod-adn: 351px; } .card-story { - @include size-fract($width-card-story, 1 / 2); + @include size-fract($width-card-story, math.div(1, 2)); .card-separator { top: 47%; @@ -366,7 +368,7 @@ $width-card-prod-adn: 351px; } .card-adn { - @include size-fract($width-card-adn, 570 / 283); + @include size-fract($width-card-adn, math.div(570, 283)); background-color: $color-bg-dropmenu; @@ -381,7 +383,7 @@ $width-card-prod-adn: 351px; } .card-adn-sm { - @include size-fract($width-card-adn, 570 / 132); + @include size-fract($width-card-adn, math.div(570, 132)); .card-subtitle { $nblines: 3; diff --git a/resources/sass/fo/fo.scss b/resources/sass/fo/fo.scss new file mode 100644 index 0000000..21a90cc --- /dev/null +++ b/resources/sass/fo/fo.scss @@ -0,0 +1,61 @@ +// @import "./bs-colors"; + +// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc). +@import "~/bootstrap/scss/functions"; + +// 2. Include remainder of required Bootstrap stylesheets. +@import "~/bootstrap/scss/variables"; + +// Override bootstrap variables +@import "utilities/variables"; +@import "utilities/bs-variables"; +@import "bootstrap"; + +// Override bootstrap +@import "utilities/functions"; +@import "utilities/bs-custom"; +@import "utilities/mixins"; +@import "components/buttons"; +@import "components/cards"; + +// Toastify +@import "~/toastify-js/src/toastify.css"; + +// Override css toasts +@import "utilities/notifications"; + +// import Swiper styles +@import "~/swiper/swiper"; +@import "~/swiper/modules/autoplay/autoplay"; +@import "~/swiper/modules/controller/controller"; +@import "~/swiper/modules/navigation/navigation"; +@import "~/swiper/modules/pagination/pagination"; + +// Override Swiper +@import "utilities/swiper-custom"; + +// import Fancybox styles +@import "@fancyapps/ui/dist/fancybox"; + +// Vendor +@import "vendor/ldcweb-cookies"; +@import "vendor/ck-content"; + +// Other +@import "base/fonts"; +@import "base/base"; +@import "partials/banner"; +@import "partials/header"; +@import "partials/footer"; +@import "pages/home"; +@import "pages/adn"; +@import "pages/story"; +@import "pages/btob"; +@import "pages/breeder"; +@import "pages/engagments"; +@import "pages/products"; +@import "pages/expertise"; +@import "pages/ideas"; +@import "pages/recipes"; +@import "pages/news"; +@import "pages/contact"; diff --git a/resources/sass/fo/pages/_breeder.scss b/resources/sass/fo/pages/_breeder.scss index a759acf..a339324 100644 --- a/resources/sass/fo/pages/_breeder.scss +++ b/resources/sass/fo/pages/_breeder.scss @@ -1 +1 @@ -.card-footer .engag-start.breeder { background: no-repeat center/cover url("~@/images/eleveur-de-dindes-le-gaulois.jpg"); } +.card-footer .engag-start.breeder { background: no-repeat center/cover url("@/images/eleveur-de-dindes-le-gaulois.jpg"); } diff --git a/resources/sass/fo/pages/_btob.scss b/resources/sass/fo/pages/_btob.scss index 99d25dc..d13cf7f 100644 --- a/resources/sass/fo/pages/_btob.scss +++ b/resources/sass/fo/pages/_btob.scss @@ -1,2 +1,2 @@ .sticker-traca { min-width: 300px; } -.card-footer .engag-start.btob { background: no-repeat center/cover url("~@/images/btob/brochette-volaille.jpg"); } +.card-footer .engag-start.btob { background: no-repeat center/cover url("@/images/btob/brochette-volaille.jpg"); } diff --git a/resources/sass/fo/pages/_contact.scss b/resources/sass/fo/pages/_contact.scss index 8f26e26..d90d84f 100644 --- a/resources/sass/fo/pages/_contact.scss +++ b/resources/sass/fo/pages/_contact.scss @@ -28,7 +28,7 @@ right: 1rem; width: 15px; height: 8px; - background: no-repeat center/contain url("~@/images/arrow-filter.png"); + background: no-repeat center/contain url("@/images/arrow-filter.png"); content: ""; rotate: 0deg; transition: rotate 0.3s ease-in-out; diff --git a/resources/sass/fo/pages/_engagments.scss b/resources/sass/fo/pages/_engagments.scss index 2846471..554eb9f 100644 --- a/resources/sass/fo/pages/_engagments.scss +++ b/resources/sass/fo/pages/_engagments.scss @@ -39,9 +39,9 @@ } .card-footer { - .engag-start.champ { background: no-repeat center/cover url("~@/images/engagments/champ-avec-bottes-de-paille.jpg"); } - .engag-start.soja { background: no-repeat center/cover url("~@/images/engagments/bonnet-champs.jpg"); } - .engag-start.tdf { background: no-repeat center/cover url("~@/images/engagments/le-Gaulois-volaille-officiel-du-tdf.jpg"); } + .engag-start.champ { background: no-repeat center/cover url("@/images/engagments/champ-avec-bottes-de-paille.jpg"); } + .engag-start.soja { background: no-repeat center/cover url("@/images/engagments/bonnet-champs.jpg"); } + .engag-start.tdf { background: no-repeat center/cover url("@/images/engagments/le-Gaulois-volaille-officiel-du-tdf.jpg"); } } // MMMMMMMM MMMMMMMMDDDDDDDDDDDDD diff --git a/resources/sass/fo/pages/_expertise.scss b/resources/sass/fo/pages/_expertise.scss index e94fb01..180952a 100644 --- a/resources/sass/fo/pages/_expertise.scss +++ b/resources/sass/fo/pages/_expertise.scss @@ -133,7 +133,7 @@ display: block; width: 15rem; height: 14rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2-expertise.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2-expertise.png"); } .anatomie-wrapper::after { @@ -142,7 +142,7 @@ display: block; width: 17.7rem; height: 25.8rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2-gammes.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2-gammes.png"); rotate: 4deg; scale: -1 1; } diff --git a/resources/sass/fo/pages/_home.scss b/resources/sass/fo/pages/_home.scss index 2c2872d..db823eb 100644 --- a/resources/sass/fo/pages/_home.scss +++ b/resources/sass/fo/pages/_home.scss @@ -33,7 +33,7 @@ $thumbs-height: 10%; display: block; width: 16px; height: 100%; - background: url("~@/images/homepage/sep-thumbs.png"); + background: url("@/images/homepage/sep-thumbs.png"); content: ""; } @@ -90,7 +90,7 @@ $thumbs-height: 10%; } .section-tricks { - .bg-txt { background: no-repeat center/cover url("~@/images/fond-inox.jpg"); } + .bg-txt { background: no-repeat center/cover url("@/images/fond-inox.jpg"); } .bg-txt > div:first-child { background-color: $color-bg-body; } .bg-txt > div:last-child { max-width: 960px; } @@ -208,7 +208,7 @@ $thumbs-height: 10%; display: block; width: 11rem; height: 13rem; - background: no-repeat center/cover url("~@/images/layout/aromates-1-home.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-home.png"); content: ""; } @@ -218,7 +218,7 @@ $thumbs-height: 10%; bottom: 0; width: 13rem; height: 15rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2.png"); content: ""; } } diff --git a/resources/sass/fo/pages/_ideas.scss b/resources/sass/fo/pages/_ideas.scss index ed0512e..113a0e4 100644 --- a/resources/sass/fo/pages/_ideas.scss +++ b/resources/sass/fo/pages/_ideas.scss @@ -32,7 +32,7 @@ display: block; width: 15rem; height: 18rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2-girdt.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2-girdt.png"); } .ideas-summary-wrapper::after { @@ -41,7 +41,7 @@ display: block; width: 14rem; height: 16rem; - background: no-repeat center/cover url("~@/images/layout/aromates-1-home.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-home.png"); scale: -1 1; } } diff --git a/resources/sass/fo/pages/_news.scss b/resources/sass/fo/pages/_news.scss index 5d0534d..092e00e 100644 --- a/resources/sass/fo/pages/_news.scss +++ b/resources/sass/fo/pages/_news.scss @@ -8,7 +8,7 @@ position: absolute; top: 0; left: 100%; - background: no-repeat center/cover url("~@/images/linkedin-round.png"); + background: no-repeat center/cover url("@/images/linkedin-round.png"); content: ""; translate: -50% -50%; } diff --git a/resources/sass/fo/pages/_products.scss b/resources/sass/fo/pages/_products.scss index a5b8d7d..2721d02 100644 --- a/resources/sass/fo/pages/_products.scss +++ b/resources/sass/fo/pages/_products.scss @@ -31,7 +31,7 @@ top: 50%; right: 1rem; display: flex; - content: url("~@/images/recherche.png"); + content: url("@/images/recherche.png"); translate: 0 -50%; } @@ -75,7 +75,7 @@ } .section-video-product { - background: no-repeat top center/100% url("~@/images/products/chef-en-cuisine.jpg"), no-repeat center/cover url("~@/images/fond-inox.jpg"); + background: no-repeat top center/100% url("@/images/products/chef-en-cuisine.jpg"), no-repeat center/cover url("@/images/fond-inox.jpg"); } .swiper-other-products { @@ -118,7 +118,7 @@ #swiper-product { width: calc(100% - 12rem); } .section-video-product { - background: no-repeat top center/100% url("~@/images/products/chef-en-cuisine.png"), no-repeat center/cover url("~@/images/fond-inox.jpg"); + background: no-repeat top center/100% url("@/images/products/chef-en-cuisine.png"), no-repeat center/cover url("@/images/fond-inox.jpg"); } } @@ -145,7 +145,7 @@ width: 100%; background: linear-gradient(0deg, $color-bg-body 10%, transparent 50%, $color-bg-body 90%), - no-repeat center/cover url("~@/images/fond-ardoise.jpg"); + no-repeat center/cover url("@/images/fond-ardoise.jpg"); } .all-filters-wrapper { top: 100px; } @@ -213,7 +213,7 @@ display: block; width: 17.7rem; height: 25.8rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2-gammes.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2-gammes.png"); content: ""; transform: translateY(-50%); } @@ -223,7 +223,7 @@ position: absolute; width: 13rem; height: 15rem; - background: no-repeat center/cover url("~@/images/layout/aromates-2.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2.png"); content: ""; } @@ -245,7 +245,7 @@ position: absolute; width: 22rem; height: 18rem; - background: no-repeat center/cover url("~@/images/layout/aromates-1-gammes.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-gammes.png"); content: ""; } @@ -274,7 +274,7 @@ display: block; width: 15rem; height: 14rem; - background: no-repeat center/cover url("~@/images/layout/aromates-1-histoire.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-histoire.png"); rotate: -3deg; scale: -1 1; } @@ -284,7 +284,7 @@ right: -5rem; width: 27rem; height: 21rem; - background: no-repeat center/cover url("~@/images/layout/aromates-1-ficheproduit.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-ficheproduit.png"); } #swiper-product { width: 100%; } diff --git a/resources/sass/fo/pages/_recipes.scss b/resources/sass/fo/pages/_recipes.scss index 316ff44..14adcca 100644 --- a/resources/sass/fo/pages/_recipes.scss +++ b/resources/sass/fo/pages/_recipes.scss @@ -8,7 +8,7 @@ border: unset; margin-left: 1rem; - background: no-repeat center/contain url("~@/images/arrow-filter.png"); + background: no-repeat center/contain url("@/images/arrow-filter.png"); vertical-align: unset; } } diff --git a/resources/sass/fo/pages/_story.scss b/resources/sass/fo/pages/_story.scss index 1e94b91..0b431d3 100644 --- a/resources/sass/fo/pages/_story.scss +++ b/resources/sass/fo/pages/_story.scss @@ -12,7 +12,7 @@ display: block; width: 218px; height: 223px; - background: no-repeat center/cover url("~@/images/layout/aromates-2-histoire.png"); + background: no-repeat center/cover url("@/images/layout/aromates-2-histoire.png"); } &::after { @@ -20,7 +20,7 @@ right: -6rem; width: 186px; height: 165px; - background: no-repeat center/cover url("~@/images/layout/aromates-1-histoire.png"); + background: no-repeat center/cover url("@/images/layout/aromates-1-histoire.png"); } } diff --git a/resources/sass/fo/partials/_banner.scss b/resources/sass/fo/partials/_banner.scss index 2d9d83e..6975b25 100644 --- a/resources/sass/fo/partials/_banner.scss +++ b/resources/sass/fo/partials/_banner.scss @@ -1,61 +1,61 @@ .banner-header-wrapper.story::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-story.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-story.jpg"); } .banner-header-wrapper.ranges::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-ranges.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-ranges.jpg"); } .banner-header-wrapper.products::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-products.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-products.jpg"); } .banner-header-wrapper.engagments::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-engagments.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-engagments.jpg"); } .banner-header-wrapper.btob::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-b-to-b.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-b-to-b.jpg"); } .banner-header-wrapper.breeder::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-breeder.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-breeder.jpg"); } .banner-header-wrapper.adn::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-adn.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-adn.jpg"); } .banner-header-wrapper.ideas::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-ideas.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-ideas.jpg"); } .banner-header-wrapper.tips::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-tips.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-tips.jpg"); } .banner-header-wrapper.recipes::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-recipes.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-recipes.jpg"); } .banner-header-wrapper.news::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-news.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-news.jpg"); } .banner-header-wrapper.contact::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-contact.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-contact.jpg"); } .banner-header-wrapper.search-summary::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-contact.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-contact.jpg"); } .banner-header-wrapper.search::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-contact.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-contact.jpg"); } .banner-header-wrapper.legals::before { - background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("~@/images/banner/header-legals.jpg"); + background: linear-gradient(0deg, $color-bg-body 0%, transparent 100%), no-repeat center/cover url("@/images/banner/header-legals.jpg"); } .banner-wrapper { background-color: $color-bg-banner; } diff --git a/resources/sass/fo/partials/_footer.scss b/resources/sass/fo/partials/_footer.scss index 68218ca..3132115 100644 --- a/resources/sass/fo/partials/_footer.scss +++ b/resources/sass/fo/partials/_footer.scss @@ -20,12 +20,12 @@ footer { position: absolute; right: 0; display: inline-block; - background: no-repeat center/cover url("~@/images/fleche.png"); + background: no-repeat center/cover url("@/images/fleche.png"); content: ""; rotate: 0deg; transition: rotate 0.3s ease-in-out; } - .deactivatable:hover::after { background: no-repeat center/cover url("~@/images/fleche-hover.png"); } + .deactivatable:hover::after { background: no-repeat center/cover url("@/images/fleche-hover.png"); } .deactivatable.active::after { rotate: 180deg; } } diff --git a/resources/sass/fo/partials/_header.scss b/resources/sass/fo/partials/_header.scss index fb33a78..e7a9175 100644 --- a/resources/sass/fo/partials/_header.scss +++ b/resources/sass/fo/partials/_header.scss @@ -13,19 +13,19 @@ header { .all-navbar { z-index: 1; height: var(--navbar-height); - background: no-repeat center/cover url("~@/images/fond-inox.jpg"); + background: no-repeat center/cover url("@/images/fond-inox.jpg"); } .navbar-toggler:focus { box-shadow: none; } .navbar-toggler-icon { - background-image: url("~@/images/header/menu-hamburger.svg"); + background-image: url("@/images/header/menu-hamburger.svg"); transition: all 0.3s ease-in-out; } .navbar-toggler-icon.close { height: 1em; - background-image: url("~@/images/header/menu-close.png"); + background-image: url("@/images/header/menu-close.png"); background-size: contain; } @@ -54,7 +54,7 @@ header { position: absolute; top: 50%; left: 100%; - background: no-repeat center/cover url("~@/images/header/croix.png"); + background: no-repeat center/cover url("@/images/header/croix.png"); color: $secondary; content: ""; transition: all 0.3s ease-in-out; diff --git a/resources/sass/_bs-colors.scss b/resources/sass/fo/utilities/_bootstrap-variables.scss similarity index 100% rename from resources/sass/_bs-colors.scss rename to resources/sass/fo/utilities/_bootstrap-variables.scss diff --git a/resources/sass/fo/utilities/_bs-variables.scss b/resources/sass/fo/utilities/_bs-variables.scss index 2e93618..45b5dff 100644 --- a/resources/sass/fo/utilities/_bs-variables.scss +++ b/resources/sass/fo/utilities/_bs-variables.scss @@ -73,8 +73,8 @@ $grid-breakpoints-override: (xxxl: 1500px, ml: 1900px); $grid-breakpoints: map.merge($grid-breakpoints-override, $grid-breakpoints); // OVERRIDE ACCORDION ICON -$accordion-button-icon: url("~@/images/arrow-filter.png"); -$accordion-button-active-icon: url("~@/images/arrow-filter.png"); +$accordion-button-icon: url("@/images/arrow-filter.png"); +$accordion-button-active-icon: url("@/images/arrow-filter.png"); // HIGH LEVEL VARIABLES $link-hover-color: $primary; diff --git a/resources/sass/fo/utilities/_swiper-custom.scss b/resources/sass/fo/utilities/_swiper-custom.scss index 23fa9bc..936839e 100644 --- a/resources/sass/fo/utilities/_swiper-custom.scss +++ b/resources/sass/fo/utilities/_swiper-custom.scss @@ -61,7 +61,7 @@ &::after { @include size($size-btn-nav); - background: no-repeat center/cover url("~@/images/homepage/fleche-inox.png"); + background: no-repeat center/cover url("@/images/homepage/fleche-inox.png"); content: ""; } diff --git a/resources/sass/vendor/_ck-content.scss b/resources/sass/fo/vendor/_ck-content.scss similarity index 98% rename from resources/sass/vendor/_ck-content.scss rename to resources/sass/fo/vendor/_ck-content.scss index 66bc16c..10e87e7 100644 --- a/resources/sass/vendor/_ck-content.scss +++ b/resources/sass/fo/vendor/_ck-content.scss @@ -6,14 +6,14 @@ // Boutique FIX .ck-content { // * Import bootstrap reboot to counter count theme aggressive reset - @import "~bootstrap/scss/functions"; - @import "~bootstrap/scss/variables"; - @import "~bootstrap/scss/variables-dark"; - @import "~bootstrap/scss/mixins"; + @import "~/bootstrap/scss/functions"; + @import "~/bootstrap/scss/variables"; + @import "~/bootstrap/scss/variables-dark"; + @import "~/bootstrap/scss/mixins"; $theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value"); - @import "~bootstrap/scss/root"; - @import "~bootstrap/scss/reboot"; + @import "~/bootstrap/scss/root"; + @import "~/bootstrap/scss/reboot"; // ! Force word break a cause de ces pleurnicheurs de clients et tests non pertinents. overflow-wrap: break-word; @@ -551,4 +551,4 @@ .ck-content .page-break::after { display: none; } -} \ No newline at end of file +} diff --git a/resources/sass/vendor/_ldcweb-cookies.scss b/resources/sass/fo/vendor/_ldcweb-cookies.scss similarity index 100% rename from resources/sass/vendor/_ldcweb-cookies.scss rename to resources/sass/fo/vendor/_ldcweb-cookies.scss diff --git a/resources/sass/front.scss b/resources/sass/front.scss deleted file mode 100644 index 4e084e5..0000000 --- a/resources/sass/front.scss +++ /dev/null @@ -1,61 +0,0 @@ -@import "./bs-colors"; - -// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc). -@import "~bootstrap/scss/functions"; - -// 2. Include remainder of required Bootstrap stylesheets. -@import "~bootstrap/scss/variables"; - -// Override bootstrap variables -@import "fo/utilities/variables"; -@import "fo/utilities/bs-variables"; -@import "bootstrap"; - -// Override bootstrap -@import "fo/utilities/functions"; -@import "fo/utilities/bs-custom"; -@import "fo/utilities/mixins"; -@import "components/buttons"; -@import "components/cards"; - -// Toastify -@import "~toastify-js/src/toastify.css"; - -// Override css toasts -@import "fo/utilities/notifications"; - -// import Swiper styles -@import "./../../node_modules/swiper/swiper"; -@import "./../../node_modules/swiper/modules/autoplay/autoplay"; -@import "./../../node_modules/swiper/modules/controller/controller"; -@import "./../../node_modules/swiper/modules/navigation/navigation"; -@import "./../../node_modules/swiper/modules/pagination/pagination"; - -// Override Swiper -@import "fo/utilities/swiper-custom"; - -// import Fancybox styles -@import "@fancyapps/ui/dist/fancybox"; - -// Vendor -@import "vendor/ldcweb-cookies"; -@import "vendor/ck-content"; - -// Other -@import "fo/base/fonts"; -@import "fo/base/base"; -@import "fo/partials/banner"; -@import "fo/partials/header"; -@import "fo/partials/footer"; -@import "fo/pages/home"; -@import "fo/pages/adn"; -@import "fo/pages/story"; -@import "fo/pages/btob"; -@import "fo/pages/breeder"; -@import "fo/pages/engagments"; -@import "fo/pages/products"; -@import "fo/pages/expertise"; -@import "fo/pages/ideas"; -@import "fo/pages/recipes"; -@import "fo/pages/news"; -@import "fo/pages/contact"; diff --git a/resources/ts/back.ts b/resources/ts/back.ts deleted file mode 100644 index e71116f..0000000 --- a/resources/ts/back.ts +++ /dev/null @@ -1,10 +0,0 @@ -// UTILITIES -import "./utilities/bootstrap"; -import "./utilities/fontawesome"; -import "./bo/vue-bo"; - -// MODULES -import "./modules/sweetalert"; - -// CUSTOM -import "./bo/common"; diff --git a/resources/ts/bo/base/common.ts b/resources/ts/bo/base/common.ts new file mode 100644 index 0000000..3d135b2 --- /dev/null +++ b/resources/ts/bo/base/common.ts @@ -0,0 +1,33 @@ +import { SweetAlertResult } from "sweetalert2"; +import sweetalert from "../../modules/sweetalertConfirm"; + +window.addEventListener("DOMContentLoaded", () => { + /** + * Popup delete item. + */ + const elements = document.getElementsByClassName( + "confirmDeleteTS" + ) as HTMLCollectionOf<Element>; + for (const element of elements) { + element.addEventListener("submit", function (e) { + e.preventDefault(); + const el = e.target; + if (!el || !(el instanceof HTMLFormElement)) { + throw new Error( + "confirmDoneJS can only be executed on an exising form" + ); + } + sweetalert.methods.confirm( + "Êtes-vous sûr ?", + "Toutes les données vont être perdu", + el as HTMLFormElement, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + function (response: SweetAlertResult<any>) { + (el as HTMLFormElement).submit(); + }, + { icon: "warning" } + ); + return false; + }); + } +}); diff --git a/resources/ts/bo/bo.ts b/resources/ts/bo/bo.ts new file mode 100644 index 0000000..6184056 --- /dev/null +++ b/resources/ts/bo/bo.ts @@ -0,0 +1,14 @@ +// * ASSETS +import.meta.glob(["./../../assets/images/**"]); + +// * UTILITIES +import "./utilities/bootstrap"; +import "./utilities/fontawesome"; +import "./utilities/vue-bo"; + +// * MODULES +import "./../modules/sweetalert"; + +// * CUSTOM +import "./base/common"; + diff --git a/resources/ts/bo/common.ts b/resources/ts/bo/common.ts deleted file mode 100644 index e69de29..0000000 diff --git a/resources/ts/components/bo/BelongsToManyDropdownComponent.vue b/resources/ts/bo/components/BelongsToManyDropdownComponent.vue similarity index 97% rename from resources/ts/components/bo/BelongsToManyDropdownComponent.vue rename to resources/ts/bo/components/BelongsToManyDropdownComponent.vue index 716cfda..8c1ad9f 100644 --- a/resources/ts/components/bo/BelongsToManyDropdownComponent.vue +++ b/resources/ts/bo/components/BelongsToManyDropdownComponent.vue @@ -148,7 +148,9 @@ export default defineComponent({ <style lang="scss"> .belongs-to-many-dropdown { - max-width: 100% !important; + &, .vue-tags-input { + max-width: 100% !important; + } .ti- { &autocomplete { max-height: 10rem !important; @@ -179,7 +181,7 @@ export default defineComponent({ } &tag { padding: 0.1rem 0.3rem !important; - background-color: var(--bs-blue) !important; + background-color: var(--bs-primary) !important; border-radius: 0.375rem !important; } &selected-item { diff --git a/resources/ts/bo/components/CkEditorComponent.vue b/resources/ts/bo/components/CkEditorComponent.vue new file mode 100644 index 0000000..8da822b --- /dev/null +++ b/resources/ts/bo/components/CkEditorComponent.vue @@ -0,0 +1,352 @@ +<template> + <div> + <div ref="wordCounter" /> + <div ref="ckeditor" /> + <input + :id="internalId" + class="form-control" + type="hidden" + :name="intName" + :value="internalText" + :required="internalRequired" + > + </div> +</template> + +<script lang="ts"> +import { defineComponent } from "vue"; +import "./../../../js/vendor/ckeditor"; +import trans from "./../../modules/trans"; +// import { CKUploadAdaptater } from "../../bo/CkUploadAdaptater"; + +export default defineComponent({ + name: "CkEditorComponent", + emits: ["input"], + mixins: [trans], + props: { + id: { + type: String, + default: String(Math.pow(10, 16) / Math.random()), + }, + required: { + type: Boolean, + default: false, + }, + name: { + type: String, + default: "", + }, + dbtext: { + type: String, + default: "", + }, + }, + mounted() { + const json = String(this.$attrs.json ?? "{}"), + data = JSON.parse(json); + this.intName = data.name; + this.internalText = data.text ? String(data.text) : ""; + this.internalId = data.id ? data.id : ""; + this.internalRequired = Boolean(data.required); + this.makeSuperBuild(); + }, + data(): { + intName: string; + internalText: string; + internalId: string; + internalRequired: boolean; + // @ts-ignore + editor: ClassicEditor | null; + words: number; + chars: number; + } { + return { + intName: "", + internalText: "", + internalId: "", + internalRequired: false, + editor: null, + words: 0, + chars: 0, + }; + }, + watch: { + id() { + this.internalId = this.id; + }, + name() { + this.intName = this.name; + }, + required() { + this.internalRequired = this.required; + }, + dbtext() { + if (this.internalText != this.dbtext) { + this.internalText = this.dbtext ? this.dbtext : ""; + if (this.editor) { + this.editor.setData(this.internalText); + } + } + }, + }, + methods: { + makeSuperBuild() { + const self = this, + ckeditor = this.$refs.ckeditor as HTMLElement, + wordCounter = this.$refs.wordCounter as HTMLElement; + // * Specific to Calliope + // verticalTopMenuOffset = document.querySelector( + // "body > div> .navbar" + // ) as HTMLElement | null; + + // if (!verticalTopMenuOffset) { + // throw new Error("Could not find bo Top menu navbar"); + // } + + // @ts-ignore + ClassicEditor.create(ckeditor, { + // https://github.com/ckeditor/ckeditor5-react/issues/267 + extraPlugins: [ + // // @ts-ignore + // (editor) => { + // editor.plugins.get("FileRepository").createUploadAdapter = ( + // // @ts-ignore + // loader + // ) => { + // // Configure the URL to the upload script in your back-end here! + // return new CKUploadAdaptater(loader); + // }; + // }, + ], + wordCount: { + container: wordCounter, + // @ts-ignore + onUpdate: (stats) => { + this.chars = stats.characters; + this.words = stats.words; + }, + }, + // ui: { + // viewportOffset: { + // top: verticalTopMenuOffset.getBoundingClientRect().height, + // right: 0, + // bottom: 0, + // left: 0, + // }, + // }, + link: { + // Automatically add target="_blank" and rel="noopener noreferrer" to all external links. + addTargetToExternalLinks: true, + + // Let the users control the "download" attribute of each link. + decorators: [ + { + mode: "manual", + label: "Ouvrir dans un nouvel onglet", + attributes: { + target: "_blank", + rel: "noopener noreferrer", + }, + }, + ], + }, + typing: { + transformations: { + extra: [ + { from: ":)", to: "😊" }, + { from: ":-P", to: "😛" }, + { from: "8-)", to: "😎" }, + { from: ";-)", to: "😉" }, + { from: ":-D", to: "😄" }, + { from: ":twisted:", to: "😈" }, + { from: ":mrgreen:", to: "😁" }, + { from: ":lol:", to: "😆" }, + { from: ":roll:", to: "🙄" }, + { from: ":-?", to: "😕" }, + { from: ":cry:", to: "😢" }, + { from: ":-o", to: "😮" }, + { from: ":evil:", to: "😡" }, + { from: ":-|", to: "😐" }, + { from: ":oops:", to: "😳" }, + { from: ":-x", to: "😠" }, + { from: "8-O", to: "😲" }, + { from: ":-(", to: "😧" }, + { from: ":arrow:", to: "➡" }, + { from: ":idea:", to: "💡" }, + ], + }, + }, + mediaEmbed: { + previewsInData: false, + removeProviders: [ + "dailymotion", + "spotify", + "youtube", + "vimeo", + "instagram", + "twitter", + "googleMaps", + "flickr", + "facebook", + ], + // // see https://github.com/ckeditor/ckeditor5/blob/master/packages/ckeditor5-media-embed/src/mediaembedediting.js + // providers: [ + // { + // // display local videos in oembed tags + // name: "localVideo", + // url: /^(\/(?:content|storage|uploads)\/.*)/, + // html: (match: string[]) => { + // const path = match[1]; + + // return ( + // "<video controls allowfullscreen style=\"max-width: 90%; margin: 0 auto; display: block;\">" + + // `<source src="${path}" type="video/mp4">` + + // `<p>Votre navigateur ne prend pas en charge les vidéos HTML5. Voici <a href="${path}">un lien pour télécharger la vidéo</a>.</p>` + + // "</video>" + // ); + // }, + // }, + // ], + }, + toolbar: { + items: [ + "heading", + "|", + "findAndReplace", + "|", + "bold", + "italic", + "underline", + "strikethrough", + "link", + "bulletedList", + "numberedList", + // "code", + // "codeBlock", + "|", + "outdent", + "indent", + "alignment", + "|", + "undo", + "redo", + "selectAll", + "|", + // "laravelFileManager", + "blockQuote", + "|", + // "insertTable", + // "tableColumn", + // "tableRow", + // "mergeTableCells", + "|", + // "highlight", + // "removeHighlight", + // "fontColor", + // "fontBackgroundColor", + // "fontFamily", + "fontSize", + "horizontalLine", + // "specialCharacters", + "|", + "removeFormat", + "|", + "sourceEditing", + ], + }, + // table: { + // contentToolbar: [ + // "tableColumn", + // "tableRow", + // "mergeTableCells", + // "tableProperties", + // "tableCellProperties", + // "toggleTableCaption", + // ], + + // Configuration of the TableProperties plugin. + // tableProperties: { + // ... + // }, + + // Configuration of the TableCellProperties plugin. + // tableCellProperties: { + // ... + // }, + // }, + width: "auto", + language: "fr", + image: { + toolbar: [ + "toggleImageCaption", + "imageTextAlternative", + "imageStyle:inline", + "imageStyle:alignLeft", + "imageStyle:alignRight", + "imageStyle:alignCenter", + "imageStyle:side", + "imageResize", + "linkImage", + ], + }, + }) + // @ts-ignore + .then((editor: ClassicEditor) => { + let timer = null as number|null; + const updateContent = () => { + const data = editor.getData(); + self.internalText = data; + self.$emit("input", data); + timer = null; + }; + // Display all toolbar elements + // console.log(Array.from(editor.ui.componentFactory.names())); + self.editor = editor; + editor.setData(this.internalText); + editor.model.document.on("change:data", () => { + if(timer) { + clearTimeout(timer); + } + // * Keep track of internal editor + timer = setTimeout(updateContent, 1000) as never as number; + }); + }) + // @ts-ignore + .catch((error) => { + console.error("Oops, something went wrong!"); + console.error( + "Please, report the following error on https://github.com/ckeditor/ckeditor5/issues with the build id and the error stack trace:" + ); + console.warn("Build id: x0tjc6omqq4d-iydt761tuj51"); + console.error(error); + }); + }, + }, +}); +</script> + +<style lang="scss"> +@import url("./../../../js/vendor/ckeditor/build/styles.css"); +.ck-rounded-corners { + border-radius: 0 0 0.375rem 0.375rem !important; +} +.ck-word-count { + background-color: #fafafa; + border: 1px solid #c4c4c4; + border-bottom: 0px; + border-top-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; + color: initial; + display: flex; + flex-direction: row; + justify-content: space-around !important; +} +.ck-content { + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +.ck-focused { + border-color: #86b7fe !important; + box-shadow: 0 0 0 0.25rem rgb(13 110 253 / 25%) !important; + outline: 0 !important; +} +</style> diff --git a/resources/ts/components/bo/ColorPickerComponent.vue b/resources/ts/bo/components/ColorPickerComponent.vue similarity index 97% rename from resources/ts/components/bo/ColorPickerComponent.vue rename to resources/ts/bo/components/ColorPickerComponent.vue index 83faba6..eea94d2 100644 --- a/resources/ts/components/bo/ColorPickerComponent.vue +++ b/resources/ts/bo/components/ColorPickerComponent.vue @@ -79,8 +79,8 @@ import { defineComponent, PropType } from "vue"; // @ts-ignore import { Chrome } from "@ckpack/vue-color"; -import trans from "../../modules/trans"; import Tooltip from "bootstrap/js/dist/tooltip"; +import trans from "../../modules/trans"; export default defineComponent({ inheritAttrs: false, @@ -92,7 +92,7 @@ export default defineComponent({ this.intNullableInput = this.$refs.nullableInput as HTMLInputElement; this.intColorPickerFakeInput = this.$refs .colorPickerFakeInput as HTMLElement; - this.intPicker = this.$refs.picker as Chrome; + this.intPicker = this.$refs.picker as typeof Chrome; const json = String(this.$attrs.json ?? "{}"), data = JSON.parse(json); @@ -125,7 +125,7 @@ export default defineComponent({ this.intInternalValue = this.intValue ?? ""; } this.$nextTick(() => { - this.intInternalHex = this.intPicker.$data.val.hex; + this.intInternalHex = this.intPicker?.$data.val.hex; this.initTooltips(); }); }, @@ -182,7 +182,7 @@ export default defineComponent({ intNullableInput: HTMLInputElement | null; intColorPickerFakeInput: HTMLElement | null; - intPicker: Chrome | null; + intPicker: typeof Chrome | null; } { return { intId: "", @@ -218,7 +218,7 @@ export default defineComponent({ return; } this.$nextTick(() => { - this.intInternalHex = this.intPicker.$data.val.hex; + this.intInternalHex = this.intPicker?.$data.val.hex; }); if (typeof this.intInternalValue === "string") { this.intValue = this.intInternalValue; diff --git a/resources/ts/components/bo/ImageInputComponent.vue b/resources/ts/bo/components/ImageInputComponent.vue similarity index 67% rename from resources/ts/components/bo/ImageInputComponent.vue rename to resources/ts/bo/components/ImageInputComponent.vue index 59ba6bc..7ca62c6 100644 --- a/resources/ts/components/bo/ImageInputComponent.vue +++ b/resources/ts/bo/components/ImageInputComponent.vue @@ -1,14 +1,13 @@ <template> - <div class="container image-input p-0"> + <div class="container image-input-vue p-0"> <div class="row"> <div :class="`col-12 ${intPreview ? 'col-md-6' : ''} form-group`"> <label - v-if="intPreview" + v-if="intPreview && showLabels" :for="intId" class="col-form-label" > - <b v-if="!intRequired">{{ __("Choisir un fichier") }}</b> - <b v-else>{{ __("Choisir un fichier *") }}</b> + <b>{{ __("vue.ImageInputComponent.choose_a_file") }}</b> </label> <div class="input-group"> <button @@ -16,9 +15,9 @@ class="btn btn-outline-secondary" type="button" data-bs-toggle="tooltip" - :title="__('Modifier l\'image source')" + :title="__('vue.ImageInputComponent.change_source_picture')" > - <i class="fa-solid fa-folder-open" /> + <FontAwesomeIcon icon="fa-solid fa-folder-open" /> </button> <input :id="intId" @@ -31,11 +30,11 @@ :aria-describedby="`Help${intId}`" > <input - v-if="typeof intValue === 'string'" + v-if="intValue.indexOf('data:image/png;base64') !== 0" class="d-none" :name="intName" type="text" - :value="intValue" + :value="submitIntValue" > <input @click.prevent="chooseAFile" @@ -43,17 +42,17 @@ :value="intValueFileName" class="form-control right-aligned" data-bs-toggle="tooltip" - :title="__('Modifier l\'image source')" + :title="__('vue.ImageInputComponent.change_source_picture')" :aria-describedby="`Help${intId}`" readonly > <button - v-if="!intRequired" + v-if="!intRequired && intHasImage" @click.prevent="removeFile" class="btn btn-outline-danger" type="button" > - <i class="fas fa-eraser" /> + <FontAwesomeIcon icon="fa-solid fa-eraser" /> </button> <button v-if="!intPreview && intValue" @@ -64,8 +63,10 @@ > <span data-bs-toggle="tooltip" - :title="__('Visualiser l\'image')" - ><i class="fa-solid fa-eye" /></span> + :title="__('vue.ImageInputComponent.view_source_picture')" + > + <FontAwesomeIcon icon="fa-solid fa-eye" /> + </span> </button> <button @click.prevent="prepareImageEditor($event)" @@ -77,54 +78,52 @@ > <span data-bs-toggle="tooltip" - :title="__('Redimensionner l\'image')" + :title="__('vue.ImageInputComponent.resize_source_picture')" > - <i class="fa-solid fa-crop" /> + <FontAwesomeIcon icon="fa-solid fa-crop" /> </span> </button> <span v-if="intHasModdedImage" class="input-group-text text-success" data-bs-toggle="tooltip" - :title="__('Image redimensionée')" + :title="__('vue.ImageInputComponent.resized_source_picture')" > - <i class="fa-solid fa-wand-magic" /> + <FontAwesomeIcon icon="fa-solid fa-wand-magic" /> </span> </div> <small :id="`Help${intId}`" - class="form-text text-muted" - >{{ - intHelper - }}</small> + class="form-text text-body-secondary" + > + {{ intHelper }} + </small> </div> <div v-if="intPreview" - :class="`col-12 ${intPreview ? 'col-md-6' : ''} form-group`" + :class="`col-12 ${intPreview ? 'col-md-6' : ''} form-group d-flex flex-column`" > - <label - v-if="intValue" - class="col-form-label w-100 fw-bold w-100" + <p + v-if="intValue && showLabels" + :id="`PreviewHelp${intId}`" + class="col-form-label fw-bold m-0" > - {{ __("Prévisualisation de l'image") }} - </label> + {{ __("vue.ImageInputComponent.preview_picture") }} + </p> <img v-if="intValue" class="img-fluid" :src="intValue" - :alt="__('Image placeholder')" + :alt="__('Image placeholder ') + intId" :aria-describedby="`PreviewHelp${intId}`" > <small - v-if="intValue" - :id="`PreviewHelp${intId}`" - class="form-text text-muted d-block m-0" + v-if="intOriginalFile" + class="form-text text-body-secondary" > - <span v-if="intOriginalFile"> - {{ humanFileSize(intOriginalFile.size) }} - {{ `largeur ${intOriginalFileDimensions.width}px` }} - {{ `hauteur ${intOriginalFileDimensions.height}px` }}. - </span> + {{ humanFileSize(intOriginalFile.size) }} + {{ `hauteur ${intOriginalFileDimensions.height}px` }} + {{ `largeur ${intOriginalFileDimensions.width}px` }} </small> </div> </div> @@ -135,6 +134,10 @@ role="dialog" data-bs-backdrop="static" data-bs-keyboard="false" + @mousedown="preventMouseDown" + @dragstart.prevent="() => false" + @ondrop.prevent="() => false" + @dragover.prevent="() => false" > <div class="modal-dialog modal-xl" @@ -143,15 +146,15 @@ <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"> - {{ __("Modification d'image avant import") }} + {{ __("vue.ImageInputComponent.change_picture_before_import") }} </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" - :aria-label="__('Fermer la fenêtre')" + :aria-label="__('vue.ImageInputComponent.close_window')" data-bs-toggle="tooltip" - :title="__('Fermer la fenêtre sans valider le contenu')" + :title="__('vue.ImageInputComponent.close_window_without_validation')" /> </div> <div class="modal-body"> @@ -165,77 +168,77 @@ :title="__('Réinitialiser l\'image')" @click.prevent="reset()" > - <i class="fa fa-sync-alt" /> + <FontAwesomeIcon icon="fa-solid fa-sync-alt" /> </button> </div> <div class="btn-group me-4 mt-2"> <button class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Zoom avant')" + :title="__('vue.ImageInputComponent.zoom_in')" @click.prevent="zoom(0.1)" > - <i class="fa fa-search-plus" /> + <FontAwesomeIcon icon="fa-solid fa-search-plus" /> </button> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Zoom arrière')" + :title="__('vue.ImageInputComponent.zoom_out')" @click.prevent="zoom(-0.1)" > - <i class="fa fa-search-minus" /> + <FontAwesomeIcon icon="fa-solid fa-search-minus" /> </a> </div> <div class="btn-group me-4 mt-2"> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Déplacer vers la gauche')" + :title="__('vue.ImageInputComponent.move_left')" @click.prevent="move(-10, 0)" > - <i class="fa fa-arrow-left" /> + <FontAwesomeIcon icon="fa-solid fa-arrow-left" /> </a> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Déplacer vers la droite')" + :title="__('vue.ImageInputComponent.move_right')" @click.prevent="move(10, 0)" > - <i class="fa fa-arrow-right" /> + <FontAwesomeIcon icon="fa-solid fa-arrow-right" /> </a> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Déplacer vers le haut')" + :title="__('vue.ImageInputComponent.move_up')" @click.prevent="move(0, -10)" > - <i class="fa fa-arrow-up" /> + <FontAwesomeIcon icon="fa-solid fa-arrow-up" /> </a> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Déplacer vers le bas')" + :title="__('vue.ImageInputComponent.move_down')" @click.prevent="move(0, 10)" > - <i class="fa fa-arrow-down" /> + <FontAwesomeIcon icon="fa-solid fa-arrow-down" /> </a> </div> <div class="btn-group me-4 mt-2"> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Mirroir Horizontal')" + :title="__('vue.ImageInputComponent.mirror_horizontal')" @click.prevent="scale(true)" > - <i class="fa fa-arrows-alt-h" /> + <FontAwesomeIcon icon="fa-solid fa-arrows-alt-h" /> </a> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Mirroir Vertical')" + :title="__('vue.ImageInputComponent.mirror_vertical')" @click.prevent="scale(false)" > - <i class="fa fa-arrows-alt-v" /> + <FontAwesomeIcon icon="fa-solid fa-arrows-alt-v" /> </a> </div> </div> @@ -244,23 +247,23 @@ <div class="col"> <div class="form-group d-flex flex-row"> <div class="rotate-button"> - <span class="text-dark">{{ __("Rotation") }} :</span> + <span class="text-dark">{{ __("vue.ImageInputComponent.rotation") }} :</span> <div class="btn-group mt-1"> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Rotation sens anti-horaire')" + :title="__('vue.ImageInputComponent.rotate_rewind')" @click.prevent="rotate(-45)" > - <i class="fa fa-undo-alt" /> + <FontAwesomeIcon icon="fa-solid fa-undo-alt" /> </a> <a class="btn btn-primary" data-bs-toggle="tooltip" - :title="__('Rotation sens horaire')" + :title="__('vue.ImageInputComponent.rotate')" @click.prevent="rotate(45)" > - <i class="fa fa-redo-alt" /> + <FontAwesomeIcon icon="fa-solid fa-redo-alt" /> </a> </div> </div> @@ -268,15 +271,16 @@ <label for="range" class="form-label me-4" - >{{ - __(":deg degrès", { - deg: String(intRotationText), - }) - }} + > + {{ + __("vue.ImageInputComponent.degres", { + deg: String(intRotationText), + }) + }} </label> <input ref="rotationSlider" - @input.stop="rotationChange($event as Event)" + @input.stop="rotationChange" @change.stop=" rotateTo( Number.parseInt( @@ -305,7 +309,7 @@ </div> <div ref="previewBox" - class="col-12 col-md-6 p-0 bg-light preview-image" + class="col-12 col-md-6 p-0 bg-light preview-img" > <div :id="`Preview${intId}`" @@ -320,21 +324,21 @@ type="button" class="btn btn-secondary" data-bs-dismiss="modal" - :aria-label="__('Fermer la fenêtre sans valider le contenu')" + :aria-label="__('vue.ImageInputComponent.close_window_without_validation')" data-bs-toggle="tooltip" - :title="__('Fermer la fenêtre sans valider le contenu')" + :title="__('vue.ImageInputComponent.close_window_without_validation')" > - {{ __("Fermer") }} + {{ __("vue.ImageInputComponent.close_window") }} </button> <button - @click.prevent="exportToBlob" + @click.prevent="exportCropperFile" type="button" class="btn btn-primary" data-bs-toggle="tooltip" data-bs-dismiss="modal" - :title="__('Valider le contenu et fermer la fenêtre')" + :title="__('vue.ImageInputComponent.close_window_and_validate')" > - {{ __("Valider") }} + {{ __("vue.ImageInputComponent.validate") }} </button> </div> </div> @@ -356,15 +360,15 @@ <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"> - {{ __("Prévisualisation") }} + {{ __("vue.ImageInputComponent.preview") }} </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" - :aria-label="__('Fermer la fenêtre')" + :aria-label="__('vue.ImageInputComponent.close_window')" data-bs-toggle="tooltip" - :title="__('Fermer la fenêtre sans valider le contenu')" + :title="__('vue.ImageInputComponent.close_window_without_validation')" /> </div> <div class="modal-body"> @@ -373,8 +377,8 @@ <div class="col-12 text-center"> <small :id="`PreviewHelp${intId}`" - class="form-text text-muted d-block" - >{{ __("Prévisualisation de l'image") }}</small> + class="form-text text-body-secondary d-block" + >{{ __("vue.ImageInputComponent.preview_picture") }}</small> <img class="img-fluid" :src="intValue" @@ -392,9 +396,10 @@ </template> <script lang="ts"> -import { defineComponent } from "vue"; +import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import Cropper from "cropperjs"; -import { Tooltip } from "bootstrap"; +import { defineComponent } from "vue"; +import bsTooltips from "../../modules/bsTooltips"; import trans from "../../modules/trans"; const UNITS = [ @@ -408,30 +413,34 @@ const UNITS = [ const BYTES_PER_KB = 1024; export default defineComponent({ - mixins: [trans], - emits: ["browseFile"], + components: { + FontAwesomeIcon, + }, + mixins: [trans, bsTooltips], + emits: { + browseFile: (intId: string) => { + intId; + return true; + }, + imageFile: (file: File | null) => { + file; + return true; + }, + }, mounted() { const json = String(this.$attrs.json ?? ""); - // * INIT Bootstrap tooltips - let tooltipTriggerList = [].slice.call( - document.querySelectorAll(".image-input [data-bs-toggle=\"tooltip\"]") - ); - tooltipTriggerList.map(function (tooltipTriggerEl) { - return new Tooltip(tooltipTriggerEl, { - delay: { show: 1000, hide: 300 }, - }); - }); + this.initTooltips(); if (json.length) { // * Init uppon Laravel Blade const data = JSON.parse(json); this.intId = data.id; this.intName = data.name; this.intHelper = data.helper ?? ""; - this.intWidth = data.width; - this.intHeight = data.height; + this.intWidth = Number.parseInt(String(data.width)); + this.intHeight = Number.parseInt(String(data.height)); this.intValue = String(data.value); if (this.intValue.length) { - this.intValueFileName = this.intValue; + this.intValueFileName = this.intValue.replace(/^\/|^/, ""); this.intValue = this.intValue.replace(/^\/|^/, "/"); } if (data.preview !== undefined) { @@ -452,7 +461,7 @@ export default defineComponent({ this.intHeight = this.height; this.intValue = this.value; if (this.intValue.length) { - this.intValueFileName = this.intValue; + this.intValueFileName = this.intValue.replace(/^\/|^/, ""); this.intValue = this.intValue.replace(/^\/|^/, "/"); } this.intPreview = this.preview; @@ -464,12 +473,16 @@ export default defineComponent({ props: { id: { type: String, - default: "", + default: String(Math.pow(10, 16) / Math.random()), }, required: { type: Boolean, default: false, }, + showLabels: { + type: Boolean, + default: true, + }, name: { type: String, default: "", @@ -531,7 +544,7 @@ export default defineComponent({ return { intId: "", intValue: "", - intValueFileName: this.__("Sélectionnez une image"), + intValueFileName: this.__("vue.ImageInputComponent.choose_a_file"), intHelper: "", intName: "", intRequired: true, @@ -583,11 +596,15 @@ export default defineComponent({ preview: `#Preview${this.intId}`, }; }, + /** Removes prepended slash */ + submitIntValue(): string { + return this.intValue.replace(/^\/|^/, ""); + }, }, watch: { intRotationValue(value) { - if (!(this.intCropper instanceof Cropper)) { - throw new Error("cropped not initialized"); + if (!this.intCropper) { + return; } this.intCropper.rotateTo(value); }, @@ -596,12 +613,65 @@ export default defineComponent({ this.intHasImage = true; } }, - value() { - this.intValue = this.value.replace(/^\/|^/, "/"); - this.intValueFileName = this.value; + value: { + deep: true, + immediate: true, + handler(value: string) { + // * Ignore non prop usage. + if (String(this.$attrs.json ?? "").length) { + return; + } + if (!value.length) { + this.$nextTick(() => { + this.removeFile(); + }); + return; + } else { + this.intHasImage = true; + } + // * Using browse event, If user changed imagem recompile blob (File Upload storage strategy) + if (this.intBrowseEvent && this.intHasImage) { + const self = this, + actualImage = this.$refs.actualImage as HTMLInputElement, + container = new DataTransfer(); + this.$nextTick(() => { + this.intValue = value.replace(/^\/|^/, "/"); + this.intValueFileName = value.replace(/^\/|^/, ""); + fetch(this.intValue) + .then((response) => { + self.intOriginalFileName = response.url.substring( + response.url.lastIndexOf("/") + 1 + ); + return response.blob(); + }) + .then((blob: Blob) => { + if (!actualImage.files) { + throw new Error("3- missing files list"); + } + this.fetchDataUrlImageSizes(self.intValue); + const file = new File([blob], this.intValueFileName, { + type: "image/png", + lastModified: new Date().getTime(), + }); + this.intHasImage = true; + this.intOriginalFile = file; + this.$emit("imageFile", file); + container.items.add(file); + actualImage.files = container.files; + this.changedImage(); + }); + }); + } + }, }, }, methods: { + preventMouseDown(e: MouseEvent) { + if ((e.target as HTMLElement)?.id !== "range") { + e.preventDefault(); + return false; + } + }, previewStyleCompute() { const previewBox = this.$refs.previewBox as HTMLElement, style = window.getComputedStyle(previewBox), @@ -615,25 +685,25 @@ export default defineComponent({ )}px;height:${targetHeight.toFixed(3)}px;`; }, reset() { - if (!(this.intCropper instanceof Cropper)) { + if (!this.intCropper) { return; } this.intCropper.reset(); }, zoom(v: number) { - if (!(this.intCropper instanceof Cropper)) { + if (!this.intCropper) { return; } this.intCropper.zoom(v); }, move(x: number, y: number) { - if (!(this.intCropper instanceof Cropper)) { + if (!this.intCropper) { return; } this.intCropper.move(x, y); }, scale(horizontal: boolean) { - if (!(this.intCropper instanceof Cropper)) { + if (!this.intCropper) { return; } if (horizontal) { @@ -677,20 +747,25 @@ export default defineComponent({ removeFile() { const actualImage = this.$refs.actualImage as HTMLInputElement; actualImage.value = ""; - this.intValueFileName = this.__("Sélectionnez une image"); + this.intValueFileName = this.__("vue.ImageInputComponent.choose_a_file"); this.intValue = ""; + this.intOriginalFileName = ""; + this.intOriginalFile = null; + this.intHasModdedImage = false; + this.intOriginalFileDimensions = { + height: 0, + width: 0, + }; + // * To overload watcher for intValue + this.$nextTick(() => (this.intHasImage = false)); + this.$emit("imageFile", null); }, - changedImage(e: Event) { + changedImage() { const self = this, - reader = new FileReader(); - const el = e.target; - if (!el || !(el instanceof HTMLInputElement)) { - throw new Error( - "confirmDoneJS can only be executed on an exising form" - ); - } - if (!el.files) { - throw new Error(); + reader = new FileReader(), + actualImage = this.$refs.actualImage as HTMLInputElement; + if (!actualImage.files) { + throw new Error("missing files list"); } self.intHasImage = true; reader.addEventListener( @@ -701,18 +776,22 @@ export default defineComponent({ }, false ); - if (el.files[0]) { - self.intOriginalFile = el.files[0]; - reader.readAsDataURL(el.files[0]); - reader.onloadend = () => + + if (actualImage.files[0]) { + self.intOriginalFile = actualImage.files[0]; + self.intOriginalFileName = actualImage.files[0].name; + reader.readAsDataURL(actualImage.files[0]); + reader.onloadend = () => { this.fetchDataUrlImageSizes(String(reader.result)); - this.intValueFileName = el.files[0].name; + this.exportToBlob(); + }; + this.intValueFileName = actualImage.files[0].name; } }, prepareImageEditor(e: Event) { - const self = this, - actualImage = this.$refs.actualImage as HTMLInputElement, + const actualImage = this.$refs.actualImage as HTMLInputElement, imgEditor = this.$refs.imgEditor as HTMLImageElement, + self = this, createCropper = () => { if (self.intCropper) { self.intCropper.destroy(); @@ -720,24 +799,24 @@ export default defineComponent({ self.intCropper = new Cropper(imgEditor, self.cropperOption); }; - if (!self.browseEvent) { + if (!this.browseEvent) { if (!actualImage || !actualImage.files) { throw new Error("actualImage is not defined"); } - self.intOriginalFile = actualImage.files[0]; - self.intOriginalFileName = actualImage.files[0].name; + this.intOriginalFile = actualImage.files[0]; + this.intOriginalFileName = actualImage.files[0].name; imgEditor.src = URL.createObjectURL(actualImage.files[0]); - self.previewStyleCompute(); + this.previewStyleCompute(); this.$nextTick(() => createCropper()); return; } e.preventDefault(); this.$nextTick(() => { - fetch(self.value.replace(/^\/|^/, "/")) + fetch(this.value.replace(/^\/|^/, "/")) .then((response) => { - self.intOriginalFileName = response.url.substring( + this.intOriginalFileName = response.url.substring( response.url.lastIndexOf("/") + 1 ); return response.blob(); @@ -745,8 +824,8 @@ export default defineComponent({ .then((blob: Blob) => { imgEditor.src = URL.createObjectURL(blob); - self.previewStyleCompute(); - self.$nextTick(() => createCropper()); + this.previewStyleCompute(); + this.$nextTick(createCropper); }); }); }, @@ -781,26 +860,29 @@ export default defineComponent({ self.intOriginalFileDimensions.height = img.height; } }, - exportToBlob() { - const self = this, - actualImage = this.$refs.actualImage as HTMLInputElement, - container = new DataTransfer(); - if (!(self.intCropper instanceof Cropper)) { + exportCropperFile() { + this.intHasModdedImage = true; + if (!this.intCropper) { return; } - if (!actualImage.files) { - throw new Error(); - } - self.intHasModdedImage = true; - self.intValue = self.intCropper + this.intValue = this.intCropper .getCroppedCanvas({ fillColor: "rgba(0, 0, 0, 0)", - width: self.intWidth, - height: self.intHeight, + width: this.intWidth, + height: this.intHeight, imageSmoothingEnabled: true, imageSmoothingQuality: "high", }) .toDataURL("image/png"); + this.exportToBlob(); + }, + exportToBlob() { + const self = this, + actualImage = this.$refs.actualImage as HTMLInputElement, + container = new DataTransfer(); + if (!actualImage.files) { + throw new Error("2- missing files list"); + } this.fetchDataUrlImageSizes(self.intValue); const file = new File( [self.dataURLtoBlob(self.intValue)], @@ -811,6 +893,7 @@ export default defineComponent({ } ); this.intOriginalFile = file; + this.$emit("imageFile", file); container.items.add(file); actualImage.files = container.files; }, @@ -835,40 +918,45 @@ export default defineComponent({ </script> <style lang="scss" scopped> -@import "../../../../node_modules/cropperjs/dist/cropper.css"; -.image-input { +@import "~/cropperjs/dist/cropper.css"; + +.image-input-vue { + /* Ensure the size of the image fit the container perfectly */ .image-modification { display: block; + + /* This rule is very important, please don't ignore this */ max-width: 100%; } - .rotate-button { + .rotateButton { display: flex; flex-direction: column; } .rotate-drag { display: flex; - width: 100%; flex-direction: column-reverse; - input { + width: 100%; + & > input { width: 100%; } } - .preview-image { + .preview-img { position: relative; - div { + & > div { position: relative; + overflow: hidden; + border: 1px solid black; top: 50%; left: 50%; - overflow: hidden; - border: 1px solid #000; transform: translateX(-50%) translateY(-50%); } } - .right-aligned { - overflow: hidden !important; + input.right-aligned { direction: ltr !important; + overflow: hidden !important; } - .right-aligned:not(:focus) { + input.right-aligned:not(:focus) { + direction: rtl !important; text-align: left !important; text-overflow: ellipsis !important; } diff --git a/resources/ts/components/bo/ImagesInputComponent.vue b/resources/ts/bo/components/ImagesInputComponent.vue similarity index 100% rename from resources/ts/components/bo/ImagesInputComponent.vue rename to resources/ts/bo/components/ImagesInputComponent.vue diff --git a/resources/ts/components/bo/InputTextAutoComponent.vue b/resources/ts/bo/components/InputTextAutoComponent.vue similarity index 100% rename from resources/ts/components/bo/InputTextAutoComponent.vue rename to resources/ts/bo/components/InputTextAutoComponent.vue diff --git a/resources/ts/components/bo/ListItemComponent.vue b/resources/ts/bo/components/ListItemComponent.vue similarity index 100% rename from resources/ts/components/bo/ListItemComponent.vue rename to resources/ts/bo/components/ListItemComponent.vue diff --git a/resources/ts/components/bo/TaggableDropdownComponent.vue b/resources/ts/bo/components/TaggableDropdownComponent.vue similarity index 99% rename from resources/ts/components/bo/TaggableDropdownComponent.vue rename to resources/ts/bo/components/TaggableDropdownComponent.vue index 97a980f..ed42b29 100644 --- a/resources/ts/components/bo/TaggableDropdownComponent.vue +++ b/resources/ts/bo/components/TaggableDropdownComponent.vue @@ -268,7 +268,7 @@ export default defineComponent({ } &tag { padding: 0.1rem 0.3rem !important; - background-color: var(--bs-blue) !important; + background-color: var(--bs-primary) !important; border-radius: 0.375rem !important; } &selected-item { diff --git a/resources/ts/bo/components/WordCounterComponent.vue b/resources/ts/bo/components/WordCounterComponent.vue new file mode 100644 index 0000000..10887a0 --- /dev/null +++ b/resources/ts/bo/components/WordCounterComponent.vue @@ -0,0 +1,122 @@ +<template> + <div class="word-counter-varchar d-flex flex-row justify-content-around align-items-center w-100"> + <span> + {{ __("Mots") }} : <b>{{ inTwords }}</b> + </span> + <span> + {{ __("Caractères") }} : <b>{{ inTchars }}</b> + </span> + </div> +</template> + +<script lang="ts"> +import { defineComponent } from "vue"; +import trans from "../../modules/trans"; + +export default defineComponent({ + mixins: [trans], + mounted() { + const json = String(this.$attrs.json ?? "{}"); + const data = JSON.parse(json); + this.inTid = String(this.id); + if (data.id) { + this.inTid = data.id; + } + }, + props: { + id: { + type: String, + default: null, + }, + }, + data(): { + inTid: string; + inTwords: number; + inTchars: number; + inTinput: HTMLInputElement | HTMLTextAreaElement | null; + } { + return { + inTid: "", + inTwords: 0, + inTchars: 0, + inTinput: null, + }; + }, + watch: { + id() { + this.inTid = this.id; + }, + inTid() { + if (!this.inTid) { + return; + } + this.$nextTick(() => { + const input = document.getElementById(this.inTid); + if ( + !input || + !( + input instanceof HTMLInputElement || + input instanceof HTMLTextAreaElement + ) + ) { + throw new Error(`${this.inTid} is not a input or textarea`); + } + this.inTinput = input; + }); + }, + inTinput() { + if ( + !this.inTinput || + !( + this.inTinput instanceof HTMLInputElement || + this.inTinput instanceof HTMLTextAreaElement + ) + ) { + throw new Error(`${this.inTid} is not a input or textarea`); + } + this.inTinput.addEventListener("input", (e) => { + const el = e.target; + if ( + !el || + !(el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) + ) { + throw new Error(`${this.inTid} is not a input or textarea`); + } + this.updateValues(el.value); + }); + this.updateValues(this.inTinput.value); + }, + }, + methods: { + updateValues(string: string) { + let chars, words; + [words, chars] = this.calculateValues(string); + this.inTwords = words; + this.inTchars = chars; + }, + calculateValues(string: string) { + const arr = string.split(" "); + return [arr.filter((word) => word !== "").length, string.length]; + }, + }, +}); +</script> + +<style lang="scss"> +#word-counter + input[type="text"], +.word-counter + input[type="text"], +#word-counter + textarea, +.word-counter + textarea, +#word-counter-varchar + textarea, +.word-counter-varchar + textarea { + border-radius: 0 0 0.375rem 0.375rem; +} +.word-counter-varchar { + color: initial; + border: 1px solid #dee2e6; + border-bottom: 0; + background-color: #fafafa; + border-top-left-radius: 0.375rem; + border-top-right-radius: 0.375rem; +} +</style> diff --git a/resources/ts/components/shims-vue.d.ts b/resources/ts/bo/components/shims-vue.d.ts similarity index 89% rename from resources/ts/components/shims-vue.d.ts rename to resources/ts/bo/components/shims-vue.d.ts index 166cfb8..d2833d6 100644 --- a/resources/ts/components/shims-vue.d.ts +++ b/resources/ts/bo/components/shims-vue.d.ts @@ -1,5 +1,6 @@ declare module "*.vue" { import type { DefineComponent } from "vue"; const component: DefineComponent<{}, {}, any>; + // @ts-ignore export default component; } diff --git a/resources/ts/bo/CkUploadAdaptater.ts b/resources/ts/bo/utilities/CkUploadAdaptater.ts similarity index 98% rename from resources/ts/bo/CkUploadAdaptater.ts rename to resources/ts/bo/utilities/CkUploadAdaptater.ts index 3661758..304ee71 100644 --- a/resources/ts/bo/CkUploadAdaptater.ts +++ b/resources/ts/bo/utilities/CkUploadAdaptater.ts @@ -1,5 +1,5 @@ import axios, { CancelTokenSource } from "axios"; -import route from "../modules/route"; +import route from "./../../modules/route"; class CKUploadAdaptater { route: string | null = ""; diff --git a/resources/ts/utilities/bootstrap.ts b/resources/ts/bo/utilities/bootstrap.ts similarity index 66% rename from resources/ts/utilities/bootstrap.ts rename to resources/ts/bo/utilities/bootstrap.ts index 5d537f6..2419164 100644 --- a/resources/ts/utilities/bootstrap.ts +++ b/resources/ts/bo/utilities/bootstrap.ts @@ -1,6 +1,6 @@ import axios from "axios"; - -const bootstrap = require("bootstrap"); +import * as bootstrap from "bootstrap"; +import bsTooltips from "./../../modules/bsTooltips"; /** * We'll load the axios HTTP library which allows us to easily issue requests @@ -18,10 +18,4 @@ axios.defaults.headers.common = { window.axios = axios; window.bootstrap = bootstrap; -// enable bs tooltips -const tooltipTriggerList = [].slice.call( - document.querySelectorAll("[data-bs-toggle=\"tooltip\"]") -); -tooltipTriggerList.map(function (tooltipTriggerEl) { - return new bootstrap.Tooltip(tooltipTriggerEl); -}); +bsTooltips.methods.initTooltips(); diff --git a/resources/ts/bo/utilities/fontawesome.ts b/resources/ts/bo/utilities/fontawesome.ts new file mode 100644 index 0000000..a683baf --- /dev/null +++ b/resources/ts/bo/utilities/fontawesome.ts @@ -0,0 +1,81 @@ +import { config, dom, library } from "@fortawesome/fontawesome-svg-core"; +import { + faArrowAltCircleDown, + faArrowAltCircleUp, + faArrowDown, + faArrowLeft, + faArrowLeftLong, + faArrowRight, + faArrowRightFromBracket, + faArrowUp, + faArrowsAltH, + faArrowsAltV, + faBackspace, + faCheck, + faChevronLeft, + faChevronRight, + faCircleCheck, + faCircleExclamation, + faCircleNotch, + faCircleXmark, + faCrop, + faEraser, + faEye, + faFolderOpen, + faListUl, + faPencil, + faPlus, + faQuestionCircle, + faRedoAlt, + faSearch, + faSearchMinus, + faSearchPlus, + faSliders, + faSyncAlt, + faTimes, + faTrash, + faUndoAlt, + faWandMagic, +} from "@fortawesome/free-solid-svg-icons"; + +config.autoReplaceSvg = false; +library.add(faEraser); +library.add(faArrowLeftLong); +library.add(faPlus); +library.add(faTrash); +library.add(faEye); +library.add(faFolderOpen); +library.add(faCrop); +library.add(faQuestionCircle); +library.add(faCheck); +library.add(faUndoAlt); +library.add(faRedoAlt); +library.add(faSyncAlt); +library.add(faSearchPlus); +library.add(faSearchMinus); +library.add(faArrowLeft); +library.add(faArrowRight); +library.add(faArrowUp); +library.add(faArrowDown); +library.add(faArrowsAltH); +library.add(faArrowsAltV); +library.add(faWandMagic); +library.add(faPencil); +library.add(faTimes); +library.add(faBackspace); +library.add(faSearch); +library.add(faArrowRightFromBracket); +library.add(faArrowAltCircleDown); +library.add(faArrowAltCircleUp); +library.add(faListUl); +library.add(faCircleCheck); +library.add(faCircleExclamation); + +// Front +library.add(faChevronLeft); +library.add(faChevronRight); +library.add(faCircleXmark); +library.add(faCircleNotch); +library.add(faSliders); + +dom.watch(); diff --git a/resources/ts/bo/utilities/vue-bo.ts b/resources/ts/bo/utilities/vue-bo.ts new file mode 100644 index 0000000..3814962 --- /dev/null +++ b/resources/ts/bo/utilities/vue-bo.ts @@ -0,0 +1,54 @@ +import { App, Component, createApp } from "vue"; + +document.addEventListener("DOMContentLoaded", () => { + const setupApp = (app: App<Element>) => { + app.config.globalProperties.window = window; + app.config.globalProperties.document = document; + }; + + // Register components + const vues = import.meta.glob("./../components/*.vue") as Record< + string, + () => Promise<{ default: Component }> + >; + for (const vueCptName in vues) { + const vueCptPromise = vues[vueCptName]; + let htmlKey = vueCptName.split("/").pop(); + if (!htmlKey) { + throw new Error(`Cannot load ${vueCptName}`); + } + htmlKey = htmlKey + .split(".")[0] + .replace(/\.?([A-Z])/g, function (x, y) { + return "-" + y.toLowerCase(); + }) + .replace(/^-/, "") + .replace("-component", ""); + + const el = document.getElementById(htmlKey), + elGroup = document.getElementsByClassName(htmlKey); + // * Init using ID + if (el) { + vueCptPromise().then((vueParsedFile) => { + const app = createApp(vueParsedFile.default, { + json: el.dataset.json ?? {}, + }); + setupApp(app); + app.mount(el); + }); + } + // * Init Using class + for (const grpEl of elGroup) { + // * Hack to prevent loop weirdness + vueCptPromise().then((vueParsedFile) => { + setTimeout(() => { + const app = createApp(vueParsedFile.default, { + json: (grpEl as HTMLElement).dataset.json ?? {}, + }); + setupApp(app); + app.mount(grpEl); + }, 500); + }); + } + } +}); diff --git a/resources/ts/bo/vue-bo.ts b/resources/ts/bo/vue-bo.ts deleted file mode 100644 index a5368fc..0000000 --- a/resources/ts/bo/vue-bo.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { App, createApp } from "vue"; - -document.addEventListener("DOMContentLoaded", () => { - const setupApp = (app: App<Element>) => { - app.config.globalProperties.window = window; - app.config.globalProperties.document = document; - }; - - // Register components - const vues = require.context("./../components/bo", true, /\.vue$/i); - vues.keys().map((key) => { - let htmlKey = key.split("/").pop(); - if (!htmlKey) { - throw new Error(`Cannot load ${key}`); - } - htmlKey = htmlKey - .split(".")[0] - .replace(/\.?([A-Z])/g, function (x, y) { - return "-" + y.toLowerCase(); - }) - .replace(/^-/, "") - .replace("-component", ""); - - const el = document.getElementById(htmlKey), - elGroup = document.getElementsByClassName(htmlKey); - // * Init using ID - if (el) { - const app = createApp(vues(key).default, { - json: el.dataset.json ?? {}, - }); - setupApp(app); - app.mount(el); - } - // * Init Using class - for (const grpEl of elGroup) { - // * Hack to prevent loop weirdness - setTimeout(() => { - const app = createApp(vues(key).default, { - json: (grpEl as HTMLElement).dataset.json ?? {}, - }); - setupApp(app); - app.mount(grpEl); - }, 500); - } - }); -}); diff --git a/resources/ts/components/bo/.gitkeep b/resources/ts/components/bo/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/resources/ts/components/bo/CkEditorComponent.vue b/resources/ts/components/bo/CkEditorComponent.vue deleted file mode 100644 index d390fd2..0000000 --- a/resources/ts/components/bo/CkEditorComponent.vue +++ /dev/null @@ -1,201 +0,0 @@ -<template> - <div> - <div ref="wordCounter" /> - <div ref="ckeditor" /> - <input - :id="internalId" - class="form-control" - type="hidden" - :name="name" - :value="internalText" - :required="internalRequired" - > - </div> -</template> - -<script lang="ts"> -import { defineComponent } from "vue"; -import trans from "../../modules/trans"; -import "../../../js/vendor/ckeditor/build/ckeditor"; -import { CKUploadAdaptater } from "../../bo/CkUploadAdaptater"; - -export default defineComponent({ - emits: ["input"], - mixins: [trans], - beforeMount() { - if (!this.$attrs.json) { - throw new Error("this component requires json"); - } - }, - mounted() { - const json = String(this.$attrs.json ?? "{}"), - data = JSON.parse(json); - this.name = data.name; - this.internalText = data.text ? String(data.text) : ""; - this.internalId = data.id ? data.id : ""; - this.internalRequired = Boolean(data.required); - this.makeSuperBuild(); - }, - data(): { - name: string; - internalText: string; - internalId: string; - internalRequired: boolean; - // @ts-ignore - editor: ClassicEditor | null; - words: number; - chars: number; - } { - return { - name: "", - internalText: "", - internalId: "", - internalRequired: false, - editor: null, - words: 0, - chars: 0, - }; - }, - watch: { - dbtext() { - if (this.internalText != this.dbtext) { - this.internalText = this.dbtext; - if (this.editor) { - this.editor.setData(this.internalText); - } - } - }, - }, - methods: { - makeSuperBuild() { - const self = this, - ckeditor = this.$refs.ckeditor as HTMLElement, - wordCounter = this.$refs.wordCounter as HTMLElement; - // @ts-ignore - ClassicEditor.create(ckeditor, { - extraPlugins: [ - // @ts-ignore - (editor) => { - editor.plugins.get("FileRepository").createUploadAdapter = ( - // @ts-ignore - loader - ) => { - // Configure the URL to the upload script in your back-end here! - return new CKUploadAdaptater(loader); - }; - }, - ], - wordCount: { - container: wordCounter, - // @ts-ignore - onUpdate: (stats) => { - this.chars = stats.characters; - this.words = stats.words; - }, - }, - mediaEmbed: { - previewsInData: false, - removeProviders: [ - "instagram", - "twitter", - "googleMaps", - "flickr", - "facebook", - "dailymotion", - "spotify", - ], - }, - toolbar: { - items: [ - "heading", - "|", - "bold", - "italic", - "underline", - "link", - "bulletedList", - "numberedList", - "|", - "outdent", - "indent", - "alignment", - "|", - "undo", - "redo", - "|", - "blockQuote", - "|", - "insertTable", - "tableColumn", - "tableRow", - "mergeTableCells", - "|", - "fontColor", - "fontFamily", - "fontSize", - "horizontalLine", - "|", - "removeFormat", - "|", - "sourceEditing", - ], - }, - table: { - contentToolbar: [ - "tableColumn", - "tableRow", - "mergeTableCells", - "tableProperties", - "tableCellProperties", - "toggleTableCaption", - ], - }, - language: "fr", - }) - // @ts-ignore - .then((editor: ClassicEditor) => { - self.editor = editor; - editor.setData(this.internalText); - editor.model.document.on("change:data", () => { - // * Keep track of internal editor - let data = editor.getData(); - self.internalText = data; - self.$emit("input", data); - }); - }) - // @ts-ignore - .catch((error) => { - console.error("Oops, something went wrong!"); - console.error( - "Please, report the following error on https://github.com/ckeditor/ckeditor5/issues with the build id and the error stack trace:" - ); - console.warn("Build id: x0tjc6omqq4d-iydt761tuj51"); - console.error(error); - }); - }, - }, -}); -</script> - -<style lang="scss"> -@import url("./../../../js/vendor/ckeditor/build/styles.css"); -.ck-rounded-corners { - border-radius: 0 0 0.375rem 0.375rem !important; -} -.ck-word-count { - border: 1px solid #c4c4c4; - border-bottom: 0; - background-color: #fafafa; - border-top-left-radius: 0.375rem; - border-top-right-radius: 0.375rem; - color: initial; -} -.ck-content { - transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; -} -.ck-focused { - border-color: #86b7fe !important; - box-shadow: 0 0 0 0.25rem rgb(13 110 253 / 25%) !important; - outline: 0 !important; -} -</style> diff --git a/resources/ts/components/bo/WordCounterComponent.vue b/resources/ts/components/bo/WordCounterComponent.vue deleted file mode 100644 index 6029500..0000000 --- a/resources/ts/components/bo/WordCounterComponent.vue +++ /dev/null @@ -1,119 +0,0 @@ -<template> - <div class="d-flex flex-row justify-content-around align-items-center w-100"> - <span>{{ __("Mots") }} : <b>{{ intWords }}</b></span> - <span>{{ __("Caractères") }} : <b>{{ intChars }}</b></span> - </div> -</template> - -<script lang="ts"> -import { defineComponent } from "vue"; -import trans from "./../../modules/trans"; - -export default defineComponent({ - mixins: [trans], - mounted() { - const json = String(this.$attrs.json ?? "{}"); - const data = JSON.parse(json); - this.intId = String(this.id); - if (data.id) { - this.intId = data.id; - } - }, - props: { - id: { - type: String, - default: null, - }, - }, - data(): { - intId: string; - intWords: number; - intChars: number; - intInput: HTMLInputElement | HTMLTextAreaElement | null; - } { - return { - intId: "", - intWords: 0, - intChars: 0, - intInput: null, - }; - }, - watch: { - id() { - this.intId = this.id; - }, - intId() { - if (!this.intId) { - return; - } - this.$nextTick(() => { - const input = document.getElementById(this.intId); - if ( - !input || - !( - input instanceof HTMLInputElement || - input instanceof HTMLTextAreaElement - ) - ) { - throw new Error(`${this.intId} is not a input or textarea`); - } - this.intInput = input; - }); - }, - intInput() { - if ( - !this.intInput || - !( - this.intInput instanceof HTMLInputElement || - this.intInput instanceof HTMLTextAreaElement - ) - ) { - throw new Error(`${this.intId} is not a input or textarea`); - } - this.intInput.addEventListener("input", (e) => { - const el = e.target; - if ( - !el || - !(el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) - ) { - throw new Error(`${this.intId} is not a input or textarea`); - } - this.updateValues(el.value); - }); - this.updateValues(this.intInput.value); - }, - }, - methods: { - updateValues(string: string) { - let chars, words; - [words, chars] = this.calculateValues(string); - this.intWords = words; - this.intChars = chars; - }, - calculateValues(string: string) { - const arr = string.split(" "); - return [arr.filter((word) => word !== "").length, string.length]; - }, - }, -}); -</script> - -<style lang="scss"> -.word-counter { - border: 1px solid #c4c4c4; - border-bottom: 0; - background-color: #fafafa; - border-top-left-radius: 0.375rem; - border-top-right-radius: 0.375rem; - color: initial; -} -.ck-word-count { - display: flex; - flex-direction: row; - justify-content: space-around !important; - border: 1px solid #c4c4c4; - border-bottom: 0; - background-color: #fafafa; - color: initial; -} -</style> diff --git a/resources/ts/fo/common.ts b/resources/ts/fo/base/common.ts similarity index 95% rename from resources/ts/fo/common.ts rename to resources/ts/fo/base/common.ts index 4e4a7a2..5a4272c 100644 --- a/resources/ts/fo/common.ts +++ b/resources/ts/fo/base/common.ts @@ -1,4 +1,4 @@ -import * as printJS from "print-js"; +import printJS from "print-js"; window.addEventListener("DOMContentLoaded", () => { // BOUTON HAMBURGER @@ -202,11 +202,15 @@ window.addEventListener("DOMContentLoaded", () => { for (const eltButtonPrintProd of eltsButtonPrintProd) { eltButtonPrintProd.addEventListener("click", function () { if (businessSheet) { + const pathname = window.location.pathname; + const pathnameAsArray = pathname.split("/"); + const itemName = pathnameAsArray[pathnameAsArray.length - 1]; setTimeout(() => { // ! Seule solution: imprimer un pdf spécifique pour avoir le rendu souhaité. + // @ts-ignore printJS({ printable: - window.location.pathname + + "produit/" + itemName + "/print-commercial-sheet", type: "pdf", showModal: true, diff --git a/resources/ts/components/fo/AdviceIngredientCalculator.vue b/resources/ts/fo/components/AdviceIngredientCalculator.vue similarity index 100% rename from resources/ts/components/fo/AdviceIngredientCalculator.vue rename to resources/ts/fo/components/AdviceIngredientCalculator.vue diff --git a/resources/ts/components/fo/ContactListProducts.vue b/resources/ts/fo/components/ContactListProducts.vue similarity index 100% rename from resources/ts/components/fo/ContactListProducts.vue rename to resources/ts/fo/components/ContactListProducts.vue diff --git a/resources/ts/components/fo/RangeProductsFilter.vue b/resources/ts/fo/components/RangeProductsFilter.vue similarity index 98% rename from resources/ts/components/fo/RangeProductsFilter.vue rename to resources/ts/fo/components/RangeProductsFilter.vue index 364a6c2..36140d0 100644 --- a/resources/ts/components/fo/RangeProductsFilter.vue +++ b/resources/ts/fo/components/RangeProductsFilter.vue @@ -278,6 +278,7 @@ export default defineComponent({ this.currentSubranges = []; this.ranges = data.ranges; this.productCardHTML = data.productCardHTML; + this.speciesEnum = data.speciesList; this.resetFilters(); this.fetchPaginatedProducts(); @@ -303,6 +304,7 @@ export default defineComponent({ currentSubranges: LaravelModelList; paginator: LaravelPaginator; productList: LaravelModelList; + speciesEnum: any; page: number | null; isLoading: boolean; isVip: boolean; @@ -320,6 +322,7 @@ export default defineComponent({ searchText: "", searchTimer: null, productList: [], + speciesEnum: [], paginator: { current_page: 1, first_page_url: "", @@ -457,7 +460,7 @@ export default defineComponent({ .replaceAll("#SLUG#", String(product.slug)) .replaceAll( "#SPECIES_LABEL#", - String((product.species as LaravelModel).label) + String(this.speciesEnum[product.species as number]) ) .replaceAll( "#FORCEDCOLOR#", @@ -553,7 +556,7 @@ export default defineComponent({ <style lang="scss"> @import "./../../../sass/fo/utilities/mixins"; @import "./../../../sass/fo/utilities/variables"; -@import "./../../../sass/bs-colors"; +@import "./../../../sass/fo/utilities/bootstrap-variables"; .section-products-wrapper { .label-filter { display: inline-flex; diff --git a/resources/ts/components/fo/SaveProductComponent.vue b/resources/ts/fo/components/SaveProductComponent.vue similarity index 100% rename from resources/ts/components/fo/SaveProductComponent.vue rename to resources/ts/fo/components/SaveProductComponent.vue diff --git a/resources/ts/fo/components/shims-vue.d.ts b/resources/ts/fo/components/shims-vue.d.ts new file mode 100644 index 0000000..d2833d6 --- /dev/null +++ b/resources/ts/fo/components/shims-vue.d.ts @@ -0,0 +1,6 @@ +declare module "*.vue" { + import type { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + // @ts-ignore + export default component; +} diff --git a/resources/ts/fo/fo.ts b/resources/ts/fo/fo.ts new file mode 100644 index 0000000..b8a338a --- /dev/null +++ b/resources/ts/fo/fo.ts @@ -0,0 +1,19 @@ +// * ASSETS +import.meta.glob(["./../../assets/images/**"]); + +// * UTILITIES +import "./utilities/bootstrap"; +import "./utilities/fontawesome"; +import "./utilities/vue-fo"; + +// * LIBS +import "./../libs/fancyapp"; +import "./../libs/swiper"; + +// * LDCWEB Cookies +import { LdcwebCn } from "./../libs/ldcweb-cookies"; +window.LdcwebCn = LdcwebCn; + +// * CUSTOM +import "./base/common"; + diff --git a/resources/ts/fo/utilities/bootstrap.ts b/resources/ts/fo/utilities/bootstrap.ts new file mode 100644 index 0000000..2419164 --- /dev/null +++ b/resources/ts/fo/utilities/bootstrap.ts @@ -0,0 +1,21 @@ +import axios from "axios"; +import * as bootstrap from "bootstrap"; +import bsTooltips from "./../../modules/bsTooltips"; + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ +axios.defaults.headers.common = { + Accept: "application/json, text/plain, */*", + "X-Requested-With": "XMLHttpRequest", + "X-CSRF-TOKEN": document + .querySelector("meta[name=\"csrf-token\"]")! + .getAttribute("content"), +}; + +window.axios = axios; +window.bootstrap = bootstrap; + +bsTooltips.methods.initTooltips(); diff --git a/resources/ts/utilities/fontawesome.ts b/resources/ts/fo/utilities/fontawesome.ts similarity index 100% rename from resources/ts/utilities/fontawesome.ts rename to resources/ts/fo/utilities/fontawesome.ts diff --git a/resources/ts/fo/utilities/vue-fo.ts b/resources/ts/fo/utilities/vue-fo.ts new file mode 100644 index 0000000..3814962 --- /dev/null +++ b/resources/ts/fo/utilities/vue-fo.ts @@ -0,0 +1,54 @@ +import { App, Component, createApp } from "vue"; + +document.addEventListener("DOMContentLoaded", () => { + const setupApp = (app: App<Element>) => { + app.config.globalProperties.window = window; + app.config.globalProperties.document = document; + }; + + // Register components + const vues = import.meta.glob("./../components/*.vue") as Record< + string, + () => Promise<{ default: Component }> + >; + for (const vueCptName in vues) { + const vueCptPromise = vues[vueCptName]; + let htmlKey = vueCptName.split("/").pop(); + if (!htmlKey) { + throw new Error(`Cannot load ${vueCptName}`); + } + htmlKey = htmlKey + .split(".")[0] + .replace(/\.?([A-Z])/g, function (x, y) { + return "-" + y.toLowerCase(); + }) + .replace(/^-/, "") + .replace("-component", ""); + + const el = document.getElementById(htmlKey), + elGroup = document.getElementsByClassName(htmlKey); + // * Init using ID + if (el) { + vueCptPromise().then((vueParsedFile) => { + const app = createApp(vueParsedFile.default, { + json: el.dataset.json ?? {}, + }); + setupApp(app); + app.mount(el); + }); + } + // * Init Using class + for (const grpEl of elGroup) { + // * Hack to prevent loop weirdness + vueCptPromise().then((vueParsedFile) => { + setTimeout(() => { + const app = createApp(vueParsedFile.default, { + json: (grpEl as HTMLElement).dataset.json ?? {}, + }); + setupApp(app); + app.mount(grpEl); + }, 500); + }); + } + } +}); diff --git a/resources/ts/fo/vue-fo.ts b/resources/ts/fo/vue-fo.ts deleted file mode 100644 index ef99aac..0000000 --- a/resources/ts/fo/vue-fo.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { App, createApp } from "vue"; - -document.addEventListener("DOMContentLoaded", () => { - const setupApp = (app: App<Element>) => { - app.config.globalProperties.window = window; - app.config.globalProperties.document = document; - }; - - // Register components - const vues = require.context("./../components/fo", true, /\.vue$/i); - vues.keys().map((key) => { - let htmlKey = key.split("/").pop(); - if (!htmlKey) { - throw new Error(`Cannot load ${key}`); - } - htmlKey = htmlKey - .split(".")[0] - .replace(/\.?([A-Z])/g, function (x, y) { - return "-" + y.toLowerCase(); - }) - .replace(/^-/, "") - .replace("-component", ""); - - const el = document.getElementById(htmlKey), - elGroup = document.getElementsByClassName(htmlKey); - // * Init using ID - if (el) { - const app = createApp(vues(key).default, { - json: el.dataset.json ?? {}, - }); - setupApp(app); - app.mount(el); - } - // * Init Using class - for (const grpEl of elGroup) { - // * Hack to prevent loop weirdness - setTimeout(() => { - const app = createApp(vues(key).default, { - json: (grpEl as HTMLElement).dataset.json ?? {}, - }); - setupApp(app); - app.mount(grpEl); - }, 500); - } - }); -}); diff --git a/resources/ts/front.ts b/resources/ts/front.ts deleted file mode 100644 index b94a583..0000000 --- a/resources/ts/front.ts +++ /dev/null @@ -1,15 +0,0 @@ -// UTILITIES -import "./utilities/bootstrap"; -import "./utilities/fontawesome"; -import "./fo/vue-fo"; - -// LIBS -import "./libs/swiper"; -import "./libs/fancyapp"; - -// LDCWEB Cookies -import { LdcwebCn } from "./libs/ldcweb-cookies"; -window.LdcwebCn = LdcwebCn; - -// CUSTOM -import "./fo/common"; diff --git a/resources/ts/modules/bsTooltips.ts b/resources/ts/modules/bsTooltips.ts new file mode 100644 index 0000000..6467bcd --- /dev/null +++ b/resources/ts/modules/bsTooltips.ts @@ -0,0 +1,26 @@ +import type * as bootstrap from "bootstrap"; + +let tooltips: Array<bootstrap.Tooltip> = []; + +export default { + methods: { + initTooltips() { + // Disable tooltips on reboot. + tooltips.forEach((tooltip) => { + tooltip.disable(); + tooltip.hide(); + }); + tooltips = [].slice + .call(document.querySelectorAll("[data-bs-toggle=\"tooltip\"]")) + .map(function (tooltipTriggerEl) { + return new window.bootstrap.Tooltip(tooltipTriggerEl, { + customClass: "large-tooltip", + delay: { + show: 1250, + hide: 0, + }, + }); + }); + }, + }, +}; diff --git a/resources/ts/modules/route.ts b/resources/ts/modules/route.ts index 2ddc37b..955b9aa 100644 --- a/resources/ts/modules/route.ts +++ b/resources/ts/modules/route.ts @@ -1,73 +1,76 @@ const route = { methods: { /** - * Define a route by the data given, - * ex: route('name', { 'parameter': 'value' }). + * Same behavior as laravel route + * + * ! window.__SYSTEM._routes has to be defined + * + * @param routeName The route name. + * @param parameters Parameters, if a parameter name matches a route path level, + * it will be replaced, otherwise it will appear in query. + * @param keepActualQueries Pass this to keep current url queries. + * @param keepActualHashes Pass this to keep current url fragments + * @returns The newly formated string */ route( routeName: string, parameters: Record< string, string | number | Array<string | number> - > = {} + > = {}, + keepActualQueries: boolean = false, + keepActualHashes: boolean = false ): string | null { const routes = route.flattenProperties(window.__SYSTEM._routes); const routeUrl = Object.keys(routes).indexOf(routeName) !== -1 ? (routes[routeName] as string) : null; + + // * Return null if route url could not be found if (!routeUrl) { - return routeUrl; + return null; } - // flatten parameter array - for (const parameterIndex in parameters) { - const parameter = parameters[parameterIndex]; - if (!Array.isArray(parameter)) { - continue; + + const queryParameters: Record<string, number | string> = {}, + url = new URL(window.location.origin), + searchParams = new URL(String(window.location)).searchParams, + hash = window.location.hash; + let pathname = routeUrl.replace(origin, ""); + + // * Replace parameters in path name. + for (const paramName in parameters) { + const paramValue = String(parameters[paramName]); + if (pathname.indexOf(paramName) !== -1) { + // * Replace pathname part with parameter + pathname = pathname.replace(paramName, paramValue); + } else { + // * push parameter to be in queries + queryParameters[paramName] = paramValue; } - delete parameters[parameterIndex]; - parameter.forEach( - (parameter, index) => - (parameters[`${parameterIndex}[${index}]`] = parameter) + } + url.pathname = pathname; + + // * Build query + if (keepActualQueries) { + // * Push actual queries + for (const param of searchParams) { + url.searchParams.set(param[0], param[1]); + } + } + // * Push request queries + for (const paramName in queryParameters) { + url.searchParams.set( + paramName, + String(queryParameters[paramName]) ); - // still append empty entry if empty array - if (!parameter.length) { - parameters[`${parameterIndex}`] = ""; - } } - const flattenParameters = parameters as Record< - string, - string | number - >; - - // copy parameters - const iParameters = Object.assign({}, flattenParameters), - origin = window.location.origin, - url = new URL( - `${origin}${routeUrl.replace(origin, "")}${ - window.location.search - }${window.location.hash}` - ); - - // Replace in path name. - for (const paramName in iParameters) { - const paramValue = flattenParameters[paramName]; - if (url.pathname.indexOf(paramName) !== -1) { - url.pathname = url.pathname.replace( - paramName, - paramValue as string - ); - delete flattenParameters[paramName]; - } + if (keepActualHashes) { + url.hash = hash; } - // Append remaining parameters to url - for (const paramName in flattenParameters) { - const paramValue = flattenParameters[paramName]; - url.searchParams.set(paramName, String(paramValue)); - } - return url.toString(); + return String(url); }, }, flattenProperties( diff --git a/resources/ts/modules/sweetalertConfirm.ts b/resources/ts/modules/sweetalertConfirm.ts index 124421c..ec1ca6b 100644 --- a/resources/ts/modules/sweetalertConfirm.ts +++ b/resources/ts/modules/sweetalertConfirm.ts @@ -1,6 +1,5 @@ // SweetAlert -import Swal, { SweetAlertResult } from "sweetalert2"; -import { SweetAlertOptions } from "sweetalert2"; +import Swal, { SweetAlertOptions, SweetAlertResult } from "sweetalert2"; import * as trans from "../modules/trans"; @@ -31,11 +30,10 @@ export default { cancelButtonText: options.cancelButtonText ?? trans.default.methods.__("Annuler"), - reverseButtons: true, // * Bootstrap Styling customClass: { - confirmButton: "btn btn-lg btn-success ms-3 me-3", - cancelButton: "btn btn-lg btn-danger ms-3 me-3", + confirmButton: "btn btn-primary mx-1", + cancelButton: "btn btn-danger mx-1", }, buttonsStyling: false, }).then((result) => { @@ -54,7 +52,7 @@ export default { confirmButtonText: trans.default.methods.__("Ok"), // * Bootstrap Styling customClass: { - confirmButton: "btn btn-lg btn-primary", + confirmButton: "btn btn-primary", }, buttonsStyling: false, }); @@ -62,5 +60,33 @@ export default { }); return false; }, + alert( + title: string, + text: string = "", + self: HTMLElement | null = null, + after: ((response: SweetAlertResult<any>) => void) | null = null, + options: SweetAlertOptions = {} + ) { + const icon = options.icon ?? "info"; + Swal.fire({ + title: title, + text: text, + icon: icon, + // * Bootstrap Styling + customClass: { + confirmButton: "btn btn-lg btn-primary", + }, + buttonsStyling: false, + }).then((result) => { + if (after) { + if (self) { + after.apply(self, [result]); + } else { + after(result); + } + } + }); + return false; + }, }, }; diff --git a/resources/ts/modules/toast.ts b/resources/ts/modules/toast.ts index 5703baf..179d094 100644 --- a/resources/ts/modules/toast.ts +++ b/resources/ts/modules/toast.ts @@ -1,5 +1,4 @@ -import * as Toastify from "toastify-js"; -import { Options } from "toastify-js"; +import Toastify, { Options } from "toastify-js"; export default { methods: { @@ -9,26 +8,26 @@ export default { className = "notifications" ): void { const options: Options = { - text: message, duration: duration, newWindow: false, close: true, className: className, gravity: "top", offset: { - x: "2rem", - y: "7rem", + x: "2em", + y: "3em", }, // * Prevents dismissing of toast on hover stopOnFocus: true, }; + options.text = message; Toastify(options).showToast(); }, notify(message: string, duration = 4000): void { - this.toast(message, duration, "border-gradient"); + this.toast(message, duration, "notifications"); }, errorNotify(message: string, duration = 4000): void { - this.toast(message, duration, "border-gradient error"); + this.toast(message, duration, "notifications error"); }, }, }; diff --git a/resources/views/bo/auth/login.blade.php b/resources/views/bo/auth/login.blade.php index 8d97836..e370375 100644 --- a/resources/views/bo/auth/login.blade.php +++ b/resources/views/bo/auth/login.blade.php @@ -1,65 +1,68 @@ -@extends('../bo.backend') +@extends('bo.layout') @section('title', __('Authentification')) @section('description', __('Formulaire d\'authentification au back-office.')) @section('content') -<div class="container"> - <div class="row justify-content-center"> - <div class="col-md-8 p-0"> - <div class="card"> - <div class="card-header">{{ __('Connexion') }}</div> - <div class="card-body"> - <form method="POST" action="{{ route('bo.login') }}"> - @csrf - <div class="row mb-3"> - <label for="email" class="col-md-4 col-form-label text-md-end">{{ __('Adresse Email') }}</label> - <div class="col-md-6"> - <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> - @error('email') - <span class="invalid-feedback" role="alert"> - <strong>{{ $message }}</strong> - </span> - @enderror - </div> - </div> - <div class="row mb-3"> - <label for="password" class="col-md-4 col-form-label text-md-end">{{ __('Mot de passe') }}</label> - <div class="col-md-6"> - <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password"> - @error('password') - <span class="invalid-feedback" role="alert"> - <strong>{{ $message }}</strong> - </span> - @enderror - </div> - </div> - <div class="row mb-3"> - <div class="col-md-6 offset-md-4"> - <div class="form-check"> - <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> - <label class="form-check-label user-select-none" for="remember"> - {{ __('Se souvenir de moi') }} - </label> + <div class="container"> + <div class="row justify-content-center"> + <div class="col-md-8 p-0"> + <div class="card"> + <div class="card-header">{{ __('Connexion') }}</div> + <div class="card-body"> + <form method="POST" action="{{ route('bo.login') }}"> + @csrf + <div class="row mb-3"> + <label class="col-md-4 col-form-label text-md-end" for="email">{{ __('Adresse Email') }}</label> + <div class="col-md-6"> + <input class="form-control @error('email') is-invalid @enderror" id="email" name="email" + type="email" value="{{ old('email') }}" autocomplete="email" autofocus required> + @error('email') + <span class="invalid-feedback" role="alert"> + <strong>{{ $message }}</strong> + </span> + @enderror </div> </div> - </div> - <div class="row mb-0"> - <div class="col-md-8 offset-md-4"> - <button type="submit" class="btn btn-primary"> - <span>{{ __('Connexion') }}</span> - <i class="fa-solid fa-arrow-right-from-bracket"></i> - </button> - @if (Route::has('bo.password.request')) - <a class="btn btn-link" href="{{ route('bo.password.request') }}"> - {{ __('Mot de passe oublié ?') }} - </a> - @endif + <div class="row mb-3"> + <label class="col-md-4 col-form-label text-md-end" for="password">{{ __('Mot de passe') }}</label> + <div class="col-md-6"> + <input class="form-control @error('password') is-invalid @enderror" id="password" name="password" + type="password" autocomplete="current-password" required> + @error('password') + <span class="invalid-feedback" role="alert"> + <strong>{{ $message }}</strong> + </span> + @enderror + </div> </div> - </div> - </form> + <div class="row mb-3"> + <div class="col-md-6 offset-md-4"> + <div class="form-check"> + <input class="form-check-input" id="remember" name="remember" type="checkbox" + {{ old('remember') ? 'checked' : '' }}> + <label class="form-check-label user-select-none" for="remember"> + {{ __('Se souvenir de moi') }} + </label> + </div> + </div> + </div> + <div class="row mb-0"> + <div class="col-md-8 offset-md-4"> + <button class="btn btn-primary" type="submit"> + <span>{{ __('Connexion') }}</span> + <i class="fa-solid fa-arrow-right-from-bracket"></i> + </button> + @if (Route::has('bo.password.request')) + <a class="btn btn-link" href="{{ route('bo.password.request') }}"> + {{ __('Mot de passe oublié ?') }} + </a> + @endif + </div> + </div> + </form> + </div> </div> </div> </div> </div> -</div> @endsection diff --git a/resources/views/bo/backend.blade.php b/resources/views/bo/backend.blade.php deleted file mode 100644 index 6800a46..0000000 --- a/resources/views/bo/backend.blade.php +++ /dev/null @@ -1,78 +0,0 @@ -<!doctype html> -<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> - -<head> - @include('bo.layouts.head') - @if(config('app.env') === 'local') - <script nonce="{{ $nonce ?? \uniqid() }}"> - window.vueDebug = true; - </script> - @endif -</head> - -<body> - <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> - <div class="container"> - <a class="navbar-brand rounded bg-loue-blue text-loue px-2 py-1" href="{{ url('/') }}"> - {{ config('app.name', 'Laravel') }} - </a> - <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}"> - <span class="navbar-toggler-icon"></span> - </button> - - <div class="collapse navbar-collapse" id="navbarSupportedContent"> - <!-- Left Side Of Navbar --> - @include('bo.layouts.nav-menu') - - <!-- Right Side Of Navbar --> - <ul class="navbar-nav ms-auto"> - <!-- Authentication Links --> - @guest - @if (Route::has('bo.login')) - <li class="nav-item"> - <a class="nav-link" href="{{ route('bo.login') }}">{{ __('Connexion') }}</a> - </li> - @endif - - @if (Route::has('bo.register')) - <li class="nav-item"> - <a class="nav-link" href="{{ route('bo.register') }}">{{ __('Créer un compte') }}</a> - </li> - @endif - @else - <li class="nav-item dropdown"> - <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> - {{ Auth::user()->name }} - </a> - - <div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown"> - <form id="logout-form" action="{{ route('bo.logout') }}" method="POST" class="text-center"> - @csrf - <button class="btn btn-link p-0 text-decoration-none text-muted text-capitalize" type="submit">{{ __('Déconnexion') }}</button> - </form> - </div> - </li> - @endguest - </ul> - </div> - </div> - </nav> - <main class="container-fluid pt-2 @yield('bg-color')"> - <div class="row justify-content-center"> - <div class="col col-md-6"> - @include('bo.modules.flashMessage') - </div> - </div> - <div class="row p-md-3 justify-content-center"> - <div class="col-12 col-md-10 col-lg-8 pt-3 p-md-0"> - @yield('content') - </div> - </div> - </main> - @stack('scriptsConstants') - @include('bo.modules.scriptConstants') - <script src="{{ mix('js/back.js', 'build') }}"></script> - @stack('scripts') -</body> - -</html> diff --git a/resources/views/bo/layout.blade.php b/resources/views/bo/layout.blade.php new file mode 100644 index 0000000..5b908c6 --- /dev/null +++ b/resources/views/bo/layout.blade.php @@ -0,0 +1,41 @@ +<!doctype html> +<html dir="ltr" lang="{{ str_replace('_', '-', app()->getLocale()) }}"> + +<head> + @include('bo.layouts.head') +</head> + +<body> + <!-- Navigation --> + @include('bo.layouts.header') + + <!-- Main content --> + <main class="container-fluid"> + <div class="row justify-content-center p-3"> + <!-- Show a message when an action is performed --> + <div class="container"> + <div class="row justify-content-center"> + <div class="col-12 col-md-10 col-lg-8 px-2"> + @include('bo.modules.flash-messages') + </div> + </div> + </div> + <!-- Main content --> + <div class="row justify-content-center"> + <div class="col-12 col-md-10 col-lg-8 p-md-0 pt-3"> + @yield('content') + </div> + </div> + </div> + </main> + + <!-- Footer --> + @include('bo.layouts.footer') + + <!-- Other --> + @include('modules.script-routes') + @vite(['resources/ts/bo/bo.ts']) + @stack('scripts') +</body> + +</html> diff --git a/resources/views/bo/layouts/footer.blade.php b/resources/views/bo/layouts/footer.blade.php new file mode 100644 index 0000000..152ef57 --- /dev/null +++ b/resources/views/bo/layouts/footer.blade.php @@ -0,0 +1,16 @@ +<footer id="footer" class="text-center text-secondary px-0"> + <div class="text-center p-2"> + @if(isset($cpsr_license)) + <span class="text-reset">{{ $cpsr_license }}</span> + <span>-</span> + @endif + @if(isset($cpsr_name) && isset($cpsr_version)) + <span class="text-reset">{{ $cpsr_name }} - {{ $cpsr_version }}</span> + <span>-</span> + @endif + <span class="text-reset fw-bold">{{ __('LDC Web Services') }}</span> + @if(isset($cpsr_time)) + © {{ date('Y') }} + @endif + </div> +</footer> diff --git a/resources/views/bo/layouts/head.blade.php b/resources/views/bo/layouts/head.blade.php index 8325730..8ac9e01 100644 --- a/resources/views/bo/layouts/head.blade.php +++ b/resources/views/bo/layouts/head.blade.php @@ -2,25 +2,41 @@ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>{{ config('app.name') }} - @yield('title') -@preload('build/mix-manifest.json') +@hasSection('canonical') + +@else + +@endif + - +@hasSection('metaIndex') + +@else + +@endif - - - +{{-- GENERER favicon avec un outil https://realfavicongenerator.net/ --}} + + + +@include('modules.breadcrumbs.breadcrumb-head') + - - -@stack('styles') +@vite(['resources/sass/bo/bo.scss']) + +@if (config('app.debug')) + +@endif diff --git a/resources/views/bo/layouts/header.blade.php b/resources/views/bo/layouts/header.blade.php new file mode 100644 index 0000000..1d7f2b0 --- /dev/null +++ b/resources/views/bo/layouts/header.blade.php @@ -0,0 +1,45 @@ + diff --git a/resources/views/bo/layouts/nav-list.blade.php b/resources/views/bo/layouts/nav-list.blade.php new file mode 100644 index 0000000..4e1779f --- /dev/null +++ b/resources/views/bo/layouts/nav-list.blade.php @@ -0,0 +1,76 @@ +@auth('backend') + +@endauth diff --git a/resources/views/bo/layouts/nav-menu.blade.php b/resources/views/bo/layouts/nav-menu.blade.php deleted file mode 100644 index 2b19b5c..0000000 --- a/resources/views/bo/layouts/nav-menu.blade.php +++ /dev/null @@ -1,85 +0,0 @@ -@auth('backend') - -@endauth diff --git a/resources/views/bo/modules/breadcrumb/breadcrumb-body.blade.php b/resources/views/bo/modules/breadcrumb/breadcrumb-body.blade.php deleted file mode 100644 index 240948b..0000000 --- a/resources/views/bo/modules/breadcrumb/breadcrumb-body.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -@hasSection('breadcrumb') - @if(Breadcrumbs::exists(app()->view->getSections()['breadcrumb'])) - {{ call_user_func_array('Breadcrumbs::render', array_merge( - [app()->view->getSections()['breadcrumb']], - !empty($brParam) ? (is_array($brParam) ? $brParam : [$brParam]) : [] - )) }} - @endif -@elseif(Breadcrumbs::exists(request()->route()->getName())) - {{ Breadcrumbs::render(request()->route()->getName()) }} -@endif diff --git a/resources/views/bo/modules/breadcrumb/layout.blade.php b/resources/views/bo/modules/breadcrumb/layout.blade.php deleted file mode 100644 index 73cd724..0000000 --- a/resources/views/bo/modules/breadcrumb/layout.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@if (isset($breadcrumbs)) -@unless ($breadcrumbs->isEmpty()) - - -@endunless -@endif diff --git a/resources/views/bo/modules/change-model-order.blade.php b/resources/views/bo/modules/change-model-order.blade.php new file mode 100644 index 0000000..9e3ca6c --- /dev/null +++ b/resources/views/bo/modules/change-model-order.blade.php @@ -0,0 +1,18 @@ + + + diff --git a/resources/views/bo/modules/change-published-status.blade.php b/resources/views/bo/modules/change-published-status.blade.php new file mode 100644 index 0000000..8d54fc9 --- /dev/null +++ b/resources/views/bo/modules/change-published-status.blade.php @@ -0,0 +1,13 @@ + +
+ @csrf + +
+ diff --git a/resources/views/bo/modules/flash-messages.blade.php b/resources/views/bo/modules/flash-messages.blade.php new file mode 100644 index 0000000..784ee41 --- /dev/null +++ b/resources/views/bo/modules/flash-messages.blade.php @@ -0,0 +1,47 @@ +@if (!request()->routeIs('login')) + @if ($message = Session::get('success', Session::get('bo.success'))) + + @endif + + @if ($message = Session::get('error', Session::get('bo.error'))) + + @endif + + @if ($message = Session::get('warning', Session::get('bo.warning'))) + + @endif + + @if ($message = Session::get('info', Session::get('bo.info'))) + + @endif + + @if ($errors->any()) + + @endif +@endif diff --git a/resources/views/bo/modules/flashMessage.blade.php b/resources/views/bo/modules/flashMessage.blade.php deleted file mode 100644 index 7436446..0000000 --- a/resources/views/bo/modules/flashMessage.blade.php +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - -@if ($message = Session::get('success')) - -@endif - -@if ($message = Session::get('error')) - -@endif - - -@if ($message = Session::get('warning')) - -@endif - - -@if ($message = Session::get('info')) - -@endif - -@if ($message = Session::get('message')) - -@endif - - -@if ($errors->any()) - -@endif diff --git a/resources/views/bo/modules/input-error.blade.php b/resources/views/bo/modules/input-error.blade.php index 76a93dd..ce7bfab 100644 --- a/resources/views/bo/modules/input-error.blade.php +++ b/resources/views/bo/modules/input-error.blade.php @@ -1,8 +1,8 @@ -@if($errors->has($inputName)) +@if ($errors->has($inputName))
{{ implode(',', $errors->get($inputName)) }}
@endif -@if(isset($helper)) - {{ $helper }} +@if (isset($helper)) + {{ $helper }} @endif diff --git a/resources/views/bo/modules/pagination.blade.php b/resources/views/bo/modules/pagination.blade.php index 10fdb5d..4486c20 100644 --- a/resources/views/bo/modules/pagination.blade.php +++ b/resources/views/bo/modules/pagination.blade.php @@ -1,60 +1,115 @@ -@if ($paginator->hasPages()) - @endif diff --git a/resources/views/bo/modules/scriptConstants.blade.php b/resources/views/bo/modules/script-constants.blade.php similarity index 100% rename from resources/views/bo/modules/scriptConstants.blade.php rename to resources/views/bo/modules/script-constants.blade.php diff --git a/resources/views/bo/modules/search-bar.blade.php b/resources/views/bo/modules/search-bar.blade.php new file mode 100644 index 0000000..6e7e09b --- /dev/null +++ b/resources/views/bo/modules/search-bar.blade.php @@ -0,0 +1,48 @@ +@php + $iArgs = []; + if (request()->sort_col) { + $iArgs['sort_col'] = request()->sort_col; + } + + if (request()->search) { + $iArgs['search'] = request()->sort_way; + } +@endphp +
+
+
+
+ + @if (request()->sort_col) + + @endif + @if (request()->sort_way) + + @endif + @if (request()->rangefilter) + + @endif + @if (request()->group) + + @endif + + + + @push('scripts') + + @endpush +
+
+
+
diff --git a/resources/views/bo/modules/searchBar.blade.php b/resources/views/bo/modules/searchBar.blade.php deleted file mode 100644 index c429fe9..0000000 --- a/resources/views/bo/modules/searchBar.blade.php +++ /dev/null @@ -1,46 +0,0 @@ -@php - $iArgs = []; - if(request()->sort_col) { - $iArgs['sort_col'] = request()->sort_col; - } - - if(request()->search) { - $iArgs['search'] = request()->sort_way; - } -@endphp -
-
-
-
- - @if(request()->sort_col) - - @endif - @if(request()->sort_way) - - @endif - @if(request()->rangefilter) - - @endif - @if(request()->group) - - @endif - - - - @push('scripts') - - @endpush -
-
-
-
diff --git a/resources/views/bo/modules/table-col-sorter.blade.php b/resources/views/bo/modules/table-col-sorter.blade.php new file mode 100644 index 0000000..1307629 --- /dev/null +++ b/resources/views/bo/modules/table-col-sorter.blade.php @@ -0,0 +1,76 @@ +@php + $route = request()->route(); + $routeName = $route->getName(); + $rst = !is_null(request()->rst) || !Session::has("$routeName.sorted"); + $noOrder = !empty($noOrder); + $noOrder = $noOrder || (Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way"))); + $noOrder = $noOrder || !empty(request()->search); + $ignore = (isset($ignore) and is_array($ignore)) ? $ignore : []; +@endphp + + @foreach ($cols as $col => $colname) + @php + $iArgs = ['sort_col' => $col]; + if (request()->search) { + $iArgs['search'] = request()->search; + } + @endphp + {{-- NO Sort for order column --}} + @if ($col === 'order' or in_array($col, $ignore)) + @if ($noOrder and !in_array($col, $ignore)) + @continue + @endif + +
+ {{ $colname }} +
+ + @continue + @endif + +
+ + {{ $colname }} + + @if ( + !session("$routeName.sort_way") or + session("$routeName.sort_col") !== $col or + session("$routeName.sort_way") === 'desc' and session("$routeName.sort_col") === $col) + + + + @endif + @if ( + !session("$routeName.sort_way") or + session("$routeName.sort_col") !== $col or + session("$routeName.sort_way") === 'asc' and session("$routeName.sort_col") === $col) + + + + @endif +
+ + @endforeach + {{-- Buttons Col --}} + + @if (!$rst) + + + + @else + + + + @endif + + diff --git a/resources/views/bo/modules/tableColSorter.blade.php b/resources/views/bo/modules/tableColSorter.blade.php deleted file mode 100644 index a651bfe..0000000 --- a/resources/views/bo/modules/tableColSorter.blade.php +++ /dev/null @@ -1,63 +0,0 @@ -@php - $route = request()->route(); - $routeName = $route->getName(); - $rst = !is_null(request()->rst); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - View::share('noOrder', $noOrder); - $ignore = (isset($ignore) and is_array($ignore)) ? $ignore : []; -@endphp - - @foreach($cols as $col => $colname) - @php - $iArgs = ['sort_col' => $col]; - if(request()->search) { - $iArgs['search'] = request()->search; - } - @endphp - {{-- NO Sort for order column --}} - @if($col === 'order' or in_array($col, $ignore)) - @if($noOrder and !$rst and !in_array($col, $ignore)) @continue @endif - - {{ $colname }} - - @continue - @endif - - - {{ $colname }} - @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'desc' and session("$routeName.sort_col") === $col)) - -  ↓  - - @endif - @if(!session("$routeName.sort_way") or session("$routeName.sort_col") !== $col or (session("$routeName.sort_way") === 'asc' and session("$routeName.sort_col") === $col)) - -  ↑  - - @endif - - - @endforeach - {{-- Buttons Col --}} - - @if($noOrder and !$rst) - - - - @else - - - - @endif - - diff --git a/resources/views/bo/pages/advice/create.blade.php b/resources/views/bo/pages/advice/create.blade.php index 7dc9c44..688798a 100644 --- a/resources/views/bo/pages/advice/create.blade.php +++ b/resources/views/bo/pages/advice/create.blade.php @@ -1,37 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => [$currentType, $adviceModel]]) -@section('title', sprintf('%s - %s %s', __(Str::singular($currentType->label)), Str::ucfirst(__('édition')), $advice->title)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => Str::singular($currentType->label())])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular($currentType->label())])) +@section('breadcrumb', + request()->route()->getName()) @section('content') -
-
-
-
- @include('bo.modules.breadcrumb.breadcrumb-body') -
-
-
-

- - - -  {{ __(Str::singular($currentType->label)) }} {{ __('création') }} -

-
+
+
+ + + + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => [$currentType, $adviceModel]])
-
-
- @csrf - @include('bo.pages.advice.form') -
- -
-
+
+
+
+ @csrf + @include('bo.pages.advice.form') +
+
+ +
+
+
@endsection diff --git a/resources/views/bo/pages/advice/edit.blade.php b/resources/views/bo/pages/advice/edit.blade.php index b83829a..0e1c477 100644 --- a/resources/views/bo/pages/advice/edit.blade.php +++ b/resources/views/bo/pages/advice/edit.blade.php @@ -1,58 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => [$currentType, $adviceModel]]) -@section('title', sprintf('%s - %s %s', __(Str::singular($currentType->label)), Str::ucfirst(__('édition')), $advice->title)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular($currentType->label())])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular($currentType->label())])) +@section('breadcrumb', + request()->route()->getName()) @section('content') -
-
-
-
- @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $advice]) -
-
-
-
-

- - - -  {{ __(Str::singular($currentType->label)) }} {{ __('édition') }} -> {{ $advice->title }} -

-
-
-
- @method('DELETE') - @csrf -
- -
-
-
-
+
+
+ + + + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => [$currentType, $adviceModel]])
-
-
+
+ @csrf - @method('PUT') - @include('bo.pages.advice.form', compact('advice')) -
- +
+
+ @csrf + @method('PUT') + @include('bo.pages.advice.form') +
+
+ +
+
+
@endsection diff --git a/resources/views/bo/pages/advice/form.blade.php b/resources/views/bo/pages/advice/form.blade.php index f3cb049..6ac6314 100644 --- a/resources/views/bo/pages/advice/form.blade.php +++ b/resources/views/bo/pages/advice/form.blade.php @@ -1,573 +1,681 @@
-
-
+ {{-- GENERAL INFORMATIONS --}} +
+
{{ __('Informations générales') }} -
-
-
- -
'adviceTitle'])'>
- - @include('bo.modules.input-error', [ - 'inputName' => 'title', - 'helperId' => 'adviceTitleHelp', - 'helper' => __('Titre d\'une :model', ['model' => Str::singular($currentType->label)]) - ]) -
-
- -
- - @php - $data = [ - 'name' => 'tags', - 'value' => old('tags', $advice->tags ?? []), - 'tags' => $adviceTags, - 'tagsLimit' => [0,2] - ]; - @endphp -
- @include('bo.modules.input-error', [ - 'inputName' => 'tags', - 'helperId' => 'adviceTagsHelp', - 'helper' => __('Tag(s) :model (2 maximum).', ['model' => Str::singular($currentType->label)]), - ]) -
-
-
-
-
- -
-
-
- {{ __('SEO') }}
-
- -
'adviceSeoTitle'])'>
- - @include('bo.modules.input-error', [ - 'inputName' => 'seo_title', - 'helperId' => 'adviceSeoTitleHelp' , - 'helper' => __('Doit décrire précisément la page, recommandation pour un positionnement optimal dans les moteurs de recherche : entre 45 et 70 caractères, balise .') + {{-- TITLE --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsTitle', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'title', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular($currentType->label()), + ]), ]) </div> - <div class="col-12 col-md-6 form-group"> - <label for="adviceSeoDescription" class="col-form-label"> - <b>{{ __('Description seo') }} *</b> - </label> - @php - $data = [ - 'id' => 'adviceSeoDescription', - 'class' => 'form-control', - 'name' => 'seo_description', - 'placeholder' => __('Une description du contenu de la page pour les moteurs de recherche.'), - 'ariaDescribedby' => 'adviceSeoDescriptionHelp', - 'value' => old('adviceSeoDescription', $advice->seo_description), - 'required' => true, - 'value' => old('seo_description', $advice->seo_description ?? '') - ]; - @endphp - <div id="input-text-auto" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_description', - 'helperId' => 'adviceSeoDescriptionHelp', - 'helper' => __(' Doit décrire précisément le contenu de la page, requiert entre 50 et 160 caractères, balise <meta> description.') + {{-- CATEGORIES --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'adviceTags', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('models.classes.tags')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'tags', + 'model' => $adviceModel ?? null, + 'itemsList' => $adviceTags, + 'itemLimit' => [0, 2], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(Str::ucfirst(__('models.classes.tags'))), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.tags'), + 'model2' => Str::singular($currentType->label()), + 'min' => 0, + 'max' => 2, + ]), + 'required' => true, + ]) + </div> + {{-- TYPE --}} + <div class="d-none"> + <input name="type" value="{{ old('type', $adviceModel->type ?? '') }}"> + </div> + </div> + </fieldset> + </div> + {{-- SEO --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.seo')) }}</legend> + <div class="row"> + {{-- SEO_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceSeoTitle', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'seo_title', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 40, + 'max' => 70, + ]) . __(' Balise <title>.'), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- SEO_DESCRIPTION --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar-multiline', [ + 'id' => 'adviceSeoDescription', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'seo_description', + 'model' => $adviceModel ?? null, + 'required' => true, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 50, + 'max' => 160, + ]) . __(' Balise <meta> description.'), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular($currentType->label()), + ]), ]) </div> </div> </fieldset> </div> -</div> - -@if ($currentType == App\Enums\Advices\AdviceTypeEnum::recipes()) - <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + @if ($currentType == \App\Enums\Advices\AdviceTypeEnum::recipes) + {{-- CARACTERISTICS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Caractéristiques') }}</legend> <div class="row"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="adviceCookingTime" class="col-form-label"> - <b>{{ __('Temps de cuisson') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceCookingTime'])'></div> - <input name="cooking_time" type="number" value="{{ old('cooking_time', $advice->cooking_time ?? '') }}" class="form-control need-word-counter" - id="adviceCookingTime" aria-describedby="adviceCookingTimeHelp" placeholder="{{ __('Un nombre en minutes') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'cooking_time', - 'helperId' => 'adviceCookingTimeHelp', - 'helper' => __('Temps de cuisson de la :model (en minutes) de 0 à 65535 maximum.', ['model' => Str::singular($currentType->label)]) - ]) - </div> + {{-- COOKING TIME --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceCookingTime', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.cooking_time')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'cooking_time', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.cooking_time')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.cooking_time')), + 'model' => Str::singular($currentType->label()), + ]), + ]) </div> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="advicePreparationTime" class="col-form-label"> - <b>{{ __('Temps de préparation') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'advicePreparationTime'])'></div> - <input name="preparation_time" type="number" value="{{ old('preparation_time', $advice->preparation_time ?? '') }}" class="form-control need-word-counter" - id="advicePreparationTime" aria-describedby="advicePreparationTimeHelp" placeholder="{{ __('Un nombre en minutes') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'preparation_time', - 'helperId' => 'advicePreparationTimeHelp', - 'helper' => __('Temps de préparation de la :model (en minutes) de 0 à 65535 maximum.', ['model' => Str::singular($currentType->label)]) - ]) - </div> + {{-- PREPARATION TIME --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'advicePreparationTime', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.preparation_time')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'preparation_time', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.preparation_time')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.preparation_time')), + 'model' => Str::singular($currentType->label()), + ]), + ]) </div> - </div> - <div class="row"> + {{-- DIFFICULTY --}} <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="adviceDifficulty" class="col-form-label"><b>{{ __('Difficulté') }}</b></label> - <select id="adviceDifficulty" class="form-select" name="difficulty" aria-describedby="adviceDifficultyHelp" required> - <option value="" @if(is_null(old('difficulty', $advice->difficulty ?? null))) selected @endif disabled>{{ __('Séléctionnez une difficulté') }}</option> - @foreach(App\Enums\Advices\AdviceDifficultyEnum::toArray() as $difficultyEnum) - <option value="{{ $difficultyEnum->value }}" @if(old('difficulty', optional($advice->difficulty ?? null)->value) == $difficultyEnum->value) selected @endif>{{ $difficultyEnum->label }}</option> - @endforeach - </select> - @include('bo.modules.input-error', [ - 'inputName' => 'difficulty', - 'helperId' => 'adviceDifficultyHelp', - 'helper' => __('Complexité de la :model', ['model' => Str::singular($currentType->label)]) - ]) - </div> + @include('bo.partials.inputs.tinyint-enum', [ + 'id' => 'adviceDifficulty', + 'label' => Str::ucfirst(__('validation.attributes.difficulty')), + 'name' => 'difficulty', + 'model' => $adviceModel ?? null, + 'required' => true, + 'associatedModels' => \App\Enums\Advices\AdviceDifficultyEnum::toArray(), + 'helper' => __('validation.custom.select_entity', [ + 'entity' => __('une ') . Str::ucfirst(__('validation.attributes.difficulty')), + ]), + ]) </div> </div> </fieldset> </div> - </div> -@endif - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Les images') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="adviceStickerAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de la vignette *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceStickerAlt'])'></div> - <input name="sticker_alt" type="text" - value="{{ old('sticker_alt', $advice->sticker_alt ?? '') }}" class="form-control need-word-counter" - id="adviceStickerAlt" aria-describedby="adviceStickerAltHelp" - placeholder="{{ __('Une description de l\'image pour les non voyants') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_alt', - 'helperId' => 'adviceStickerAltHelp', - 'helper' => __( - 'Utile pour les moteurs de recherches et les non voyants (5 à 6 mots).' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="adviceStickerTitle" class="col-form-label"> - <b>{{ __('Titre de la vignette *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceStickerTitle'])'></div> - <input name="sticker_title" type="text" - value="{{ old('sticker_title', $advice->sticker_title ?? '') }}" class="form-control need-word-counter" - id="adviceStickerTitle" aria-describedby="adviceStickerTitleHelp" - placeholder="{{ __('Une description d\'une :model', ['model' => Str::singular($currentType->label)], ' pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_title', - 'helperId' => 'adviceStickerTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image.' - ), - ]) - </div> - </div> - <div class="row mb-3"> - <div class="col-12"> - @php - $data = [ - 'id' => 'adviceSticker', - 'name' => 'sticker', - 'helper' => __('Les dimensions de la vignette, doivent être de 370px (largeur) par 300px (hauteur)'), - 'width' => 370, - 'height' => 300, - 'value' => $advice->sticker ?? '', - 'required' => true, - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'sticker']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="adviceStickerSMAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de la petite vignette *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceStickerSMAlt'])'></div> - <input name="sticker_sm_alt" type="text" - value="{{ old('sticker_sm_alt', $advice->sticker_sm_alt ?? '') }}" class="form-control need-word-counter" - id="adviceStickerSMAlt" aria-describedby="adviceStickerSMAltHelp" - placeholder="{{ __('Une description de l\'image pour les non voyants') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_sm_alt', - 'helperId' => 'adviceStickerSMAltHelp', - 'helper' => __( - 'Utile pour les moteurs de recherches et les non voyants (5 à 6 mots).' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="adviceStickerSMTitle" class="col-form-label"> - <b>{{ __('Titre de la petite vignette *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceStickerSMTitle'])'></div> - <input name="sticker_sm_title" type="text" - value="{{ old('sticker_sm_title', $advice->sticker_sm_title ?? '') }}" class="form-control need-word-counter" - id="adviceStickerSMTitle" aria-describedby="adviceStickerSMTitleHelp" - placeholder="{{ __('Une description d\'une :model', ['model' => Str::singular($currentType->label)], ' pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_sm_title', - 'helperId' => 'adviceStickerSMTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image.' - ), - ]) - </div> - </div> - <div class="row mb-3"> - <div class="col-12"> - @php - $data = [ - 'id' => 'adviceStickerSM', - 'name' => 'sticker_sm', - 'helper' => __('Les dimensions de la petite vignette, doivent être de 270px (largeur) par 145px (hauteur)'), - 'width' => 270, - 'height' => 145, - 'value' => $advice->sticker_sm ?? '', - 'required' => true, - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'sticker_sm']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="advicePictureAlt" class="col-form-label"> - <b>{{ __('Texte alternatif du visuel *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'advicePictureAlt'])'></div> - <input name="picture_alt" type="text" - value="{{ old('picture_alt', $advice->picture_alt ?? '') }}" class="form-control need-word-counter" - id="advicePictureAlt" aria-describedby="advicePictureAltHelp" - placeholder="{{ __('Une description de l\'image pour les non voyants') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_alt', - 'helperId' => 'advicePictureAltHelp', - 'helper' => __( - 'Utile pour les moteurs de recherches et les non voyants (5 à 6 mots).' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="advicePictureTitle" class="col-form-label"> - <b>{{ __('Titre du visuel *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'advicePictureTitle'])'></div> - <input name="picture_title" type="text" - value="{{ old('picture_title', $advice->picture_title ?? '') }}" class="form-control need-word-counter" - id="advicePictureTitle" aria-describedby="advicePictureTitleHelp" - placeholder="{{ __('Une description d\'une :model', ['model' => Str::singular($currentType->label)], ' pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_title', - 'helperId' => 'advicePictureTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image.' - ), - ]) - </div> - </div> - <div class="row mb-3"> - <div class="col-12"> - @php - $data = [ - 'id' => 'advicePicture', - 'name' => 'picture', - 'helper' => __('Les dimensions du visuel, doivent être de 650px (largeur) par 690px (hauteur)'), - 'width' => 650, - 'height' => 690, - 'value' => $advice->picture ?? '', - 'required' => true, - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Les vidéos') }}</legend> + @endif + {{-- PICTURE --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture')) }}</legend> <div class="row"> + {{-- PICTURE_ALT --}} <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="adviceVideo" class="col-form-label"> - <b>{{ __('Identificateur Youtube de la vidéo') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceVideo'])'></div> - <input name="youtube_video_id" type="text" value="{{ old('youtube_video_id', $advice->youtube_video_id ?? '') }}" class="form-control need-word-counter" - id="adviceVideo" aria-describedby="adviceVideoHelp" placeholder="{{ __('ID de la vidéo Youtube') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'youtube_video_id', - 'helperId' => 'adviceVideoHelp', - 'helper' => __('11 caractères minimum (exemple : 4loE3us8gYQ)') - ]) - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'advicePictureAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_alt', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) </div> + {{-- PICTURE_TITLE --}} <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="adviceVideoTitle" class="col-form-label"> - <b>{{ __('Titre Youtube de la vidéo') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'adviceVideoTitle'])'></div> - <input name="youtube_title" type="text" value="{{ old('youtube_title', $advice->youtube_title ?? '') }}" class="form-control need-word-counter" - id="adviceVideoTitle" aria-describedby="adviceVideoTitleHelp" placeholder="{{ __('Un titre beau et explicite') }}" > - @include('bo.modules.input-error', [ - 'inputName' => 'youtube_title', - 'helperId' => 'adviceVideoTitleHelp', - 'helper' => __('Renseignez au moins 3 caractères.') - ]) - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'advicePictureTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_title', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- PICTURE --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'advicePicture', + 'name' => 'picture', + 'width' => 650, + 'height' => 690, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '650px', + 'heightpx' => '690px', + ]), + 'required' => true, + 'preview' => true, + ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- STICKER --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture_thumbnail')) }}</legend> + <div class="row"> + {{-- STICKER_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceStickerAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_alt', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- STICKER_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceStickerTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_title', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- STICKER --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'adviceSticker', + 'name' => 'sticker', + 'width' => 370, + 'height' => 300, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '370px', + 'heightpx' => '300px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + </div> + </fieldset> + </div> + {{-- STICKER_SM --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture_thumbnail_sm')) }}</legend> + <div class="row"> + {{-- STICKER_SM_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceStickerSmAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_sm_alt', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- STICKER_SM_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceStickerSmTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_sm_title', + 'required' => true, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- STICKER_SM --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'adviceStickerSm', + 'name' => 'sticker_sm', + 'width' => 270, + 'height' => 145, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '270px', + 'heightpx' => '145px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + </div> + </fieldset> + </div> + {{-- VIDEOS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Vidéos') }}</legend> + <div class="row mb-3"> + {{-- YOUTUBE_VIDEO_ID --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceYoutubeVideoId', + 'label' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.id')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'youtube_video_id', + 'required' => false, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.id')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.id')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + {{-- YOUTUBE_TITLE --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'adviceYoutubeTitle', + 'label' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.title')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + 'hasWordCounter' => true, + 'name' => 'youtube_title', + 'required' => false, + 'model' => $adviceModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.title')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field1 de la :field2 de :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.title')), + 'field2' => Str::ucfirst(__('validation.attributes.youtube_video')), + 'model' => Str::singular($currentType->label()), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- CONSEIL BLOC --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Bloc de conseils') }}</legend> - @php - if ($currentType == App\Enums\Advices\AdviceTypeEnum::recipes()) { - $asterisque = '*'; - } else { - $asterisque = ''; - } - @endphp <div class="row"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="advice_guests_nb" class="col-form-label"> - <b>{{ __('Nombre de convives :sstr', ['sstr' => $asterisque]) }}</b> - </label> - <input name="guests_nb" type="number" value="{{ old('guests_nb', $advice->guests_nb ?? '') }}" step="1" min="0" max="99" class="form-control" - id="advice_guests_nb" aria-describedby="advice_guests_nbHelp" placeholder="{{ __('Nombre de convives') }}" @if ($currentType == App\Enums\Advices\AdviceTypeEnum::recipes()) required @endif> - @include('bo.modules.input-error', [ - 'inputName' => 'guests_nb', - 'helperId' => 'advice_guests_nbHelp', - 'helper' => __('De 0 à 99 convives au maximum') - ]) - </div> - </div> - </div> - - <div class="row mb-3"> - <label for="ingredients" class="col-form-label"> - <b>{{ __('Liste des ingrédients *') }}</b> - </label> - <div class="col"> - @php - $data = [ - 'itemList' => old('ingredients', $advice->ingredients ?? []), - 'itemColumns' => [['value', 'Quantité'], ['label', 'Description']], - 'itemType' => ['number', 'text'], - 'itemLimit' => [1,15], - 'inputName' => 'ingredients', - 'inputPlaceholder' => ['Quantité (nombre)', 'Mesure + ingrédients (ex: g. de sautés de poulet ou tomate(s))'], - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="list-item" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'ingredients', - 'helperId' => 'adviceIngredientsHelp', - 'helper' => __('Doit décrire la liste des ingrédients (1 à 15 lignes), laisser le champs quantité vide afin d\'en afficher aucune (ex: quantité: "" et description: "sel et poivre").'), + {{-- GUESTS_NB --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.int-number', [ + 'id' => 'adviceGuestsNb', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.guests_nb')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'guests_nb', + 'required' => $currentType == \App\Enums\Advices\AdviceTypeEnum::recipes ? true : false, + 'model' => $adviceModel ?? null, + 'min' => 0, + 'max' => 99, + 'helper' => __('validation.between.numeric', [ + 'attribute' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.guests_nb')), + 'model' => Str::singular($currentType->label()), + ]), + 'min' => 0, + 'max' => 99, + ]), + 'placeholder' => __(':field de :model', [ + 'field' => Str::ucfirst(__('validation.attributes.guests_nb')), + 'model' => Str::singular($currentType->label()), + ]), ]) </div> - </div> - - <div class="row mb-3"> - <div class="col-12 form-group"> - <label for="preparation" class="col-form-label"> - <b>{{ __('Étapes d\'une :model *', ['model' => Str::singular($currentType->label)]) }}</b> - </label> - @php - $data = [ - 'name' => 'preparation', - 'text' => old('preparation', $advice->preparation ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'preparation', - 'helperId' => 'advicePreparationHelp', - 'helper' => __('Renseignez au moins 15 caractères.'), + {{-- INGREDIENTS --}} + <div class="col-12 mb-3"> + @include('bo.partials.inputs.text-list-items', [ + 'id' => 'adviceIngredients', + 'name' => 'ingredients', + 'label' => Str::ucfirst(__('validation.attributes.ingredients')), + 'model' => $adviceModel ?? null, + 'itemColumns' => [['value', 'Quantité'], ['label', 'Description']], + 'itemType' => ['number', 'text'], + 'itemLimit' => [1, 15], + 'inputPlaceholder' => ['Quantité (nombre)', 'Mesure + ingrédients (ex: g. de sautés de poulet ou tomate(s))'], + 'required' => true, + 'helper' => __('validation.custom.list_items', [ + 'field' => Str::ucfirst(__('validation.attributes.ingredients')), + 'min' => 3, + 'lineMin' => 1, + 'lineMax' => 15, + ]), ]) </div> - </div> - - <div class="row mb-3"> - <div class="col-12 form-group"> - <label for="AdviceLgp" class="col-form-label"> - <b>{{ __('Conseil Le Gaulois Pro') }}</b> - </label> - @php - $data = [ - 'name' => 'advice', - 'text' => old('advice', $advice->advice ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'advice', - 'helperId' => 'adviceAdviceLgpHelp', - 'helper' => __('Renseignez au moins 15 caractères.'), + {{-- PREPARATION --}} + <div class="col-12 mb-3"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'advicePreparation', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.preparation')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'preparation', + 'model' => $adviceModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), + ]) + </div> + {{-- ADVICE --}} + <div class="col-12 mb-3"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'adviceAdvice', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.advice')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'advice', + 'model' => $adviceModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Produits associés') }}</legend> + {{-- ASSOCIATED PRODUCTS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __(':field associées', ['field' => Str::ucfirst(__('models.classes.products'))]) }}</legend> <div class="row"> - <div class="col-12 col-md-6 form-group"> - @php - if ($currentType == App\Enums\Advices\AdviceTypeEnum::recipes()) { - $minProduct = 1; - } else { - $minProduct = 0; - } - $data = [ - 'name' => 'products', - 'value' => old('products', $advice->products ?? []), - 'itemLimit' => [$minProduct,3], - 'placeholder' => 'Recherchez un produit', - 'itemsList' => $adviceProducts, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'products', - 'helperId' => 'adviceProductsHelp', - 'helper' => __(':minProd à 3 produit(s) associé(s) maximum.', ['minProd' => $minProduct]), + {{-- PRODUCTS --}} + <div class="col-12 m-md-0 mb-3"> + @php $min = $currentType == \App\Enums\Advices\AdviceTypeEnum::recipes ? 1 : 0; @endphp + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'adviceProducts', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('models.classes.products')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'products', + 'model' => $adviceModel ?? null, + 'itemsList' => $adviceProducts, + 'itemLimit' => [$min, 3], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(Str::ucfirst(__('models.classes.products'))), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.products'), + 'model2' => Str::singular($currentType->label()), + 'min' => $min, + 'max' => 3, + ]), + 'required' => true, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Recettes associées') }}</legend> + {{-- RECIPES RECIPES --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __(':field associées', ['field' => Str::ucfirst(__('models.classes.recipes'))]) }}</legend> <div class="row"> - <div class="col-12 col-md-6 form-group"> - @php - $data = [ - 'name' => 'associated_recipes_list', - 'value' => old('associated_recipes_list', $recipesSelected ?? []), - 'itemLimit' => [0,3], - 'placeholder' => 'Recherchez une recette', - 'itemsList' => $recipeList, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'associated_recipes_list', - 'helperId' => 'recipeListHelp', - 'helper' => __('0 à 3 recette(s) associée(s) maximum.'), + {{-- ADVICES --}} + <div class="col-12 m-md-0 mb-3"> + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'adviceProducts', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('models.classes.recipes')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'advices', + 'value' => $recipesSelected, + 'itemsList' => $recipeList, + 'itemLimit' => [0, 3], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(Str::ucfirst(__('models.classes.recipes'))), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.products'), + 'model2' => Str::singular($currentType->label()), + 'min' => 0, + 'max' => 3, + ]), + 'required' => true, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Astuces associées') }}</legend> + {{-- TIPS RECIPES --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __(':field associées', ['field' => Str::ucfirst(__('models.classes.tips'))]) }}</legend> <div class="row"> - <div class="col-12 col-md-6 form-group"> - @php - $data = [ - 'name' => 'associated_tips_list', - 'value' => old('associated_tips_list', $tipsSelected ?? []), - 'itemLimit' => [0,3], - 'placeholder' => 'Recherchez une astuce', - 'itemsList' => $tipList, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'associated_tips_list', - 'helperId' => 'tipListHelp', - 'helper' => __('0 à 3 astuce(s) associée(s) maximum.'), + {{-- ADVICES --}} + <div class="col-12 m-md-0 mb-3"> + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'adviceProducts', + 'label' => __(':field de :model', [ + 'field' => Str::ucfirst(__('models.classes.tips')), + 'model' => Str::singular($currentType->label()), + ]), + 'name' => 'advices', + 'value' => $tipsSelected, + 'itemsList' => $tipList, + 'itemLimit' => [0, 3], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(Str::ucfirst(__('models.classes.tips'))), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.products'), + 'model2' => Str::singular($currentType->label()), + 'min' => 0, + 'max' => 3, + ]), + 'required' => true, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Visibilité') }}</legend> + {{-- STATUS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.status')) }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch cursor-pointer"> - <input id="adviceStatus" - class="form-check-input" - name="status" - type="checkbox" - aria-describedby="adviceStatusHelp" - value="1" - role="button" - @if (old('status', $advice->status ?? '')) checked @endif> - <label class="form-check-label user-select-none" for="adviceStatus" role="button"> - <b>{{ __(':advice publiée ?', ['advice' => Str::singular($currentType->label)]) }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'status', - 'helperId' => 'adviceStatusHelp', - 'helper' => __(':advice est publiée ou non', ['advice' => Str::singular($currentType->label)]), - ]) - </div> + <div class="col-12"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'adviceStatus', + 'name' => 'status', + 'label' => __(':model publiée ?', [ + 'model' => Str::singular($currentType->label()), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $adviceModel ?? null, + ]) </div> </div> </fieldset> @@ -576,6 +684,20 @@ <div class="row"> <div class="col text-center"> - <p><b>{{ __('* Champs obligatoires') }}</b></p> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> </div> </div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/advice/index.blade.php b/resources/views/bo/pages/advice/index.blade.php index 15beea7..7270f81 100644 --- a/resources/views/bo/pages/advice/index.blade.php +++ b/resources/views/bo/pages/advice/index.blade.php @@ -1,124 +1,83 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $currentType]) -@section('title', sprintf('%s - %s', $currentType->label, Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', Str::singular($currentType->label())) +@section('description', __('Liste de tous les :model', ['model' => Str::singular($currentType->label())])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ $currentType->label }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - @if ($currentType != App\Enums\Advices\AdviceTypeEnum::all()) - <div class="col-md-3"> - <div class="input-group justify-content-end"> - <a href="{{ route('bo.advice.create', ['type' => $currentType->value]) }}" - class="btn btn-primary" - title="{{ __('Ajouter une :model', ['model' => Str::singular($currentType->label)]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - </div> - </div> - @endif - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $advice->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $cols = ['title' => __('Titre'), 'picture' => __('Image'), 'status' => __('Publiée'), 'updated_at' => __('Mise à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($advice->count()) - @foreach ($advice as $currentAdvice) - <tr> - <td class="align-middle">{{ $currentAdvice->title }}</td> - <td> - <img class="bo-image-preview" src="{{ asset($currentAdvice->picture) }}" alt="{{ $currentAdvice->pictures_alt }}"> - </td> - <td class="d-none d-lg-table-cell text-center align-middle"> - <form action="{{ route('bo.advice.change-published', $currentAdvice->id) }}" method="POST"> - @csrf - <button type="submit" - class="btn btn-sm" - title="{{ __($currentAdvice->status ? __('list.status.publish') : __('list.status.unpublish')) }}" - data-bs="tooltip" - data-bs-toggle="tooltip" - data-bs-placement="top"> - @if($currentAdvice->status) - <svg width="16" height="16" fill="currentColor" class="bi bi-check-circle-fill text-primary" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/> - </svg> - @else - <svg width="16" height="16" fill="currentColor" class="bi bi-x-circle-fill text-danger" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z"/> - </svg> - @endif - </button> - </form> - </td> - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $currentAdvice->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="align-middle"> - <form action="{{ route('bo.advice.destroy', $currentAdvice->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.advice.edit', $currentAdvice->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular($currentType->label)]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-sm btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular($currentType->label)]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => $currentType->label ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $advice->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $currentType]) + @if ($currentType != App\Enums\Advices\AdviceTypeEnum::all()) + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.advice.create', ['type' => $currentType->value]) }}" + title="{{ __('crud.helpers.create_model', ['model' => Str::singular($currentType->label())]) }}"> + <i class="fa-solid fa-plus"></i> + </a> + @endif </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($adviceModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'title' => __('validation.attributes.title'), + 'picture' => __('validation.attributes.picture'), + 'status' => __('validation.attributes.status'), + 'updated_at' => __('validation.attributes.updated_at'), + ], + ]) + </thead> + <tbody> + @foreach ($adviceModels as $adviceModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $adviceModel->title }}</td> + <td class="text-center align-middle"> + <img class="bo-image-preview" src="{{ asset($adviceModel->picture) }}" alt="{{ __('Preview advice picture') }}"> + </td> + @include('bo.modules.change-published-status', [ + 'routeName' => 'advice', + 'model' => $adviceModel, + ]) + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $adviceModel->updated_at }}</span></td> + @php + $routeName = request() + ->route() + ->getName(); + @endphp + @if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order') + @include('bo.modules.change-model-order', [ + 'routeName' => 'advice', + 'models' => $adviceModels, + 'model' => $adviceModel, + ]) + @endif + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.advice.destroy', $adviceModel->id) }}" + method="POST" novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.advice.edit', $adviceModel->id) }}" title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => $currentType->label()]) }}</td> + </tr> + @endif + </table> + </div> + {!! $adviceModels->links() !!} @endsection diff --git a/resources/views/bo/pages/home.blade.php b/resources/views/bo/pages/home.blade.php deleted file mode 100644 index 86e535e..0000000 --- a/resources/views/bo/pages/home.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@extends('../bo.backend') - -@section('title', __('Accueil')) -@section('description', __('Description site')) -@section('breadcrumb', 'no') - -@section('content') - <div class="container"> - <div class="row"> - <div class="col"> - <h1>{{ __('Panneau de bord') }}</h1> - </div> - </div> - </div> -@endsection diff --git a/resources/views/bo/pages/homepage.blade.php b/resources/views/bo/pages/homepage.blade.php new file mode 100644 index 0000000..4e9ac60 --- /dev/null +++ b/resources/views/bo/pages/homepage.blade.php @@ -0,0 +1,29 @@ +@extends('bo.layout') + +@section('title', __('Accueil')) +@section('description', __('Description site')) +@section('breadcrumb', 'no') + +@section('content') + <div class="card text-center"> + <div class="card-header fw-bold"> + <h1 class="h2 fw-bold">{{ __('Page d\'accueil') }}</h1> + </div> + <div class="card-body"> + <h5 class="card-title"> + {{ __('Bonjour :firstname :lastname !', [ + 'firstname' => Auth::user()->firstname, + 'lastname' => Auth::user()->lastname, + ]) }} + </h5> + <p class="card-text m-0"> + {{ __('Bienvenue dans le back-office, où vous pouvez gérer votre application web.') }} + </p> + <p class="card-text"> + {{ __('Pour tout problème ou évolution souhaitée, veuillez nous contacter via notre outil : ') }} + <a data-bs-toggle="tooltip" href="https://support.uwil.fr/" title="{{ __('Accéder à notre outil de ticketing') }}" + target="blank">https://support.uwil.fr/</a>. + </p> + </div> + </div> +@endsection diff --git a/resources/views/bo/pages/news/create.blade.php b/resources/views/bo/pages/news/create.blade.php index e36eaaf..253c740 100644 --- a/resources/views/bo/pages/news/create.blade.php +++ b/resources/views/bo/pages/news/create.blade.php @@ -1,37 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $newsModel]) -@section('title', sprintf('%s - %s', __('models.classes.news'), Str::ucfirst(__('création')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.news'))])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.news'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <h1 class="col h4"> - <a href="{{ route('bo.news.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ _('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.news') }} {{ __('création') }}</span> - </h1> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.news.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.news')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $newsModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.news.store') }}" method="POST" enctype="multipart/form-data"> - @csrf - @include('bo.pages.news.form') - <div class="text-center"> - <button type="submit" class="btn btn-primary">{{ __('Enregister') }}</button> - </div> - </form> + <div class="mb-md-0 mb-2"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + {{ __('crud.actions.save') }} + </button> </div> </div> + <form action="{{ route('bo.news.store') }}" method="POST" enctype="multipart/form-data"> + @csrf + @include('bo.pages.news.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/news/edit.blade.php b/resources/views/bo/pages/news/edit.blade.php index 0c5122d..5c00ca7 100644 --- a/resources/views/bo/pages/news/edit.blade.php +++ b/resources/views/bo/pages/news/edit.blade.php @@ -1,58 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $newsModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.news'), Str::ucfirst(__('édition')), $news->title)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.news'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.news'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $news]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.news.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.news') }} {{ __('édition') }} -> {{ $news->title }}</span> - </h1> - </div> - <div class="col text-end"> - <form action="{{ route('bo.news.destroy', $news->id) }}" method="POST" class="d-inline confirmDeleteJS"> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.news'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.news.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.news')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $newsModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.news.update', $news->id) }}" method="POST" enctype="multipart/form-data"> + <div class="mb-md-0 mb-2"> + <form class="confirmDeleteTS" action="{{ route('bo.news.destroy', $newsModel->id) }}" method="POST"> @csrf - @method('PUT') - @include('bo.pages.news.form', compact('news')) - <div class="text-center"> - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.news'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} + @method('DELETE') + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + {{ __('crud.actions.save') }} + </button> + <button class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.delete_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + <i class="fa-solid fa-trash"></i> </button> </div> </form> </div> </div> + <form action="{{ route('bo.news.update', $newsModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.news.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/news/form.blade.php b/resources/views/bo/pages/news/form.blade.php index 1c130d8..48bd1ec 100644 --- a/resources/views/bo/pages/news/form.blade.php +++ b/resources/views/bo/pages/news/form.blade.php @@ -1,398 +1,466 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- GENERAL INFORMATIONS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Informations générales') }}</legend> - <div class="row"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="newsTitle" class="col-form-label"> - <b>{{ __('Titre *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsTitle'])'></div> - <input name="title" type="text" value="{{ old('title', $news->title ?? '') }}" class="form-control need-word-counter" - id="newsTitle" aria-describedby="newsTitleHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'title', - 'helperId' => 'newsTitleHelp', - 'helper' => __('Titre de l\'actualité (3 caractères minimum, 255 maximum).') - ]) - </div> - </div> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="newsSubtitle" class="col-form-label"> - <b>{{ __('Sous-titre *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsSubtitle'])'></div> - <input name="subtitle" type="text" value="{{ old('subtitle', $news->subtitle ?? '') }}" class="form-control need-word-counter" - id="newsSubtitle" aria-describedby="newsSubtitleHelp" placeholder="{{ __('Une chaîne de caractères explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'subtitle', - 'helperId' => 'newsSubtitleHelp', - 'helper' => __('Doit décrire précisément l\'actualité (3 caractères minimum, 255 maximum).') - ]) - </div> - </div> - </div> - <div class="row"> - <div class="col-12 col-md-6 form-group"> - <label for="newscategories" class="col-form-label"> - <b>{{ __('Catégorie(s) de l\'actualité *') }}</b> - </label> - @php - $data = [ - 'name' => 'categories', - 'value' => old('categories', $news->categories ?? []), - 'itemLimit' => [1,2], - 'placeholder' => 'Ajoutez ici vos catégories', - 'itemsList' => $newsCategories, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'categories', - 'helperId' => 'newsCategoriesHelp', - 'helper' => __('Catégorie(s) de l\'actualité (1 minimum, 2 maximum).'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('SEO') }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="newsSeoTitle" class="col-form-label"> - <b>{{ __('Titre seo') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsSeoTitle'])'></div> - <input name="seo_title" type="text" value="{{ old('seo_title', $news->seo_title ?? '') }}" class="form-control need-word-counter" - id="newsSeoTitle" aria-describedby="newsSeoTitleHelp" placeholder="{{ __('Un titre en 70 caractères maximum') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_title', - 'helperId' => 'newsSeoTitleHelp' , - 'helper' => __('Doit décrire précisément la page, recommandation pour un positionnement optimal dans les moteurs de recherche : entre 45 et 70 caractères, balise <title>.') + {{-- TITLE --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsTitle', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'title', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.news')), + ]), ]) </div> - <div class="col-12 col-md-6 form-group"> - <label for="newsSeoDescription" class="col-form-label"> - <b>{{ __('Description seo') }} *</b> - </label> - @php - $data = [ - 'id' => 'newsSeoDescription', - 'class' => 'form-control', - 'name' => 'seo_description', - 'placeholder' => __('Une description du contenu de la page pour les moteurs de recherche.'), - 'ariaDescribedby' => 'newsSeoDescriptionHelp', - 'value' => old('newsSeoDescription', $news->seo_description ?? ''), - 'required' => true, - 'value' => old('seo_description', $news->seo_description ?? '') - ]; - @endphp - <div id="input-text-auto" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_description', - 'helperId' => 'newsSeoDescriptionHelp', - 'helper' => __(' Doit décrire précisément le contenu de la page, requiert entre 50 et 160 caractères, balise <meta> description.') + {{-- SUBTITLE --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsSubtitle', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'subtitle', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => + __('Doit décrire précisément l\'actualité. ') . + __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => Str::singular(__('models.classes.news')), + ]), + ]) + </div> + {{-- CATEGORIES --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'newsCategories', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.categories')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'name' => 'categories', + 'model' => $newsModel ?? null, + 'itemsList' => $newsCategories, + 'itemLimit' => [1,2], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(__('models.classes.news')), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('validation.attributes.categories'), + 'model2' => Str::singular(__('models.classes.news')), + 'min' => 1, + 'max' => 2, + ]), + 'required' => true, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- SEO --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.seo')) }}</legend> + <div class="row mb-3"> + {{-- SEO_TITLE --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsSeoTitle', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'seo_title', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => sprintf( + '%s %s', + __('validation.custom.seo_title_helper'), + __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'min' => 45, + 'max' => 70, + ]), + ), + 'placeholder' => __(':field de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.news')), + ]), + ]) + </div> + {{-- SEO_DESCRIPTION --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsSeoDescription', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'seo_description', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => sprintf( + '%s %s', + __('validation.custom.seo_description_helper'), + __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'min' => 50, + 'max' => 160, + ]) + ), + 'placeholder' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.news')), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- BLOC 1 --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Corps bloc 1') }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="newsPictureAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsPictureAlt'])'></div> - <input name="picture_alt" type="text" - value="{{ old('picture_alt', $news->picture_alt ?? '') }}" class="form-control need-word-counter" - id="newsPictureAlt" aria-describedby="newsPictureAltHelp" - placeholder="{{ __('Une description de l\'image pour les non voyants') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_alt', - 'helperId' => 'newsPictureAltHelp', - 'helper' => __( - 'Utile pour les moteurs de recherches et les non voyants (5 à 6 mots / 3 caractères minimum, 255 maximum).' - ), + {{-- PICTURE_ALT --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsPictureAlt', + 'label' => __(':field1 de l\':field2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_alt', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), ]) </div> - <div class="col-12 col-md-6 form-group"> - <label for="newsPictureTitle" class="col-form-label"> - <b>{{ __('Titre de l\'image *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsPictureTitle'])'></div> - <input name="picture_title" type="text" - value="{{ old('picture_title', $news->picture_title ?? '') }}" class="form-control need-word-counter" - id="newsPictureTitle" aria-describedby="newsPictureTitleHelp" - placeholder="{{ __('Une description de l\'actualité pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_title', - 'helperId' => 'newsPictureTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image (3 caractères minimum, 255 maximum).' - ), + {{-- PICTURE_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsPictureTitle', + 'label' => __(':field1 de l\':field2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_title', + 'required' => true, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'placeholder' => __(':field1 de l\':field2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + ]) + </div> + {{-- PICTURE --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'newsPicture', + 'name' => 'picture', + 'width' => 920, + 'height' => 1025, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '920px', + 'heightpx' => '1025px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + {{-- CONTENT --}} + <div class="col-12"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'newsContent', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.content')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'name' => 'content', + 'model' => $newsModel, + 'required' => true, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), ]) </div> </div> + </fieldset> + </div> + {{-- PRODUCTS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.associated_products')) }}</legend> <div class="row mb-3"> <div class="col-12"> - @php - $data = [ - 'id' => 'newsPicture', - 'name' => 'picture', - 'helper' => __('L\'image du premier bloc d\'actualité, doit être de 920px (largeur) par 1025px (hauteur)'), - 'width' => 920, - 'height' => 1025, - 'value' => $news->picture ?? '', - 'required' => true, - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - <div class="row mb-3"> - <div class="col-12 form-group"> - <label for="content" class="col-form-label"> - <b>{{ __('Contenu de l\'actualité *') }}</b> - </label> - @php - $data = [ - 'name' => 'content', - 'text' => old('content', $news->content ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'content', - 'helperId' => 'newsContentHelp', - 'helper' => __('Relisez bien votre contenu avant de le publier (15 caractères minimum).'), + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'newsProducts', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('models.classes.products')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'name' => 'products', + 'model' => $newsModel ?? null, + 'itemsList' => $newsProducts, + 'itemLimit' => [0,3], + 'placeholder' => __('Rechercher un :model', [ + 'model' => Str::singular(__('models.classes.products')), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.products'), + 'model2' => Str::singular(__('models.classes.news')), + 'min' => 0, + 'max' => 3, + ]), + 'required' => false, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Produits associés à l\'actualité') }}</legend> - <div class="row"> - <div class="col-12 col-md-6 form-group"> - @php - $data = [ - 'name' => 'products', - 'value' => old('products', $news->products ?? []), - 'itemLimit' => [0,3], - 'placeholder' => 'Ajoutez ici vos produits', - 'itemsList' => $newsProducts, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'products', - 'helperId' => 'newsProductsHelp', - 'helper' => __('0 à 3 produit(s) associé(s) maximum.'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- BLOC 2 --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Corps bloc 2') }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="newsPicture2Alt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image 2') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsPicture2Alt'])'></div> - <input name="picture2_alt" type="text" - value="{{ old('picture2_alt', $news->picture2_alt ?? '') }}" class="form-control need-word-counter" - id="newsPicture2Alt" aria-describedby="newsPicture2AltHelp" - placeholder="{{ __('Une description de l\'image pour les non voyants') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'picture2_alt', - 'helperId' => 'newsPicture2AltHelp', - 'helper' => __( - 'Utile pour les moteurs de recherches et les non voyants (5 à 6 mots / 3 caractères minimum, 255 maximum).' - ), + {{-- PICTURE2_ALT --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsPicture2Alt', + 'label' => __(':field1 de l\':field2 2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture2_alt', + 'required' => false, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), ]) </div> - <div class="col-12 col-md-6 form-group"> - <label for="newsPicture2Title" class="col-form-label"> - <b>{{ __('Titre de l\'image 2') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsPicture2Title'])'></div> - <input name="picture2_title" type="text" - value="{{ old('picture2_title', $news->picture2_title ?? '') }}" class="form-control need-word-counter" - id="newsPicture2Title" aria-describedby="newsPicture2TitleHelp" - placeholder="{{ __('Une description de l\'actualité pour les moteurs de recherche') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'picture2_title', - 'helperId' => 'newsPicture2TitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image (3 caractères minimum, 255 maximum).' - ), + {{-- PICTURE2_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsPicture2Title', + 'label' => __(':field1 de l\':field2 2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture2_title', + 'required' => false, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'placeholder' => __(':field1 de l\':field2 2 de l\':model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.news')), + ]), + ]) + </div> + {{-- PICTURE2 --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'newsPicture2', + 'name' => 'picture2', + 'width' => 920, + 'height' => 1025, + 'model' => $newsModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '920px', + 'heightpx' => '1025px', + ]), + 'required' => false, + 'preview' => true, + ]) + </div> + {{-- CONTENT2 --}} + <div class="col-12"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'newsContent2', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.content')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'name' => 'content2', + 'model' => $newsModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), ]) </div> </div> + </fieldset> + </div> + {{-- NEWS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Actualité(s) associées à l\'actualité') }}</legend> <div class="row mb-3"> <div class="col-12"> - @php - $data = [ - 'id' => 'newsPicture2', - 'name' => 'picture2', - 'helper' => __('L\'image du deuxième bloc d\'actualité, doit être de 920px (largeur) par 1025px (hauteur)'), - 'width' => 920, - 'height' => 1025, - 'value' => $news->picture2 ?? '', - 'required' => false, - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture2']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - <div class="row mb-3"> - <div class="col-12 form-group"> - <label for="content2" class="col-form-label"> - <b>{{ __('Contenu de l\'actualité') }}</b> - </label> - @php - $data = [ - 'name' => 'content2', - 'text' => old('content2', $news->content2 ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'content2', - 'helperId' => 'newsContent2Help', - 'helper' => __('Relisez bien votre contenu avant de le publier (15 caractères minimum).'), + @include('bo.partials.inputs.pivot-belongsToMany', [ + 'id' => 'newsNews', + 'label' => __(':field liées à l\':model', [ + 'field' => Str::ucfirst(__('models.classes.news')), + 'model' => Str::singular(__('models.classes.news')), + ]), + 'name' => 'associated_news_list', + 'attributeName' => 'news', + 'model' => $newsModel ?? null, + 'itemsList' => $newsList, + 'itemLimit' => [0,3], + 'placeholder' => __('Rechercher une :model', [ + 'model' => Str::singular(__('models.classes.news')), + ]), + 'helper' => __('Séléctionnez les :model1 à associer à cette :model2 (minimum :min, maximum :max)', [ + 'model1' => __('models.classes.news'), + 'model2' => Str::singular(__('models.classes.news')), + 'min' => 0, + 'max' => 3, + ]), + 'required' => false, ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Actualité(s) associées à l\'actualité') }}</legend> - <div class="row"> - <div class="col-12 col-md-6 form-group"> - @php - $data = [ - 'name' => 'associated_news_list', - 'value' => old('associated_news_list', $news->news ?? []), - 'itemLimit' => [0,3], - 'placeholder' => 'Ajoutez ici vos actualités', - 'itemsList' => $newsList, - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="belongs-to-many-dropdown" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'associated_news_list', - 'helperId' => 'newsListHelp', - 'helper' => __('0 à 3 actualité(s) associée(s) maximum.'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- EVENT --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Déclarer un évènement') }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6"> - <div class="form-group"> - <label for="newsevent_start"><b>{{ __('Date de début de l\'évènement (Europe/Paris)') }}</b></label> - <input id="newsevent_start" name="event_start" class="form-control publishTime" type="date" data-form-type="date" aria-describedby="newsEventStartHelp" value="{{ old('event_start', ((isset($news) and $news->event_start) ? $news->event_start->format('Y-m-d') : '')) }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'event_start', 'helperId' => 'newsEventStartHelp' , 'helper' => __('Uniquement si l\'article est associé à un évènement.') - ]) - </div> + {{-- EVENT_START --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.timestamp-date', [ + 'id' => 'newsEventStart', + 'label' => __(':field (Europe/Paris)', [ + 'field' => __('validation.attributes.event_start'), + ]), + 'name' => 'event_start', + 'required' => false, + 'model' => $newsModel ?? null, + 'defaultValue' => false, + 'helper' => __('Uniquement si l\'article est associé à un évènement.'), + ]) </div> - <div class="col-12 col-md-6"> - <div class="form-group"> - <label for="newsevent_end"><b>{{ __('Date de fin de l\'évènement (Europe/Paris)') }}</b></label> - <input id="newsevent_end" name="event_end" class="form-control publishTime" type="date" data-form-type="date" aria-describedby="newsEventEndHelp" value="{{ old('event_end', ((isset($news) and $news->event_end) ? $news->event_end->format('Y-m-d') : '')) }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'event_end', 'helperId' => 'newsEventEndHelp' , 'helper' => __('Uniquement si l\'article est associé à un évènement.') - ]) - </div> + {{-- EVENT_END --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.timestamp-date', [ + 'id' => 'newsEventEnd', + 'label' => __(':field (Europe/Paris)', [ + 'field' => __('validation.attributes.event_end'), + ]), + 'name' => 'event_end', + 'required' => false, + 'model' => $newsModel ?? null, + 'defaultValue' => false, + 'helper' => __('Uniquement si l\'article est associé à un évènement.'), + ]) </div> - <div class="col-12 col-md-6 form-group"> - <label for="newsEventText" class="col-form-label"> - <b>{{ __('Description de l\'évènement') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'newsEventText'])'></div> - <input name="event_text" type="text" - value="{{ old('event_text', $news->event_text ?? '') }}" class="form-control need-word-counter" - id="newsEventText" aria-describedby="newsEventTextHelp" - placeholder="{{ __('Un texte décrivant précisemment l\'évènement') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'event_text', - 'helperId' => 'newsEventTextHelp', - 'helper' => __( - 'Doit décrire l\'évènement.' + {{-- EVENT_TEXT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'newsEventText', + 'label' => __(':field1 de l\':field2', [ + 'field1' => Str::ucfirst(__('validation.attributes.description')), + 'field2' => Str::ucfirst(__('validation.attributes.event')), + ]), + 'hasWordCounter' => true, + 'name' => 'event_text', + 'required' => false, + 'model' => $newsModel ?? null, + 'helper' => sprintf( + '%s %s', + __('validation.custom.event_text_helper'), + __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.description')), + 'model' => Str::singular(__('validation.attributes.event')), + ]), + 'min' => 3, + 'max' => 255, + ]) ), + 'placeholder' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.description')), + 'model' => Str::singular(__('validation.attributes.event')), + ]), ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Visibilité') }}</legend> + {{-- STATUS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.status')) }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch cursor-pointer"> - <input id="newsStatus" - class="form-check-input" - name="status" - type="checkbox" - aria-describedby="newsStatusHelp" - value="1" - role="button" - @if (old('status', $news->status ?? '')) checked @endif> - <label class="form-check-label" for="newsStatus" role="button"> - <b>{{ __('Actualité publiée ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'status', - 'helperId' => 'newsStatusHelp', - 'helper' => __('L\'actualité est publiée ou non'), - ]) - </div> + <div class="col-12"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'newsStatus', + 'name' => 'status', + 'label' => __(':model publiée ?', [ + 'model' => Str::singular(__('models.classes.news')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $newsModel ?? null, + ]) </div> </div> </fieldset> @@ -404,3 +472,17 @@ <p><b>{{ __('* Champs obligatoires') }}</b></p> </div> </div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/news/index.blade.php b/resources/views/bo/pages/news/index.blade.php index d834116..0f3eaa0 100644 --- a/resources/views/bo/pages/news/index.blade.php +++ b/resources/views/bo/pages/news/index.blade.php @@ -1,119 +1,66 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.news'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.news')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.news')])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.news') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - <div class="col-md-3"> - <div class="input-group justify-content-end"> - <a href="{{ route('bo.news.create') }}" - class="btn btn-primary" - title="{{ __('Ajouter un :model', ['model' => Str::singular(__('models.classes.news'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - </div> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $news->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $cols = ['title' => __('Titre'), 'subtitle' => __('Sous-titre'), 'status' => __('Publiée'), 'updated_at' => __('Mise à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($news->count()) - @foreach ($news as $currentNews) - <tr> - <td class="align-middle">{{ $currentNews->title }}</td> - <td class="align-middle"><p class="text-ellipsis m-0">{{ $currentNews->subtitle }}</p></td> - <td class="d-none d-lg-table-cell text-center align-middle"> - <form action="{{ route('bo.news.change-published', $currentNews->id) }}" method="POST"> - @csrf - <button type="submit" - class="btn btn-sm" - title="{{ __($currentNews->status ? __('list.status.publish') : __('list.status.unpublish')) }}" - data-bs="tooltip" - data-bs-placement="top"> - @if($currentNews->status) - <svg width="16" height="16" fill="currentColor" class="bi bi-check-circle-fill text-primary" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/> - </svg> - @else - <svg width="16" height="16" fill="currentColor" class="bi bi-x-circle-fill text-danger" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z"/> - </svg> - @endif - </button> - </form> - </td> - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $currentNews->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="align-middle"> - <form action="{{ route('bo.news.destroy', $currentNews->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.news.edit', $currentNews->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.news'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-sm btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.news'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.news') ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $news->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.news.create') }}" + title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.news'))]) }}"> + <i class="fa-solid fa-plus"></i> + </a> </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($newsModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'title' => __('validation.attributes.title'), + 'subtitle' => __('validation.attributes.subtitle'), + 'status' => __('validation.attributes.status'), + 'updated_at' => __('validation.attributes.updated_at'), + ], + ]) + </thead> + <tbody> + @foreach ($newsModels as $newsModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $newsModel->title }}</td> + <td class="text-center align-middle"> + <p class="m-0 mx-auto text-ellipsis">{{ $newsModel->subtitle }}</p> + </td> + @include('bo.modules.change-published-status', [ + 'routeName' => 'news', + 'model' => $newsModel, + ]) + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $newsModel->updated_at }}</span></td> + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.news.destroy', $newsModel->id) }}" method="POST" + novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.news.edit', ['news' => $newsModel->id]) }}" title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.news')]) }}</td> + </tr> + @endif + </table> + </div> + {!! $newsModels->links() !!} @endsection diff --git a/resources/views/bo/pages/newscategories/edit.blade.php b/resources/views/bo/pages/newscategories/edit.blade.php index 0b6cbbf..bf6a6d1 100644 --- a/resources/views/bo/pages/newscategories/edit.blade.php +++ b/resources/views/bo/pages/newscategories/edit.blade.php @@ -1,45 +1,40 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $newscategoryModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.newscategories'), Str::ucfirst(__('édition')), $newscategory->label)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.newscategories'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.newscategories'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $newscategory]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.newscategories.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.newscategories') }} {{ __('édition') }} -> {{ $newscategory->label }}</span> - </h1> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.newscategories.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.newscategories')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $newscategoryModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.newscategories.update', $newscategory->id) }}" method="POST" enctype="multipart/form-data"> - @csrf - @method('PUT') - @include('bo.pages.newscategories.form', compact('newscategory')) - <div class="text-center"> - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.newscategories'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} - </button> - </div> - </form> + <div class="mb-md-0 mb-2"> + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.newscategories'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> </div> </div> + <form action="{{ route('bo.newscategories.update', $newscategoryModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.newscategories.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.newscategories'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/newscategories/form.blade.php b/resources/views/bo/pages/newscategories/form.blade.php index b16158a..527db12 100644 --- a/resources/views/bo/pages/newscategories/form.blade.php +++ b/resources/views/bo/pages/newscategories/form.blade.php @@ -1,22 +1,55 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Libellé') }}</legend> + {{-- LABEL --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('validation.attributes.label') }}</legend> <div class="row"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <div class="word-counter" data-json='@json(['id' => 'newscategoryLabel'])'></div> - <input name="label" type="text" value="{{ old('label', $newscategory->label ?? '') }}" class="form-control need-word-counter" - id="newscategoryLabel" aria-describedby="newscategoryLabelHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'label', - 'helperId' => 'newscategoryLabelHelp', - 'helper' => __('Min : 3 caractères ; max : 30 caractères.') - ]) - </div> + <div class="col-12"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slideLabel', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'label', + 'required' => true, + 'model' => $newscategoryModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) </div> </div> </fieldset> </div> </div> +<div class="row"> + <div class="col text-center"> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> + </div> +</div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/newscategories/index.blade.php b/resources/views/bo/pages/newscategories/index.blade.php index dddec09..0f5fc1f 100644 --- a/resources/views/bo/pages/newscategories/index.blade.php +++ b/resources/views/bo/pages/newscategories/index.blade.php @@ -1,69 +1,46 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.newscategories'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.newscategories')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.newscategories')])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.newscategories') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $cols = ['label' => __('Libellé'), 'updated_at' => __('Mis à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($newscategories->count()) - @foreach ($newscategories as $newscategory) - <tr> - <td class="align-middle">{{ $newscategory->label }}</td> - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $newscategory->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="text-end align-middle"> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.newscategories.edit', $newscategory->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.newscategories'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.newscategories') ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($newscategoryModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'label' => __('validation.attributes.label'), + 'updated_at' => __('validation.attributes.updated_at'), + ], + ]) + </thead> + <tbody> + @foreach ($newscategoryModels as $newscategoryModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $newscategoryModel->label }}</td> + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $newscategoryModel->updated_at }}</span> + </td> + <td class="text-end align-middle"> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.newscategories.edit', ['newscategory' => $newscategoryModel->id]) }}" + title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.newscategories')]) }}</td> + </tr> + @endif + </table> + </div> + {!! $newscategoryModels->links() !!} @endsection diff --git a/resources/views/bo/pages/products/create.blade.php b/resources/views/bo/pages/products/create.blade.php index 8e2f455..ecad61f 100644 --- a/resources/views/bo/pages/products/create.blade.php +++ b/resources/views/bo/pages/products/create.blade.php @@ -1,37 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $productModel]) -@section('title', sprintf('%s - %s', __('models.classes.products'), Str::ucfirst(__('création')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.products'))])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.products'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <h1 class="col h4"> - <a href="{{ route('bo.products.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ _('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.products') }} {{ __('création') }}</span> - </h1> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.products.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.products')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $productModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.products.store') }}" method="POST" enctype="multipart/form-data"> - @csrf - @include('bo.pages.products.form') - <div class="text-center"> - <button type="submit" class="btn btn-primary">{{ __('Enregister') }}</button> - </div> - </form> + <div class="mb-md-0 mb-2"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + {{ __('crud.actions.save') }} + </button> </div> </div> + <form action="{{ route('bo.products.store') }}" method="POST" enctype="multipart/form-data"> + @csrf + @include('bo.pages.products.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/products/edit.blade.php b/resources/views/bo/pages/products/edit.blade.php index 85f06c6..58f7d1f 100644 --- a/resources/views/bo/pages/products/edit.blade.php +++ b/resources/views/bo/pages/products/edit.blade.php @@ -1,58 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $productModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.products'), Str::ucfirst(__('édition')), $product->label)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.products'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.products'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $product]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.products.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.products') }} {{ __('édition') }} -> {{ $product->label }}</span> - </h1> - </div> - <div class="col text-end"> - <form action="{{ route('bo.products.destroy', $product->id) }}" method="POST" class="d-inline confirmDeleteJS"> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.products'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.products.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.products')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $productModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.products.update', $product->id) }}" method="POST" enctype="multipart/form-data"> + <div class="mb-md-0 mb-2"> + <form class="confirmDeleteTS" action="{{ route('bo.products.destroy', $productModel->id) }}" method="POST"> @csrf - @method('PUT') - @include('bo.pages.products.form', compact('product')) - <div class="text-center"> - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.products'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} + @method('DELETE') + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + {{ __('crud.actions.save') }} + </button> + <button class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.delete_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + <i class="fa-solid fa-trash"></i> </button> </div> </form> </div> </div> + <form action="{{ route('bo.products.update', $productModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.products.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/products/form.blade.php b/resources/views/bo/pages/products/form.blade.php index 60824cf..8dc8cba 100644 --- a/resources/views/bo/pages/products/form.blade.php +++ b/resources/views/bo/pages/products/form.blade.php @@ -1,431 +1,449 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Informations générales') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6"> - <label for="productSpecies" class="col-form-label"><b>{{ __('Label') }} *</b></label> - <div class="form-group"> - <div class="word-counter" data-json='@json(['id'=> 'productLabel'])'></div> - <input name="label" type="text" value="{{ old('label', $product->label ?? '') }}" class="form-control need-word-counter" id="productLabel" aria-describedby="productLabelHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'label', - 'helperId' => 'productLabelHelp', - 'helper' => __('Doit décrire précisément le produit (minimum 3 caractères).') - ]) - </div> - </div> - </div> - <div class="row mb-3"> - <div class="col-12 col-md-6"> - <label for="productSpecies" class="col-form-label"><b>{{ __('Espèce') }} *</b></label> - <select id="productSpecies" class="form-select" name="species" aria-describedby="productSpeciesHelp" size="5" required> - @foreach (App\Enums\Products\ProductSpeciesEnum::toArray() as $species) - <option value="{{ $species->value }}" @if (old('species', $product->species->value ?? null) == $species->value) selected @endif> - {{ $species->label }} - </option> - @endforeach - </select> - @include('bo.modules.input-error', [ - 'inputName' => 'species', - 'helperId' => 'productSpeciesHelp', - 'helper' => __('Nom de l\'espèce.'), - ]) - </div> - <div class="col-12 col-md-6"> - <label for="subrange_id" class="col-form-label"><b>{{ __('Sous-gamme') }} *</b></label> - <select id="subrange_id" size="5" class="form-select" name="subrange_id" aria-describedby="subrangeHelp" required> - @foreach ($subranges as $subrange) - <option value="{{ $subrange->id }}" @if (old('subrange_id', $product->subrange_id ?? 1) == $subrange->id) selected @endif> - {{ $subrange->label }} - </option> - @endforeach - </select> - @include('bo.modules.input-error', [ - 'inputName' => 'subrange_id', - 'helperId' => 'subrangeHelp', - 'helper' => __('Nom de la sous-gamme.'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('SEO') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="productSeoTitle" class="col-form-label"> - <b>{{ __('Titre seo') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id'=> 'productSeoTitle'])'></div> - <input name="seo_title" type="text" value="{{ old('seo_title', $product->seo_title ?? '') }}" class="form-control need-word-counter" id="productSeoTitle" aria-describedby="productSeoTitleHelp" placeholder="{{ __('Un titre en 70 caractères maximum') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_title', - 'helperId' => 'productSeoTitleHelp' , - 'helper' => __('Doit décrire précisément la page, recommandation pour un positionnement optimal dans les moteurs de recherche : entre 45 et 70 caractères, balise <title>.') - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="productSeoDescription" class="col-form-label"> - <b>{{ __('Description seo') }} *</b> - </label> - @php - $data = [ - 'id' => 'productSeoDescription', - 'class' => 'form-control', - 'name' => 'seo_description', - 'placeholder' => __('Une description du contenu de la page pour les moteurs de recherche.'), - 'ariaDescribedby' => 'productSeoDescriptionHelp', - 'value' => old('productSeoDescription', $product->seo_description ?? ''), - 'required' => true, - 'value' => old('seo_description', $product->seo_description ?? '') - ]; - @endphp - <div id="input-text-auto" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_description', - 'helperId' => 'productSeoDescriptionHelp', - 'helper' => __(' Doit décrire précisément le contenu de la page, requiert entre 50 et 160 caractères, balise - <meta> description.') - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Illustration') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="productStickerSmAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id'=> 'productStickerSmAlt'])'></div> - <input name="sticker_sm_alt" type="text" value="{{ old('sticker_sm_alt', $product->sticker_sm_alt ?? '') }}" class="form-control need-word-counter" id="productStickerSmAlt" aria-describedby="productStickerSmAltHelp" placeholder="{{ __('Une image de petits chatons') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_sm_alt', - 'helperId' => 'productStickerSmAltHelp', - 'helper' => __( - 'Doit décrire votre image pour les moteurs de recherches et les non voyants (5 à 6 mots, minimum 3 caractères)' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="productStickerSmTitle" class="col-form-label"> - <b>{{ __('Titre de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id'=> 'productStickerSmTitle'])'></div> - <input name="sticker_sm_title" type="text" value="{{ old('sticker_sm_title', $product->sticker_sm_title ?? '') }}" class="form-control need-word-counter" id="productStickerSmTitle" aria-describedby="productStickerSmTitleHelp" placeholder="{{ __('Une description du produit pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'sticker_sm_title', - 'helperId' => 'productStickerSmTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image (minimum 3 caractères).' - ), + {{-- GÉNÉRALS INFORMATIONS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('Informations générales')) }}</legend> + <div class="row"> + {{-- LABEL --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'productLabel', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'hasWordCounter' => true, + 'name' => 'label', + 'required' => true, + 'model' => $productModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.products')), + ]), ]) </div> </div> <div class="row"> - <div class="col-12"> - @php - $data = [ - 'id' => 'productStickerSm', - 'name' => 'sticker_sm', - 'helper' => __('L\'image qui va servir de vignette au produit, doit être de 206px (largeur) par 159px (hauteur)'), - 'width' => 206, - 'height' => 159, - 'value' => $product->sticker_sm ?? '', - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'sticker_sm']) - <div class="image-input" data-json='@json($data)'></div> + {{-- SPECIES --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-enum', [ + 'id' => 'productSpecies', + 'label' => Str::ucfirst(__('validation.attributes.species')), + 'name' => 'species', + 'size' => 5, + 'model' => $productModel ?? null, + 'required' => true, + 'associatedModels' => \App\Enums\Products\ProductSpeciesEnum::toArray(), + 'helper' => __('validation.custom.select_entity', [ + 'entity' => __('une ') . Str::ucfirst(__('validation.attributes.species')), + ]), + ]) + </div> + {{-- SPECIES --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.bigint-foreign-id', [ + 'id' => 'productSubrange', + 'label' => Str::singular(__('models.classes.subranges')), + 'name' => 'subrange_id', + 'size' => 5, + 'model' => $productModel, + 'associatedModels' => $subrangeModels, + 'foreignLabel' => 'label', + 'helper' => __('validation.custom.select_entity', [ + 'entity' => __('une ') . Str::singular(__('models.classes.subranges')), + ]), + ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Images du slider') }} *</legend> + {{-- SEO --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.seo')) }}</legend> + <div class="row"> + {{-- SEO_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'productSeoTitle', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'hasWordCounter' => true, + 'name' => 'seo_title', + 'required' => true, + 'model' => $productModel ?? null, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'min' => 40, + 'max' => 70, + ]) . __(' Balise <title>.'), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.products')), + ]), + ]) + </div> + {{-- SEO_DESCRIPTION --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar-multiline', [ + 'id' => 'productSeoDescription', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'name' => 'seo_description', + 'model' => $productModel ?? null, + 'required' => true, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'min' => 50, + 'max' => 160, + ]) . __(' Balise <meta> description.'), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.products')), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- STICKER_SM --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture')) }}</legend> + <div class="row"> + {{-- STICKER_SM_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'productStickerSmAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_sm_alt', + 'required' => true, + 'model' => $productModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.products')), + ]), + ]) + </div> + {{-- STICKER_SM_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'productStickerSmTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'hasWordCounter' => true, + 'name' => 'sticker_sm_title', + 'required' => true, + 'model' => $productModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.products')), + ]), + ]) + </div> + {{-- STICKER_SM --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'productStickerSm', + 'name' => 'sticker_sm', + 'width' => 206, + 'height' => 159, + 'model' => $productModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '206px', + 'heightpx' => '159px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + </div> + </fieldset> + </div> + {{-- SLIDER_PICTURES --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Images du sliders') }}</legend> <div class="row"> <div class="col-12"> @php - $data = [ - 'id' => 'productPictures', - 'name' => 'slider_pictures[]', - 'width' => 396, - 'height' => 286, - 'value' => $product->slider_pictures ?? [], - 'limit' => [1,5], - 'errors' => $errors->getBag('default')->getMessages() - ]; + $data = [ + 'id' => 'productPictures', + 'name' => 'slider_pictures[]', + 'width' => 396, + 'height' => 286, + 'value' => $productModel->slider_pictures ?? [], + 'limit' => [1, 5], + 'errors' => $errors->getBag('default')->getMessages(), + ]; @endphp <div class="images-input" data-json='@json($data)'></div> @include('bo.modules.input-error', [ - 'inputName' => 'slider_pictures[]', - 'helper' => __('Les images du slider doivent être de 396px (largeur) par 286px (hauteur), - (minimum 1 et maximum 5 images sont autorisées).') + 'inputName' => 'slider_pictures[]', + 'helper' => __('validation.custom.slider_pictures', [ + 'width' => 396, + 'height' => 286, + 'min' => 1, + 'max' => 5, + ]), ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Ingrédients') }} *</legend> - <div class="row mb-3"> - <div class="col-12 form-group"> - @php - $data = [ - 'name' => 'ingredients', - 'text' => old('ingredients', $product->ingredients ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'ingredients', - 'helperId' => 'productIngredientsHelp', - 'helper' => __('Relisez bien votre contenu avant de le publier (minimum 15 caractères).'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Avantage') }} *</legend> - <div class="row mb-3"> - <div class="col-12 form-group"> - @php - $data = [ - 'name' => 'advantage', - 'text' => old('advantage', $product->advantage ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'advantage', - 'helperId' => 'productAdvantageHelp', - 'helper' => __('Relisez bien votre contenu avant de le publier (minimum 15 caractères).'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Préparation') }} *</legend> - <div class="row mb-3"> - <div class="col-12 form-group"> - @php - $data = [ - 'name' => 'preparation', - 'text' => old('preparation', $product->preparation ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'preparation', - 'helperId' => 'productPreparationHelp', - 'helper' => __('Relisez bien votre contenu avant de le publier (minimum 15 caractères).'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Spécification') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6"> - <p class="col-form-label m-0"> - <b>{{ __('Conditionnement') }} *</b> - </p> - @php - $data = [ - 'itemList' => old('packaging', $product->packaging ?? []), - 'itemColumns' => [['value', 'Valeur']], - 'itemType' => ['text'], - 'inputPlaceholder' => ['Sous vide x20'], - 'itemLimit' => [1,6], - 'inputName' => 'packaging', - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="list-item" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'packaging', - 'helperId' => 'productStickerSmAltHelp', - 'helper' => __( - 'Doit décrire la valeur du conditionnement (minimum 3 caractères, 1 à 6 lignes).' - ), - ]) - </div> - <div class="col-12 col-md-6"> - <p class="col-form-label m-0"> - <b>{{ __('Calibre') }} *</b> - </p> - @php - $data = [ - 'itemList' => old('caliber', $product->caliber ?? []), - 'itemColumns' => [['value', 'Valeur']], - 'itemType' => ['text'], - 'inputPlaceholder' => ['90-120g'], - 'itemLimit' => [1,6], - 'inputName' => 'caliber', - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="list-item" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'caliber', - 'helperId' => 'productStickerSmAltHelp', - 'helper' => __( - 'Doit décrire la valeur du calibre (minimum 1 caractère, 1 à 6 lignes).' - ), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Valeurs nutritionnelles') }} *</legend> + {{-- INGREDIENTS --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.ingredients')) }}</legend> <div class="row mb-3"> <div class="col-12"> - @php - $data = [ - 'itemList' => old('nutritionnal_values', $product->nutritionnal_values ?? []), - 'itemColumns' => [['label', 'Libellé'], ['value', 'Valeur']], - 'itemType' => ['text', 'number'], - 'inputPlaceholder' => ['Sucres (en g) ', '6'], - 'itemLimit' => [9,9], - 'inputName' => 'nutritionnal_values', - 'errors' => $errors->getBag('default')->getMessages() - ]; - @endphp - <div class="list-item" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'nutritionnal_values', - 'helperId' => 'productStickerSmAltHelp', - 'helper' => __( - 'Doit décrire le libellé ainsi que la valeur nutritionnelle associée - (minimum 3 caractères pour le libellé, minimum 0 pour la valeur).' - ), + @include('bo.partials.inputs.text-html', [ + 'id' => 'productIngredients', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.ingredients')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'name' => 'ingredients', + 'model' => $productModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Indicateurs') }}</legend> + {{-- ADVANTAGES --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.advantages')) }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch"> - <input id="productFrench" class="form-check-input" name="is_frenchpoultry" type="checkbox" aria-describedby="productFrenchHelp" value="1" role="button" @if (old('is_frenchpoultry', $product->is_frenchpoultry ?? '')) checked @endif> - <label class="form-check-label" for="productFrench" role="button"> - <b>{{ __('Volaille Française ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'is_frenchpoultry', - 'helperId' => 'productFrenchHelp', - 'helper' => __('Le produit est une volaille Française ou non'), - ]) - </div> - </div> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch"> - <input id="productVip" class="form-check-input" name="is_vip" type="checkbox" aria-describedby="productVipHelp" value="1" role="button" @if (old('is_vip', $product->is_vip ?? '')) checked @endif> - <label class="form-check-label" for="productVip" role="button"> - <b>{{ __('Produit VIP ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'is_vip', - 'helperId' => 'productVipHelp', - 'helper' => __('Le produit est un produit VIP ou non'), - ]) - </div> + <div class="col-12"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'productAdvantage', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.advantages')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'name' => 'advantage', + 'model' => $productModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), + ]) </div> </div> + </fieldset> + </div> + {{-- PREPARATION --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.preparation')) }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch"> - <input id="productEgalim" class="form-check-input" name="is_egalim" type="checkbox" aria-describedby="productEgalimHelp" value="1" role="button" @if (old('is_egalim', $product->is_egalim ?? '')) checked @endif> - <label class="form-check-label" for="productEgalim" role="button"> - <b>{{ __('Egalim ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'is_egalim', - 'helperId' => 'productEgalimHelp', - 'helper' => __('Le produit est concerné par la loi Egalim ou non'), - ]) - </div> + <div class="col-12"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'productPreparation', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.preparation')), + 'model' => Str::singular(__('models.classes.products')), + ]), + 'name' => 'preparation', + 'model' => $productModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), + ]) </div> - <div class="col-12 col-md-6"> + </div> + </fieldset> + </div> + {{-- SPECIFICATION --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Spécification') }}</legend> + <div class="row"> + {{-- PACKAGING --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.text-list-items', [ + 'id' => 'productPackaging', + 'name' => 'packaging', + 'label' => Str::ucfirst(__('validation.attributes.packaging')), + 'model' => $productModel ?? null, + 'itemColumns' => [['value', 'Valeur']], + 'itemType' => ['text'], + 'itemLimit' => [1], + 'inputPlaceholder' => ['Sous-vide x20'], + 'required' => true, + 'helper' => __('validation.custom.list_items', [ + 'field' => Str::ucfirst(__('validation.attributes.packaging')), + 'min' => 3, + 'lineMin' => 1, + 'lineMax' => 6, + ]), + ]) + </div> + {{-- CALIBER --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.text-list-items', [ + 'id' => 'productCaliber', + 'name' => 'caliber', + 'label' => Str::ucfirst(__('validation.attributes.caliber')), + 'model' => $productModel ?? null, + 'itemColumns' => [['value', 'Valeur']], + 'itemType' => ['text'], + 'itemLimit' => [1], + 'inputPlaceholder' => ['90-120g'], + 'required' => true, + 'helper' => __('validation.custom.list_items', [ + 'field' => Str::ucfirst(__('validation.attributes.caliber')), + 'min' => 1, + 'lineMin' => 1, + 'lineMax' => 6, + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- NUTRITIONNAL VALUES --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Valeurs nutritionnelles') }}</legend> + <div class="row"> + <div class="col-12 mb-3"> + @include('bo.partials.inputs.text-list-items', [ + 'id' => 'productNutritionnalValues', + 'name' => 'nutritionnal_values', + 'label' => Str::ucfirst(__('validation.attributes.nutritionnal_values')), + 'model' => $productModel ?? null, + 'itemColumns' => [['label', 'Libellé'], ['value', 'Valeur']], + 'itemType' => ['text', 'number'], + 'itemLimit' => [9, 9], + 'inputPlaceholder' => ['Sucres (en g) ', '6'], + 'required' => true, + 'helper' => __('validation.custom.list_items', [ + 'field' => Str::ucfirst(__('validation.attributes.nutritionnal_values')), + 'min' => 3, + 'lineMin' => 1, + 'lineMax' => 6, + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- INDICATEURS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ __('Indicateurs') }}</legend> + <div class="row"> + {{-- IS_FRENCHPOULTRY --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'productFrenchPoultry', + 'name' => 'is_frenchpoultry', + 'label' => __('Le :model est une volaille Française ?', [ + 'model' => Str::singular(__('models.classes.products')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $productModel ?? null, + ]) + </div> + {{-- IS_VIP --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'productFrenchPoultry', + 'name' => 'is_vip', + 'label' => __('Le :model est un produit VIP ?', [ + 'model' => Str::singular(__('models.classes.products')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $productModel ?? null, + ]) + </div> + {{-- IS_EGALIM --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'productEgalim', + 'name' => 'is_egalim', + 'label' => __('Le :model est un produit Egalim ?', [ + 'model' => Str::singular(__('models.classes.products')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $productModel ?? null, + ]) + </div> + {{-- NUTRISCORE --}} + <div class="col-12 col-md-6 mb-3"> <div class="mb-2"> - <label for="nutriscore"><b>{{ __('Nutriscore') }} *</b></label> + <label class="col-form-label fw-bold p-0" for="nutriscore">{{ __('Nutriscore') }}</label> </div> <div class="btn-group" role="group" aria-label="Basic radio toggle button group"> - @foreach (App\Enums\NutriscoreEnum::toArray() as $nutriscore) - <input type="radio" class="btn-check" name="nutriscore" id="nutriscore{{$loop->index}}" value="{{$loop->index}}" autocomplete="off" @if (old('nutriscore', $product->nutriscore->value ?? '') == $nutriscore->value) checked @endif> - <label class="btn btn-outline-primary" for="nutriscore{{$loop->index}}">{{ $nutriscore->label }}</label> + @foreach (\App\Enums\NutriscoreEnum::toArray() as $nutriscore) + <input class="btn-check" id="nutriscore{{ $loop->index }}" name="nutriscore" type="radio" + value="{{ $loop->index }}" autocomplete="off" @if (old('nutriscore', isset($productModel->nutriscore) ? $productModel->nutriscore->value() : 0) == $nutriscore->value) checked @endif> + <label class="btn btn-outline-primary" for="nutriscore{{ $loop->index }}">{{ $nutriscore->label }}</label> @endforeach </div> </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Visibilité') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch cursor-pointer"> - <input id="productStatus" class="form-check-input" name="status" type="checkbox" aria-describedby="productStatusHelp" value="1" role="button" @if (old('status', $product->status ?? '')) checked @endif> - <label class="form-check-label" for="productStatus" role="button"> - <b>{{ __('Produit publié ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'status', - 'helperId' => 'productStatusHelp', - 'helper' => __('Le produit est publié ou non'), - ]) - </div> + {{-- STATUS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.status')) }}</legend> + <div class="row"> + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'productFrenchPoultry', + 'name' => 'status', + 'label' => __('Le :model est publié ?', [ + 'model' => Str::singular(__('models.classes.products')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $productModel ?? null, + ]) </div> </div> </fieldset> @@ -434,6 +452,20 @@ <div class="row"> <div class="col text-center"> - <p><b>{{ __('* Champs obligatoires') }}</b></p> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> </div> </div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/products/index.blade.php b/resources/views/bo/pages/products/index.blade.php index af47c3b..55c9b98 100644 --- a/resources/views/bo/pages/products/index.blade.php +++ b/resources/views/bo/pages/products/index.blade.php @@ -1,143 +1,83 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.products'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.products')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.products')])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.products') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - <div class="col-md-3"> - <div class="input-group justify-content-end"> - <a href="{{ route('bo.products.create') }}" - class="btn btn-primary" - title="{{ __('Ajouter un :model', ['model' => Str::singular(__('models.classes.products'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - </div> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $products->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $cols = ['label' => __('Label'), 'species' => __('Espèce'), 'image' => __('Image'), 'status' => __('Publié'), 'order' => __('Ordre'), 'updated_at' => __('Mis à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($products->count()) - @foreach ($products as $product) - <tr> - <td class="align-middle">{{ $product->label }}</td> - <td class="align-middle">{{ App\Enums\Products\ProductSpeciesEnum::toArray()[$product->species->value]->label }}</td> - <td class="align-middle"> - <img class="bo-image-preview" src="{{ asset($product->sticker_sm) }}" alt="{{ $product->sticker_sm_alt }}"> - </td> - <td class="d-none d-lg-table-cell text-center align-middle"> - <form action="{{ route('bo.products.change-published', $product->id) }}" method="POST"> - @csrf - <button type="submit" - class="btn btn-sm" - title="{{ __($product->status ? __('Dépublier') : __('Publier')) }}" - data-bs-toggle="tooltip"> - @if($product->status) - <svg width="16" height="16" fill="currentColor" class="bi bi-check-circle-fill text-primary" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/> - </svg> - @else - <svg width="16" height="16" fill="currentColor" class="bi bi-x-circle-fill text-danger" viewBox="0 0 16 16"> - <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z"/> - </svg> - @endif - </button> - </form> - </td> - @if(!$noOrder or $rst) - <td class="align-middle"> - @if(!($loop->first and $products->onFirstPage())) - <form action="{{ route('bo.products.change-order', ['product' => $product, 'action' => 'up']) }}" method="POST" class="text-center"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le haut') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-up"></i> - </button> - </form> - @endif - @if (!($loop->last and $products->currentPage() === $products->lastPage())) - <form action="{{ route('bo.products.change-order', ['product' => $product, 'action' => 'down']) }}" method="POST" class="text-center"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le bas') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-down"></i> - </button> - </form> - @endif - </td> - @endif - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $product->updated_at->formatLocalized('%d/%m/%Y à %I:%M') }}</span> - </td> - <td class="align-middle"> - <form action="{{ route('bo.products.destroy', $product->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.products.edit', $product->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.products'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-sm btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.products'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.products') ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $products->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.products.create') }}" + title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.products'))]) }}"> + <i class="fa-solid fa-plus"></i> + </a> </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($productModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'label' => __('validation.attributes.label'), + 'species' => __('validation.attributes.species'), + 'picture' => __('validation.attributes.picture'), + 'status' => __('validation.attributes.status'), + 'updated_at' => __('validation.attributes.updated_at'), + 'order' => __('validation.attributes.order'), + ], + ]) + </thead> + <tbody> + @foreach ($productModels as $productModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $productModel->label }}</td> + <td class="text-center align-middle">{{ $productModel->species->label() }}</td> + <td class="text-center align-middle"> + <img class="bo-image-preview" src="{{ asset($productModel->picture) }}" + alt="{{ __('Preview product picture') }}"> + </td> + @include('bo.modules.change-published-status', [ + 'routeName' => 'products', + 'model' => $productModel, + ]) + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $productModel->updated_at }}</span></td> + @php + $routeName = request() + ->route() + ->getName(); + @endphp + @if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order') + @include('bo.modules.change-model-order', [ + 'routeName' => 'products', + 'models' => $productModels, + 'model' => $productModel, + ]) + @endif + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.products.destroy', $productModel->id) }}" + method="POST" novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.products.edit', ['product' => $productModel->id]) }}" + title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.products')]) }}</td> + </tr> + @endif + </table> + </div> + {!! $productModels->links() !!} @endsection diff --git a/resources/views/bo/pages/ranges/edit.blade.php b/resources/views/bo/pages/ranges/edit.blade.php index 5b47321..b20fac0 100644 --- a/resources/views/bo/pages/ranges/edit.blade.php +++ b/resources/views/bo/pages/ranges/edit.blade.php @@ -1,45 +1,40 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $rangeModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.ranges'), Str::ucfirst(__('édition')), $range->label)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.ranges'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.ranges'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $range]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.ranges.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.ranges') }} {{ __('édition') }} -> {{ $range->label }}</span> - </h1> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.ranges.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.ranges')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $rangeModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.ranges.update', $range->id) }}" method="POST" enctype="multipart/form-data"> - @csrf - @method('PUT') - @include('bo.pages.ranges.form', compact('range')) - <div class="text-center"> - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.ranges'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} - </button> - </div> - </form> + <div class="mb-md-0 mb-2"> + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.ranges'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> </div> </div> + <form action="{{ route('bo.ranges.update', $rangeModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.ranges.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.ranges'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/ranges/form.blade.php b/resources/views/bo/pages/ranges/form.blade.php index fdd9fbf..e1ebec8 100644 --- a/resources/views/bo/pages/ranges/form.blade.php +++ b/resources/views/bo/pages/ranges/form.blade.php @@ -1,93 +1,265 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Libellé *') }}</legend> + {{-- LABEL --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.label')) }}</legend> <div class="row"> - <div class="col-12 col-md-6 mb-3"> + <div class="col-12"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangeLabel', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'label', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- COLOR --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.color')) }}</legend> + <div class="row"> + <div class="col-12 mb-3"> <div class="form-group"> - <div class="word-counter" data-json='@json(['id' => 'rangeLabel'])'></div> - <input name="label" type="text" value="{{ old('label', $range->label ?? '') }}" class="form-control need-word-counter" - id="rangeLabel" aria-describedby="rangeLabelHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'label', - 'helperId' => 'rangeLabelHelp', - 'helper' => __('Doit décrire précisément la gamme (3 caractères minimum, 255 maximum).') + @include('bo.partials.inputs.bigint-color', [ + 'id' => 'rangeColor', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.color')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'name' => 'color', + 'model' => $rangeModel ?? null, + 'required' => true, + 'helper' => __('validation.custom.color', [ + 'entity' => __('une ') . Str::ucfirst(__('validation.attributes.color')), + ]), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), ]) </div> </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('SEO') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="rangeSeoTitle" class="col-form-label"> - <b>{{ __('Titre seo') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'rangeSeoTitle'])'></div> - <input name="seo_title" type="text" value="{{ old('seo_title', $range->seo_title ?? '') }}" class="form-control need-word-counter" - id="rangeSeoTitle" aria-describedby="rangeSeoTitleHelp" placeholder="{{ __('Un titre en 70 caractères maximum') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_title', - 'helperId' => 'rangeSeoTitleHelp' , - 'helper' => __('Doit décrire précisément la page, recommandation pour un positionnement optimal dans les moteurs de recherche : entre 45 et 70 caractères, balise <title>.') - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="rangeSeoDescription" class="col-form-label"> - <b>{{ __('Description seo') }} *</b> - </label> - @php - $data = [ - 'id' => 'rangeSeoDescription', - 'class' => 'form-control', - 'name' => 'seo_description', - 'placeholder' => __('Une description du contenu de la page pour les moteurs de recherche.'), - 'ariaDescribedby' => 'rangeSeoDescriptionHelp', - 'value' => old('rangeSeoDescription', $range->seo_description), - 'required' => true, - 'value' => old('seo_description', $range->seo_description ?? '') - ]; - @endphp - <div id="input-text-auto" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'seo_description', - 'helperId' => 'rangeSeoDescriptionHelp', - 'helper' => __(' Doit décrire précisément le contenu de la page, requiert entre 50 et 160 caractères, balise <meta> description.') - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Visibilité') }}</legend> + {{-- SEO --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.seo')) }}</legend> <div class="row"> + {{-- SEO_TITLE --}} <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - @php - $data = [ - 'id' => 'rangeColor', - 'name' => 'color', - 'value' => old('color', $range->color), - 'title' => __('Choisissez la couleur de la gamme'), - 'label' => __('Couleur de la gamme *'), - 'rgbaMode' => true, - 'nullable' => false, - 'ariaDescribedby' => 'rangeColorHelp' - ]; - @endphp - @include('bo.modules.input-error', [ 'inputName' => 'color']) - <div class="color-picker" data-json='@json($data)'></div> - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangeSeoTitle', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'seo_title', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'min' => 40, + 'max' => 70, + ]) . __(' Balise <title>.'), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_title')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + {{-- SEO_DESCRIPTION --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar-multiline', [ + 'id' => 'rangeSeoDescription', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'name' => 'seo_description', + 'model' => $rangeModel ?? null, + 'required' => true, + 'helper' => + __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'min' => 50, + 'max' => 160, + ]) . __(' Balise <meta> description.'), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.seo_description')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- PICTURE --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture')) }}</legend> + <div class="row"> + {{-- PICTURE_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangePictureAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_alt', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + {{-- PICTURE_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangePictureTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_title', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + {{-- PICTURE --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'rangePicture', + 'name' => 'picture', + 'width' => 290, + 'height' => 232, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '290px', + 'heightpx' => '232px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + </div> + </fieldset> + </div> + {{-- PICTURE_BANNER --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture_banner')) }}</legend> + <div class="row"> + {{-- PICTURE_BANNER_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangePictureBannerAlt', + 'label' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_banner')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_banner_alt', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_banner')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + {{-- PICTURE_BANNER_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'rangePictureBannerTitle', + 'label' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_banner')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_banner_title', + 'required' => true, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_banner')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + 'placeholder' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_banner')), + 'model' => Str::singular(__('models.classes.ranges')), + ]), + ]) + </div> + {{-- PICTURE_BANNER --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'rangePictureBanner', + 'name' => 'picture_banner', + 'width' => 1440, + 'height' => 300, + 'model' => $rangeModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '1440px', + 'heightpx' => '300px', + ]), + 'required' => true, + 'preview' => true, + ]) </div> </div> </fieldset> @@ -95,123 +267,21 @@ </div> <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Illustration') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureAlt'])'></div> - <input name="picture_alt" type="text" - value="{{ old('picture_alt', $range->picture_alt ?? '') }}" class="form-control need-word-counter" - id="productPictureAlt" aria-describedby="productPictureAltHelp" - placeholder="{{ __('Une description du produit pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_alt', - 'helperId' => 'productPictureAltHelp', - 'helper' => __( - 'Doit décrire votre image pour les moteurs de recherches et les non voyants (5 à 6 mots / 3 caractères minimum, 255 maximum)' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureTitle" class="col-form-label"> - <b>{{ __('Titre de l\'image *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureTitle'])'></div> - <input name="picture_title" type="text" - value="{{ old('picture_title', $range->picture_title ?? '') }}" class="form-control need-word-counter" - id="productPictureTitle" aria-describedby="productPictureTitleHelp" - placeholder="{{ __('Utile pour les utilisateurs') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_title', - 'helperId' => 'productPictureTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image (3 caractères minimum, 255 maximum).' - ), - ]) - </div> - </div> - <div class="row"> - <div class="col-12"> - @php - $data = [ - 'id' => 'rangePicture', - 'name' => 'picture', - 'helper' => __('L\'image qui va servir d\'illustration au produit, doit être de 290px (largeur) par 232px (hauteur)'), - 'width' => 290, - 'height' => 232, - 'value' => $range->picture ?? '', - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - </fieldset> + <div class="col text-center"> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> </div> </div> -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Bannière') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureBannerAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de la bannière *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureBannerAlt'])'></div> - <input name="picture_banner_alt" type="text" - value="{{ old('picture_banner_alt', $range->picture_banner_alt ?? '') }}" - class="form-control need-word-counter" id="productPictureBannerAlt" - aria-describedby="productPictureBannerAltHelp" - placeholder="{{ __('Une description du produit pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_banner_alt', - 'helperId' => 'productPictureBannerAltHelp', - 'helper' => __( - 'Doit décrire votre image pour les moteurs de recherches et les non voyants (5 à 6 mots / 3 caractères minimum, 255 maximum)' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureBannerTitle" class="col-form-label"> - <b>{{ __('Titre de la bannière *') }}</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureBannerTitle'])'></div> - <input name="picture_banner_title" type="text" - value="{{ old('picture_banner_title', $range->picture_banner_title ?? '') }}" - class="form-control need-word-counter" id="productPictureBannerTitle" - aria-describedby="productPictureBannerTitleHelp" - placeholder="{{ __('Utile pour les utilisateurs') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_banner_title', - 'helperId' => 'productPictureBannerTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur la bannière (3 caractères minimum, 255 maximum).' - ), - ]) - </div> - </div> - <div class="row"> - <div class="col-12"> - @php - $data = [ - 'id' => 'rangeThumbPicture', - 'name' => 'picture_banner', - 'helper' => __('La bannière qui va servir de vignette à le produit, doit être de 1440px (largeur) par 300px (hauteur)'), - 'width' => 1440, - 'height' => 300, - 'value' => $range->picture_banner ?? '', - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture_banner']) - <div class="image-input" data-json='@json($data)'></div> - </div> - </div> - </fieldset> - </div> -</div> +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/ranges/index.blade.php b/resources/views/bo/pages/ranges/index.blade.php index 2468d61..69b16ba 100644 --- a/resources/views/bo/pages/ranges/index.blade.php +++ b/resources/views/bo/pages/ranges/index.blade.php @@ -1,107 +1,67 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.ranges'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.ranges')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.ranges')])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.ranges') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $ranges->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $cols = ['label' => __('Libellé'), 'color' => __('Couleur'), 'picture' => __('Image'), 'order' => __('Ordre'), 'updated_at' => __('Mis à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($ranges->count()) - @foreach ($ranges as $range) - <tr> - <td class="align-middle">{{ $range->label }}</td> - <td class="align-middle"> - <div class="bo-color-preview d-block rounded-2"> - <span class="d-block w-100 h-100 rounded-2" style="background-color:{{ $range->color }};"></span> - </div> - </td> - <td> - <img class="bo-image-preview" src="{{ asset($range->picture) }}" alt="{{ $range->pictures_alt }}"> - </td> - @if(!$noOrder or $rst) - <td class="align-middle"> - @if(!($loop->first and $ranges->onFirstPage())) - <form action="{{ route('bo.ranges.change-order', ['range' => $range, 'action' => 'up']) }}" method="POST"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le haut') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-up"></i> - </button> - </form> - @endif - @if (!($loop->last and $ranges->currentPage() === $ranges->lastPage())) - <form action="{{ route('bo.ranges.change-order', ['range' => $range, 'action' => 'down']) }}" method="POST"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le bas') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-down"></i> - </button> - </form> - @endif - </td> - @endif - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $range->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="text-end align-middle"> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.ranges.edit', $range->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.ranges'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.ranges') ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $ranges->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($rangeModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'label' => __('validation.attributes.label'), + 'color' => __('validation.attributes.color'), + 'email' => __('validation.attributes.picture'), + 'updated_at' => __('validation.attributes.updated_at'), + 'order' => __('validation.attributes.order'), + ], + ]) + </thead> + <tbody> + @foreach ($rangeModels as $rangeModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $rangeModel->label }}</td> + <td class="text-center align-middle"> + <div class="bo-color-preview d-block rounded-2 mx-auto"> + <span class="d-block w-100 h-100 rounded-2" style="background-color:{{ $rangeModel->color }};"></span> + </div> + </td> + <td class="text-center align-middle"> + <img class="bo-image-preview" src="{{ asset($rangeModel->picture) }}" alt="{{ __('Preview range picture') }}"> + </td> + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $rangeModel->updated_at }}</span></td> + @php + $routeName = request() + ->route() + ->getName(); + @endphp + @if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order') + @include('bo.modules.change-model-order', [ + 'routeName' => 'ranges', + 'models' => $rangeModels, + 'model' => $rangeModel, + ]) + @endif + <td class="text-end align-middle"> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.ranges.edit', ['range' => $rangeModel->id]) }}" title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.ranges')]) }}</td> + </tr> + @endif + </table> + </div> + {!! $rangeModels->links() !!} @endsection diff --git a/resources/views/bo/pages/slides/create.blade.php b/resources/views/bo/pages/slides/create.blade.php index 682532a..85087fc 100644 --- a/resources/views/bo/pages/slides/create.blade.php +++ b/resources/views/bo/pages/slides/create.blade.php @@ -1,37 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $slideModel]) -@section('title', sprintf('%s - %s', __('models.classes.slides'), Str::ucfirst(__('création')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.slides'))])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.slides'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <h1 class="col h4"> - <a href="{{ route('bo.slides.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ _('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.slides') }} {{ __('création') }}</span> - </h1> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.slides.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.slides')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $slideModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.slides.store') }}" method="POST" enctype="multipart/form-data"> - @csrf - @include('bo.pages.slides.form') - <div class="text-center"> - <button type="submit" class="btn btn-primary">{{ __('Enregister') }}</button> - </div> - </form> + <div class="mb-md-0 mb-2"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + {{ __('crud.actions.save') }} + </button> </div> </div> + <form action="{{ route('bo.slides.store') }}" method="POST" enctype="multipart/form-data"> + @csrf + @include('bo.pages.slides.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/slides/edit.blade.php b/resources/views/bo/pages/slides/edit.blade.php index e7f1714..c77be06 100644 --- a/resources/views/bo/pages/slides/edit.blade.php +++ b/resources/views/bo/pages/slides/edit.blade.php @@ -1,58 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $slideModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.slides'), Str::ucfirst(__('édition')), $slide->title)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.slides'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.slides'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $slide]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.slides.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.slides') }} {{ __('édition') }} -> {{ $slide->title }}</span> - </h1> - </div> - <div class="col text-end"> - <form action="{{ route('bo.slides.destroy', $slide->id) }}" method="POST" class="d-inline confirmDeleteJS"> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.slides'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.slides.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.slides')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $slideModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.slides.update', $slide->id) }}" method="POST" enctype="multipart/form-data"> + <div class="mb-md-0 mb-2"> + <form class="confirmDeleteTS" action="{{ route('bo.slides.destroy', $slideModel->id) }}" method="POST"> @csrf - @method('PUT') - @include('bo.pages.slides.form', compact('slide')) - <div class="text-center"> - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.slides'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} + @method('DELETE') + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + {{ __('crud.actions.save') }} + </button> + <button class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.delete_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + <i class="fa-solid fa-trash"></i> </button> </div> </form> </div> </div> + <form action="{{ route('bo.slides.update', $slideModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.slides.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/slides/form.blade.php b/resources/views/bo/pages/slides/form.blade.php index 2bf0228..2bc7b59 100644 --- a/resources/views/bo/pages/slides/form.blade.php +++ b/resources/views/bo/pages/slides/form.blade.php @@ -1,218 +1,292 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Titre') }} *</legend> - <div class="row"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <div class="word-counter" data-json='@json(['id' => 'slideTitle'])'></div> - <input name="title" type="text" value="{{ old('title', $slide->title ?? '') }}" class="form-control need-word-counter" - id="slideTitle" aria-describedby="slideTitleHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'title', - 'helperId' => 'slideTitleHelp', - 'helper' => __('Doit décrire précisément le slide.') - ]) - </div> - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Contenu de la slide') }} *</legend> - <div class="row mb-3"> - <div class="col-12 form-group"> - @php - $data = [ - 'name' => 'content', - 'text' => old('content', $slide->content ?? ''), - ]; - @endphp - <div class="ck-editor" data-json='@json($data)'></div> - @include('bo.modules.input-error', [ - 'inputName' => 'content', - 'helperId' => 'slideContentHelp', - 'helper' => __('Relisez bien votre contenu avant de le publier.'), - ]) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Bouton') }}</legend> - <div class="row mb-3"> - <div class="col-12 form-group"> - <div class="form-check form-switch"> - <input class="form-check-input" name="button_display" type="checkbox" value="1" id="button_display" @if (old('button_display', $slide->button_display ?? '')) checked @endif> - <label class="form-check-label" for="button_display">{{ __('Afficher le bouton ?') }}</label> - </div> - @include('bo.modules.input-error', ['inputName' => 'button_display']) - </div> - </div> - <div class="row mb-3"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="slideButtonText"><b>{{ __('Contenu') }}</b></label> - <div class="word-counter" data-json='@json(['id' => 'slideButtonText'])'></div> - <input name="button_text" type="text" value="{{ old('button_text', $slide->button_text ?? '') }}" class="form-control need-word-counter" - id="slideButtonText" aria-describedby="slideButtonTextHelp" placeholder="{{ __('Un nom beau et explicite') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'button_text', - 'helperId' => 'slideButtonTextHelp', - 'helper' => __('Doit décrire précisément le bouton du slide.') - ]) - </div> - </div> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="slideButtonUrl"><b>{{ __('Url') }}</b></label> - <div class="word-counter" data-json='@json(['id' => 'slideButtonUrl'])'></div> - <input name="button_url" type="text" value="{{ old('button_url', $slide->button_url ?? '') }}" class="form-control need-word-counter" - id="slideButtonUrl" aria-describedby="slideButtonUrlHelp" placeholder="{{ __('Un nom beau et explicite') }}"> - @include('bo.modules.input-error', [ - 'inputName' => 'button_url', - 'helperId' => 'slideButtonUrlHelp', - 'helper' => __('Doit être un lien valide et accessible (ex: https://www.example.com).') - ]) - </div> - </div> - <div class="row"> - <div class="col-12 form-group"> - <div class="form-check form-switch"> - <input class="form-check-input" name="button_targetblank" type="checkbox" value="1" id="button_targetblank" @if (old('button_targetblank', $slide->button_targetblank ?? '')) checked @endif> - <label class="form-check-label" for="button_targetblank">{{ __('Ouvrir le lien dans un nouvel onglet ?') }}</label> - </div> - @include('bo.modules.input-error', ['inputName' => 'button_targetblank']) - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Illustration') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="slidePictureAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'slidePictureAlt'])'></div> - <input name="picture_alt" type="text" - value="{{ old('picture_alt', $slide->picture_alt ?? '') }}" class="form-control need-word-counter" - id="slidePictureAlt" aria-describedby="slidePictureAltHelp" - placeholder="{{ __('Une image de petits chatons') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_alt', - 'helperId' => 'slidePictureAltHelp', - 'helper' => __( - 'Doit décrire votre image pour les moteurs de recherches et les non voyants (5 à 6 mots)' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="slidePictureTitle" class="col-form-label"> - <b>{{ __('Titre de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'slidePictureTitle'])'></div> - <input name="picture_title" type="text" - value="{{ old('picture_title', $slide->picture_title ?? '') }}" class="form-control need-word-counter" - id="slidePictureTitle" aria-describedby="slidePictureTitleHelp" - placeholder="{{ __('Une description du produit pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_title', - 'helperId' => 'slidePictureTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image.' - ), - ]) - </div> - </div> + {{-- TITLE --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.title')) }}</legend> <div class="row"> <div class="col-12"> - @php - $data = [ - 'id' => 'slidePicture', - 'name' => 'picture', - 'helper' => __('L\'image qui va servir de visuel principal à la slide, doit être de 950px (largeur) par 700px (hauteur)'), - 'width' => 950, - 'height' => 700, - 'value' => $slide->picture ?? '', - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture']) - <div class="image-input" data-json='@json($data)'></div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slideTitle', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'title', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Vignette') }}</legend> + {{-- CONTENT --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.content')) }}</legend> <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureThumbAlt" class="col-form-label"> - <b>{{ __('Texte alternatif de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureThumbAlt'])'></div> - <input name="picture_thumbnail_alt" type="text" - value="{{ old('picture_thumbnail_alt', $slide->picture_thumbnail_alt ?? '') }}" - class="form-control need-word-counter" id="productPictureThumbAlt" - aria-describedby="productPictureThumbAltHelp" - placeholder="{{ __('Une image de petits chatons') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_thumbnail_alt', - 'helperId' => 'productPictureThumbAltHelp', - 'helper' => __( - 'Doit décrire votre image pour les moteurs de recherches et les non voyants (5 à 6 mots)' - ), - ]) - </div> - <div class="col-12 col-md-6 form-group"> - <label for="productPictureThumbTitle" class="col-form-label"> - <b>{{ __('Titre de l\'image') }} *</b> - </label> - <div class="word-counter" data-json='@json(['id' => 'productPictureThumbTitle'])'></div> - <input name="picture_thumbnail_title" type="text" - value="{{ old('picture_thumbnail_title', $slide->picture_thumbnail_title ?? '') }}" - class="form-control need-word-counter" id="productPictureThumbTitle" - aria-describedby="productPictureThumbTitleHelp" - placeholder="{{ __('Une description du produit pour les moteurs de recherche') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'picture_thumbnail_title', - 'helperId' => 'productPictureThumbTitleHelp', - 'helper' => __( - 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image.' - ), + <div class="col-12"> + @include('bo.partials.inputs.text-html', [ + 'id' => 'slideContent', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'name' => 'content', + 'model' => $slideModel, + 'required' => false, + 'helper' => __('validation.custom.text_warning', [ + 'number' => 15, + ]), ]) </div> </div> + </fieldset> + </div> + {{-- BUTTON --}} + <div class="col-12 pb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.button')) }}</legend> + <div class="row mb-3"> + {{-- BUTTON_DISPLAY --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'slideButtonDisplay', + 'name' => 'button_display', + 'label' => __('Afficher le :field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $slideModel ?? null, + ]) + </div> + {{-- BUTTON_TARGET_BLANK --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'slideButtonTargetBlank', + 'name' => 'button_targetblank', + 'label' => __('Ouvrir le lien du :field de la :model dans un nouvel onglet ?', [ + 'field' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $slideModel ?? null, + ]) + </div> + {{-- BUTTON_TEXT --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slideButtonText', + 'label' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.content')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'button_text', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.content')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.content')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + {{-- BUTTON_URL --}} + <div class="col-12 col-md-6 m-md-0 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slideButtonUrl', + 'label' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.link')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'button_url', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => + __('Doit être un lien valide et accessible (ex: https://www.example.com). ') . + __('validation.between.string', [ + 'attribute' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.link')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field1 du :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.link')), + 'field2' => Str::ucfirst(__('validation.attributes.button')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- PICTURE --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture')) }}</legend> <div class="row"> + {{-- PICTURE_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slidePictureAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_alt', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + {{-- PICTURE_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slidePictureTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_title', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'placeholder' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + {{-- PICTURE --}} <div class="col-12"> - @php - $data = [ - 'id' => 'slideThumbPicture', - 'name' => 'picture_thumbnail', - 'helper' => __('L\'image qui va servir de vignette à la slide, doit être de 167px (largeur) par 70px (hauteur)'), - 'width' => 167, - 'height' => 70, - 'value' => $slide->picture_thumbnail ?? '', - ]; - @endphp - @include('bo.modules.input-error', ['inputName' => 'picture_thumbnail']) - <div class="image-input" data-json='@json($data)'></div> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'slidePicture', + 'name' => 'picture', + 'width' => 950, + 'height' => 700, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '950px', + 'heightpx' => '700px', + ]), + 'required' => true, + 'preview' => true, + ]) + </div> + </div> + </fieldset> + </div> + {{-- PICTURE_THUMBNAIL --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.picture_thumbnail')) }}</legend> + <div class="row"> + {{-- PICTURE_THUMBNAIL_ALT --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slidePictureThumbnailAlt', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_thumbnail')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_thumbnail_alt', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.image_alt'), + 'placeholder' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_thumbnail')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + {{-- PICTURE_THUMBNAIL_TITLE --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'slidePictureThumbnailTitle', + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_thumbnail')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'hasWordCounter' => true, + 'name' => 'picture_thumbnail_title', + 'required' => true, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.image_title'), + 'label' => __(':field1 de l\':field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_title')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_thumbnail')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + 'placeholder' => __(':field1 de la :field2 de la :model', [ + 'field1' => Str::ucfirst(__('validation.attributes.attribute_alt')), + 'field2' => Str::ucfirst(__('validation.attributes.picture_thumbnail')), + 'model' => Str::singular(__('models.classes.slides')), + ]), + ]) + </div> + {{-- PICTURE --}} + <div class="col-12"> + @include('bo.partials.inputs.varchar-picture', [ + 'id' => 'slidePictureThumbnail', + 'name' => 'picture_thumbnail', + 'width' => 167, + 'height' => 70, + 'model' => $slideModel ?? null, + 'helper' => __('validation.custom.dimensions_must_be', [ + 'widthpx' => '950px', + 'heightpx' => '700px', + ]), + 'required' => true, + 'preview' => true, + ]) </div> </div> </fieldset> @@ -221,6 +295,20 @@ <div class="row"> <div class="col text-center"> - <p><b>{{ __('* Champs obligatoires') }}</b></p> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> </div> </div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/slides/index.blade.php b/resources/views/bo/pages/slides/index.blade.php index 07b05be..24f035f 100644 --- a/resources/views/bo/pages/slides/index.blade.php +++ b/resources/views/bo/pages/slides/index.blade.php @@ -1,122 +1,79 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.slides'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.slides')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.slides')])) @section('content') -<div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.slides') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - <div class="col-md-3"> - <div class="input-group justify-content-end"> - @if ($slides->count() === 4) - <a href="#" class="btn btn-secondary" title="{{ __('Le maximum de slide est 4.') }}" data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - @else - <a href="{{ route('bo.slides.create') }}" class="btn btn-primary" title="{{ __('Ajouter un :model', ['model' => Str::singular(__('models.classes.slides'))]) }}" data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - @endif - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.slides.create') }}" + title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.slides'))]) }}"> + <i class="fa-solid fa-plus"></i> + </a> </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $slides->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($slideModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'title' => __('validation.attributes.title'), + 'content' => __('validation.attributes.content'), + 'picture' => __('validation.attributes.picture'), + 'updated_at' => __('validation.attributes.updated_at'), + 'order' => __('validation.attributes.order'), + ], + ]) + </thead> + <tbody> + @foreach ($slideModels as $slideModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $slideModel->title }}</td> + <td class="text-center align-middle"> + {!! Str::limit(clean($slideModel->content), 50) !!} + </td> + <td class="text-center align-middle"> + <img class="bo-image-preview" src="{{ asset($slideModel->picture) }}" alt="{{ __('Preview slide picture') }}"> + </td> + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $slideModel->updated_at }}</span></td> @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $cols = ['title' => __('Titre'), 'content' => __('Contenu'), 'image' => __('Image'),'order' => __('Ordre'), 'updated_at' => __('Mis à jour')]; + $routeName = request() + ->route() + ->getName(); @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($slides->count()) - @foreach ($slides as $slide) - <tr> - <td class="align-middle">{{ $slide->title }}</td> - <td class="align-middle"> - <p class="text-ellipsis m-0">{{ $slide->content }}</p> - </td> - <td><img class="bo-image-preview" src="{{ asset($slide->picture) }}" alt="{{ $slide->pictures_alt }}"></td> - @if(!$noOrder or $rst) - <td class="align-middle"> - @if(!($loop->first and $slides->onFirstPage())) - <form action="{{ route('bo.slides.change-order', ['slide' => $slide, 'action' => 'up']) }}" method="POST"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le haut') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-up"></i> - </button> - </form> - @endif - @if (!($loop->last and $slides->currentPage() === $slides->lastPage())) - <form action="{{ route('bo.slides.change-order', ['slide' => $slide, 'action' => 'down']) }}" method="POST"> - @csrf - <button type="submit" class="btn btn-sm" title="{{ __('Modifier l\'ordre d\'apparition vers le bas') }}" data-bs-toggle="tooltip"> - <i class="fas fa-arrow-alt-circle-down"></i> - </button> - </form> - @endif - </td> - @endif - <td class="align-middle"> - <span class="badge text-dark text-wrap">{{ $slide->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="align-middle"> - <form action="{{ route('bo.slides.destroy', $slide->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" href="{{ route('bo.slides.edit', $slide->id) }}" title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.slides'))]) }}" data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-sm btn-danger" title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.slides'))]) }}" data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.slides') ])}}</span> - </td> - </tr> + @if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order') + @include('bo.modules.change-model-order', [ + 'routeName' => 'slides', + 'models' => $slideModels, + 'model' => $slideModel, + ]) @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0"> - {{ $slides->withQueryString()->onEachSide(1)->links() }} - </div> - </div> + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.slides.destroy', $slideModel->id) }}" + method="POST" novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.slides.edit', ['slide' => $slideModel->id]) }}" + title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.slides')]) }}</td> + </tr> + @endif + </table> </div> -</div> + {!! $slideModels->links() !!} @endsection diff --git a/resources/views/bo/pages/tags/create.blade.php b/resources/views/bo/pages/tags/create.blade.php index 811d8df..8c9928b 100644 --- a/resources/views/bo/pages/tags/create.blade.php +++ b/resources/views/bo/pages/tags/create.blade.php @@ -1,29 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $tagModel]) -@section('title', sprintf('%s - %s', __('models.classes.tags'), Str::ucfirst(__('création')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.tags'))])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.tags'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.tags') }} {{ __('création') }}</h1> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.tags.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.tags')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $tagModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.tags.store') }}" method="POST"> - @csrf - @include('bo.pages.tags.form') - <button type="submit" class="btn btn-primary">{{ __('Enregister') }}</button> - </form> + <div class="mb-md-0 mb-2"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + {{ __('crud.actions.save') }} + </button> </div> </div> + <form action="{{ route('bo.tags.store') }}" method="POST" enctype="multipart/form-data"> + @csrf + @include('bo.pages.tags.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/tags/edit.blade.php b/resources/views/bo/pages/tags/edit.blade.php index 80b2f54..3a0db4d 100644 --- a/resources/views/bo/pages/tags/edit.blade.php +++ b/resources/views/bo/pages/tags/edit.blade.php @@ -1,48 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $tagModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.tags'), Str::ucfirst(__('édition')), $tag->name)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.tags'))])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.tags'))])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', [ - 'brParam' => $tag - ]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4"> - <a href="{{ route('bo.tags.index') }}" class="text-decoration-none btn btn-sm btn-primary" role="button" aria-roledescription="{{ _('Revenir en arrière') }}"><i class="fa-solid fa-arrow-left-long"></i></a> - <span> {{ __('models.classes.tags') }} {{ __('édition') }}</span> - </h1> - </div> - <div class="col text-end"> - <form action="{{ route('bo.tags.destroy', $tag->id) }}" method="POST" class="d-inline confirmDeleteJS"> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-danger" title="{{ __('Supprimer :model', [ - 'model' => Str::singular(__('models.classes.tags')) - ]) }}" data-bs-toggle="tooltip"><i class="fa-solid fa-trash"></i></button> - </div> - </form> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.tags.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => __('models.classes.tags')]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $tagModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.tags.update', $tag->id) }}" method="POST"> + <div class="mb-md-0 mb-2"> + <form class="confirmDeleteTS" action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST"> @csrf - @method('PUT') - @include('bo.pages.tags.form', compact('tag')) - <button type="submit" class="btn btn-primary" title="{{ __('Enregister :model en base', [ - 'model' => Str::singular(__('models.classes.tags')) - ]) }}" data-bs-toggle="tooltip">{{ __('Enregister') }}</button> + @method('DELETE') + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + {{ __('crud.actions.save') }} + </button> + <button class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.delete_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + <i class="fa-solid fa-trash"></i> + </button> + </div> </form> </div> </div> + <form action="{{ route('bo.tags.update', $tagModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.tags.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/tags/form.blade.php b/resources/views/bo/pages/tags/form.blade.php index 104b441..2639714 100644 --- a/resources/views/bo/pages/tags/form.blade.php +++ b/resources/views/bo/pages/tags/form.blade.php @@ -1,17 +1,56 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Nom') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="word-counter" data-json='@json(['id' => 'tagModelName'])'></div> - <input name="label" type="text" value="{{ old('label', $tag->label ?? '') }}" class="form-control need-word-counter" - id="tagModelName" aria-describedby="tagModelNameHelp" placeholder="{{ __('Le nom de votre étiquette') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'label', 'helperId' => 'tagModelNameHelp' , 'helper' => __('Doit être un nom court (min 2 caractères - max 30 caractères)') + {{-- GÉNÉRALS INFORMATIONS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('Informations générales')) }}</legend> + <div class="row"> + {{-- LABEL --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'tagLabel', + 'label' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.tags')), + ]), + 'hasWordCounter' => true, + 'name' => 'label', + 'required' => true, + 'model' => $tagModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.tags')), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de l\':model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => Str::singular(__('models.classes.tags')), + ]), ]) </div> </div> </fieldset> </div> </div> + +<div class="row"> + <div class="col text-center"> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> + </div> +</div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/tags/index.blade.php b/resources/views/bo/pages/tags/index.blade.php index f2a894d..fc4803b 100644 --- a/resources/views/bo/pages/tags/index.blade.php +++ b/resources/views/bo/pages/tags/index.blade.php @@ -1,90 +1,57 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.tags'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('models.classes.tags')) +@section('description', __('Liste de tous les :model', ['model' => __('models.classes.tags')])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.tags') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - <div class="col-md-3"> - <div class="input-group justify-content-end"> - <a href="{{ route('bo.tags.create') }}" class="btn btn-primary" title="{{ __('Ajouter un :model', [ - 'model' => Str::singular(__('models.classes.tags')) - ]) }}" data-bs-toggle="tooltip"><i class="fa-solid fa-plus"></i></a> - </div> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0 p-md-3"> - {{ $tags->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action"> - <thead> - @php - $cols = ['label' => __('Nom'), 'updated_at' => __('Mis à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'ignore' => []]) - </thead> - <tbody> - @if($tags->count()) - @foreach ($tags as $tag) - <tr> - <td class="align-middle"> - <span>{{ $tag->label }}</span> - </td> - <td class=""> - <span class="badge text-dark text-wrap">{{ $tag->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td> - <form action="{{ route('bo.tags.destroy', $tag->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" href="{{ route('bo.tags.edit', $tag->id) }}" title="{{ __('Modifier :model', [ - 'model' => Str::singular(__('models.classes.tags')) - ]) }}" data-bs-toggle="tooltip"><i class="fa-solid fa-pencil"></i></a> - @csrf - @method('DELETE') - <button type="submit" class="btn btn-sm btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.tags'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"><span class="h3">{{ - __('Aucun résultat pour les :models', ['models' => __('models.classes.tags')]) - }}</span></td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - <div class="row justify-content-center"> - <div class="col-12 col-md-6 p-0 p-md-3"> - {{ $tags->withQueryString()->onEachSide(1)->links() }} - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.tags.create') }}" + title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.tags'))]) }}"> + <i class="fa-solid fa-plus"></i> + </a> </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($tagModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'label' => __('validation.attributes.label'), + 'updated_at' => __('validation.attributes.updated_at'), + ], + ]) + </thead> + <tbody> + @foreach ($tagModels as $tagModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $tagModel->label }}</td> + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $tagModel->updated_at }}</span></td> + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST" + novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.tags.edit', ['tag' => $tagModel->id]) }}" title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => __('models.classes.tags')]) }}</td> + </tr> + @endif + </table> + </div> + {!! $tagModels->links() !!} @endsection diff --git a/resources/views/bo/pages/vips/create.blade.php b/resources/views/bo/pages/vips/create.blade.php index 0327bfe..aec4cd3 100644 --- a/resources/views/bo/pages/vips/create.blade.php +++ b/resources/views/bo/pages/vips/create.blade.php @@ -1,35 +1,37 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $vipModel]) -@section('title', sprintf('%s - %s', __('models.classes.vips'), Str::ucfirst(__('création')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Création d\'un :model', ['model' => trans_choice('models.classes.vips', 1)])) +@section('description', __('Création d\'un tout nouveau :model', ['model' => trans_choice('models.classes.vips', 1)])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <h1 class="col h4"> - <a href="{{ route('bo.vips.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ _('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.vips') }} {{ __('création') }}</span> - </h1> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.vips.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => trans_choice('models.classes.vips', 2)]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $vipModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.vips.store') }}" method="POST" enctype="multipart/form-data"> - @csrf - @include('bo.pages.vips.form') - <button type="submit" class="btn btn-primary">{{ __('Enregister') }}</button> - </form> + <div class="mb-md-0 mb-2"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + {{ __('crud.actions.save') }} + </button> </div> </div> + <form action="{{ route('bo.vips.store') }}" method="POST" enctype="multipart/form-data"> + @csrf + @include('bo.pages.vips.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/vips/edit.blade.php b/resources/views/bo/pages/vips/edit.blade.php index 6fecc15..17b0076 100644 --- a/resources/views/bo/pages/vips/edit.blade.php +++ b/resources/views/bo/pages/vips/edit.blade.php @@ -1,56 +1,48 @@ -@extends('bo.backend') +@extends('bo.layout', ['brParam' => $vipModel]) -@section('title', sprintf('%s - %s %s', __('models.classes.vips'), Str::ucfirst(__('édition')), $vip->label)) - -@section('breadcrumb', request()->route()->getName()) +@section('title', __('Édition d\'un :model', ['model' => trans_choice('models.classes.vips', 1)])) +@section('description', __('Édition d\'un :model déjà existant', ['model' => trans_choice('models.classes.vips', 1)])) +@section('breadcrumb', + request()->route()->getName()) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body', ['brParam' => $vip]) - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="col h4 m-0"> - <a href="{{ route('bo.vips.index') }}" - class="text-decoration-none btn btn-sm btn-primary" - role="button" - aria-roledescription="{{ __('Revenir en arrière') }}"> - <i class="fa-solid fa-arrow-left-long"></i> - </a> - <span> {{ __('models.classes.vips') }} {{ __('édition') }} -> {{ $vip->label }}</span> - </h1> - </div> - <div class="col text-end"> - <form action="{{ route('bo.vips.destroy', $vip->id) }}" method="POST" class="d-inline confirmDeleteJS"> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.vips'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap pb-3"> + <div class="d-flex align-items-start flex-row"> + <a class="btn btn-primary text-decoration-none m-0 me-2" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.vips.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) }}" + title="{{ __('crud.helpers.list_all', ['model' => trans_choice('models.classes.vips', 2)]) }}"> + <i class="fa-solid fa-arrow-left"></i> + </a> + @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $vipModel]) </div> - <div class="card-body"> - <form action="{{ route('bo.vips.update', $vip->id) }}" method="POST" enctype="multipart/form-data"> + <div class="mb-md-0 mb-2"> + <form class="confirmDeleteTS" action="{{ route('bo.vips.destroy', $vipModel->id) }}" method="POST"> @csrf - @method('PUT') - @include('bo.pages.vips.form', compact('vip')) - <button type="submit" - class="btn btn-primary" - title="{{ __('Enregister :model en base', ['model' => Str::singular(__('models.classes.vips'))]) }}" - data-bs-toggle="tooltip"> - {{ __('Enregister') }} - </button> + @method('DELETE') + <div class="btn-group" role="group"> + <button class="btn btn-primary" id="formSubmitClone" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + {{ __('crud.actions.save') }} + </button> + <button class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.delete_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + <i class="fa-solid fa-trash"></i> + </button> + </div> </form> </div> </div> + <form action="{{ route('bo.vips.update', $vipModel->id) }}" method="POST" enctype="multipart/form-data"> + @csrf + @method('PUT') + @include('bo.pages.vips.form') + <div class="row"> + <div class="col text-center"> + <button class="btn btn-primary" id="formSubmit" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.helpers.save_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + {{ __('crud.actions.save') }} + </button> + </div> + </div> + </form> @endsection diff --git a/resources/views/bo/pages/vips/form.blade.php b/resources/views/bo/pages/vips/form.blade.php index 08c3a3e..f2e4add 100644 --- a/resources/views/bo/pages/vips/form.blade.php +++ b/resources/views/bo/pages/vips/form.blade.php @@ -1,179 +1,195 @@ <div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Page') }}</legend> - <div class="row mb-3"> + {{-- ROLE --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.page')) }}</legend> + <div class="row"> + <div class="col-12"> + @include('bo.partials.inputs.tinyint-enum', [ + 'id' => 'vipPage', + 'label' => __('Associer une :field au :model', [ + 'field' => Str::ucfirst(__('validation.attributes.page')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'name' => 'page', + 'model' => $vipModel ?? null, + 'default' => __('validation.attributes.page'), + 'required' => true, + 'associatedModels' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::toArray(), + 'helper' => __('validation.custom.select_entity', ['entity' => 'une ' . __('validation.attributes.page')]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- LABEL --}} + <div class="col-12 col-md-6 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.label')) }}</legend> + <div class="row"> + <div class="col-12"> + @include('bo.partials.inputs.varchar', [ + 'id' => 'vipLabel', + 'label' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'hasWordCounter' => true, + 'name' => 'label', + 'required' => true, + 'model' => $vipModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field de la :model', [ + 'field' => Str::ucfirst(__('validation.attributes.label')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + ]) + </div> + </div> + </fieldset> + </div> + {{-- TITLES --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> + <legend>{{ Str::ucfirst(__('validation.attributes.title')) }}</legend> + <div class="row"> + {{-- TITLE --}} <div class="col-12 col-md-6"> - <div class="form-group"> - <label for="expertiseProduct" class="col-form-label"><b>{{ __('Espèce *') }}</b></label> - <select id="expertiseProduct" class="form-select" name="page" aria-describedby="expertiseProductHelp" - required> - <option value="" @if (is_null(old('page', $vip->page->value ?? null))) selected @endif disabled> - {{ __('Séléctionnez une espèce') }}</option> - @foreach (App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::toArray() as $pageEnum) - <option value="{{ $pageEnum->value }}" @if (old('page', $vip->page->value ?? null) == $pageEnum->value) selected @endif> - {{ $pageEnum->label }}</option> - @endforeach - </select> - @include('bo.modules.input-error', [ - 'inputName' => 'page', - 'helperId' => 'expertiseProductHelp', - 'helper' => __('Nom de l\'espèce.'), - ]) - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'vipTitle', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'hasWordCounter' => true, + 'name' => 'title', + 'required' => true, + 'model' => $vipModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.title')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + ]) </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Libellé du bloc') }}</legend> - <div class="row mb-3"> + {{-- SUBTITLE --}} <div class="col-12 col-md-6"> - <div class="form-group"> - <label for="blockTitle"><b>{{ __('Libellé *') }}</b></label> - <div class="word-counter" data-json='@json(['id' => 'blockTitle'])'></div> - <input name="label" type="text" value="{{ old('label', $vip->label ?? '') }}" class="form-control need-word-counter" - id="blockTitle" aria-describedby="blockTitleHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'label', - 'helperId' => 'blockTitleHelp', - 'helper' => __('Doit décrire le bloc (3 caractères minimum, 255 maximum).') - ]) - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => 'vipSubtitle', + 'label' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'hasWordCounter' => true, + 'name' => 'subtitle', + 'required' => true, + 'model' => $vipModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.subtitle')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + ]) </div> </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> - <legend>{{ __('Titre et Sous-titre') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="vipTitle"><b>{{ __('Titre *') }}</b></label> - <div class="word-counter" data-json='@json(['id' => 'vipTitle'])'></div> - <input name="title" type="text" value="{{ old('title', $vip->title ?? '') }}" class="form-control need-word-counter" - id="vipTitle" aria-describedby="vipTitleHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'title', - 'helperId' => 'vipTitleHelp', - 'helper' => __('Doit décrire précisément le produit VIP (3 caractères minimum, 255 maximum).') - ]) - </div> - </div> - <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="vipSubTitle"><b>{{ __('Sous-titre *') }}</b></label> - <div class="word-counter" data-json='@json(['id' => 'vipSubTitle'])'></div> - <input name="subtitle" type="text" value="{{ old('subtitle', $vip->subtitle ?? '') }}" class="form-control need-word-counter" - id="vipSubTitle" aria-describedby="vipSubTitleHelp" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'subtitle', - 'helperId' => 'vipSubTitleHelp', - 'helper' => __('Doit décrire précisément le produit VIP (3 caractères minimum, 255 maximum).') - ]) - </div> - </div> - </div> - </fieldset> - </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- POINTS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Les 4 points forts du produit') }}</legend> - <div class="row mb-3"> + <div class="row"> @for ($i = 0; $i < 4; $i++) <div class="col-12 col-md-6 mb-3"> - <div class="form-group"> - <label for="txtPoint{{$i}}"><b>{{ __('Texte pour le point fort n°') }}{{$i+1}} *</b></label> - <div class="word-counter" data-json='@json(['id' => 'txtPoint' . $i])'></div> - <input name="points[{{$i}}][value]" type="text" value="{{ old('points.' . $i . '.value', $vip->points[$i]['value'] ?? '') }}" class="form-control need-word-counter" - id="txtPoint{{$i}}" aria-describedby="txtPoint{{$i}}Help" placeholder="{{ __('Un nom beau et explicite') }}" required> - @include('bo.modules.input-error', [ - 'inputName' => 'points.' . $i . '.value', - 'helperId' => 'txtPoint' . $i . 'Help', - 'helper' => __('Une phrase pour décrire un point fort du produit (3 caractères minimum, 255 maximum).') - ]) - </div> + @include('bo.partials.inputs.varchar', [ + 'id' => "vipPoint{$i}", + 'label' => __(':field n°' . $i + 1 . ' du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.high_point')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'hasWordCounter' => true, + 'name' => "points[{$i}][value]", + 'value' => $vipModel->points[$i]['value'] ?? null, + 'required' => true, + 'model' => $vipModel ?? null, + 'helper' => __('validation.between.string', [ + 'attribute' => __(':field n°' . $i + 1 . ' du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.high_point')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'min' => 3, + 'max' => 255, + ]), + 'placeholder' => __(':field n°' . $i + 1 . ' du :model', [ + 'field' => Str::ucfirst(__('validation.attributes.high_point')), + 'model' => trans_choice('models.classes.vips', 1), + ]), + ]) </div> @endfor </div> </fieldset> </div> -</div> - -<div class="row"> - <div class="col"> - <fieldset class="border p-3 mb-3"> + {{-- INDICATEURS --}} + <div class="col-12 mb-3"> + <fieldset class="h-100 border bg-white p-3"> <legend>{{ __('Indicateurs') }}</legend> - <div class="row mb-3"> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch"> - <input id="expertiseProductFrench" - class="form-check-input" - name="is_frenchpoultry" - type="checkbox" - aria-describedby="expertiseProductFrenchHelp" - value="1" - role="button" - @if (old('is_frenchpoultry', $vip->is_frenchpoultry ?? '')) checked @endif> - <label class="form-check-label" for="expertiseProductFrench" role="button"> - <b>{{ __('Volaille Française ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'is_frenchpoultry', - 'helperId' => 'expertiseProductFrenchHelp', - 'helper' => __('Le produit est une volaille Française ou non'), - ]) - </div> + <div class="row"> + {{-- IS_FRENCHPOULTRY --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'vipFrenchPoultry', + 'name' => 'is_frenchpoultry', + 'label' => __('Le :model est une volaille Française ?', [ + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $vipModel ?? null, + ]) </div> - <div class="col-12 col-md-6 form-group"> - <div class="form-check form-switch"> - <input id="expertiseProductNE" - class="form-check-input" - name="is_natureeleveurs" - type="checkbox" - aria-describedby="expertiseProductNEHelp" - value="1" - role="button" - @if (old('is_natureeleveurs', $vip->is_natureeleveurs ?? '')) checked @endif> - <label class="form-check-label" for="expertiseProductNE" > - <b>{{ __('Nature d\'éleveur ?') }}</b> - </label> - <br> - @include('bo.modules.input-error', [ - 'inputName' => 'is_natureeleveurs', - 'helperId' => 'expertiseProductNEHelp', - 'helper' => __('Le produit est de la marque Nature d\'éleveur ou non'), - ]) - </div> + {{-- IS_NATUREELEVEURS --}} + <div class="col-12 col-md-6 mb-3"> + @include('bo.partials.inputs.tinyint-boolean', [ + 'id' => 'vipNatureEleveurs', + 'name' => 'is_natureeleveurs', + 'label' => __('Le :model est de la marque Nature d\'éleveurs ?', [ + 'model' => trans_choice('models.classes.vips', 1), + ]), + 'helper' => __('Deux réponses possibles : oui ou non.'), + 'model' => $vipModel ?? null, + ]) </div> - </div> - <div class="row mb-3"> - <div class="col-12"> + {{-- NUTRISCORE --}} + <div class="col-12 mb-3"> <div class="mb-2"> <label for="nutriscore"><b>{{ __('Nutriscore') }}</b></label> </div> <div class="btn-group" role="group" aria-label="Basic radio toggle button group"> - @foreach (App\Enums\NutriscoreEnum::toArray() as $nutriscore) - <input type="radio" - class="btn-check" - name="nutriscore" - id="nutriscore{{$loop->index}}" - value="{{$loop->index}}" - autocomplete="off" - @if (old('nutriscore', $vip->nutriscore->value ?? '') == $nutriscore->value) checked @endif> - <label class="btn btn-outline-primary" for="nutriscore{{$loop->index}}">{{ $nutriscore->label }}</label> + @foreach (\App\Enums\NutriscoreEnum::toArray() as $nutriscore) + <input class="btn-check" id="nutriscore{{ $loop->index }}" name="nutriscore" type="radio" + value="{{ $loop->index }}" autocomplete="off" @if (old('nutriscore', $vipModel->nutriscore->value ?? 0) == $nutriscore->value) checked @endif> + <label class="btn btn-outline-primary" for="nutriscore{{ $loop->index }}">{{ $nutriscore->label }}</label> @endforeach </div> </div> @@ -181,3 +197,23 @@ </fieldset> </div> </div> + +<div class="row"> + <div class="col text-center"> + <p class="fw-bold">{{ __('* Champs obligatoires') }}</b> + </div> +</div> + +@push('scripts') + <script nonce="{{ $nonce }}"> + document.addEventListener("DOMContentLoaded", () => { + // Submit button clone. + const submit = document.getElementById('formSubmit') + submitClone = document.getElementById('formSubmitClone'); + submitClone.addEventListener('click', (event) => { + event.preventDefault(); + submit.click(''); + }) + }); + </script> +@endpush diff --git a/resources/views/bo/pages/vips/index.blade.php b/resources/views/bo/pages/vips/index.blade.php index ac7202f..1780d4e 100644 --- a/resources/views/bo/pages/vips/index.blade.php +++ b/resources/views/bo/pages/vips/index.blade.php @@ -1,92 +1,61 @@ -@extends('bo.backend') +@extends('bo.layout') -@section('title', sprintf('%s - %s', __('models.classes.vips'), Str::ucfirst(__('liste')))) - -@section('breadcrumb', request()->route()->getName()) +@section('title', trans_choice('models.classes.vips', 2)) +@section('description', __('Liste de tous les :model', ['model' => trans_choice('models.classes.vips', 2)])) @section('content') - <div class="card"> - <div class="card-header"> - <div class="row"> - <div class="col-12"> - @include('bo.modules.breadcrumb.breadcrumb-body') - </div> - </div> - <div class="row"> - <div class="col"> - <h1 class="h2">{{ __('models.classes.vips') }} {{ Str::ucfirst(__('liste')) }}</h1> - </div> - <div class="col-md-3"> - <div class="input-group justify-content-end"> - <a href="{{ route('bo.vips.create') }}" - class="btn btn-primary" - title="{{ __('Ajouter un :model', ['model' => Str::singular(__('models.classes.vips'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-plus"></i> - </a> - </div> - </div> - </div> - </div> - <div class="card-body"> - @include('bo.modules.searchBar') - <div class="row"> - <div class="col"> - <div class="table-responsive"> - <table class="table fix-action m-0"> - <thead> - @php - $rst = !is_null(request()->rst); - $routeName = request()->route()->getName(); - $noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way")); - $cols = ['page' => __('Espèce'), 'label' => __('Libellé'), 'title' => __('Titre'), 'updated_at' => __('Mis à jour')]; - @endphp - @include('bo.modules.tableColSorter', [ 'cols' => $cols, 'mobileHide' => ['status']]) - </thead> - <tbody> - @if($vips->count()) - @foreach ($vips as $vip) - <tr> - <td>{{ ExpertiseProductPageEnum::toArray()[$vip->page->value]->label }}</td> - <td>{{ $vip->label }}</td> - <td><p class="text-ellipsis m-0">{{ $vip->title }}</p></td> - <td> - <span class="badge text-dark text-wrap">{{ $vip->updated_at->formatLocalized('%d/%m/%Y à %H:%M') }}</span> - </td> - <td class="align-middle"> - <form action="{{ route('bo.vips.destroy', $vip->id) }}" method="POST" class="btn-group confirmDeleteJS" novalidate> - <a class="btn btn-sm btn-primary" - href="{{ route('bo.vips.edit', $vip->id) }}" - title="{{ __('Modifier :model', ['model' => Str::singular(__('models.classes.vips'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-pencil"></i> - </a> - @method('DELETE') - @csrf - <div class="btn-group" role="group"> - <button class="btn btn-sm btn-danger" - title="{{ __('Supprimer :model', ['model' => Str::singular(__('models.classes.vips'))]) }}" - data-bs-toggle="tooltip"> - <i class="fa-solid fa-trash"></i> - </button> - </div> - </form> - </td> - </tr> - @endforeach - @else - <tr> - <td colspan="5" class="text-center"> - <span class="h3">{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.vips') ])}}</span> - </td> - </tr> - @endif - </tbody> - </table> - </div> - </div> - </div> - </div> + <div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap"> + @include('modules.breadcrumbs.breadcrumb-body') + <a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.vips.create') }}" + title="{{ __('crud.helpers.create_model', ['model' => trans_choice('models.classes.vips', 1)]) }}"> + <i class="fa-solid fa-plus"></i> + </a> </div> + @include('bo.modules.search-bar') + <div class="table-responsive mb-3"> + <table class="table-hover table-fix-action m-0 table"> + @if (count($vipModels) > 0) + <thead> + @include('bo.modules.table-col-sorter', [ + 'cols' => [ + 'page' => __('validation.attributes.page'), + 'label' => __('validation.attributes.label'), + 'title' => __('validation.attributes.title'), + 'updated_at' => __('validation.attributes.updated_at'), + ], + ]) + </thead> + <tbody> + @foreach ($vipModels as $vipModel) + <tr class="border-bottom"> + <td class="text-center align-middle">{{ $vipModel->page->label() }}</td> + <td class="text-center align-middle">{{ $vipModel->label }}</td> + <td class="text-center align-middle">{{ $vipModel->title }}</td> + <td class="text-center align-middle"><span class="badge bg-secondary">{{ $vipModel->updated_at }}</span></td> + <td class="text-end align-middle"> + <form class="btn-group confirmDeleteTS" action="{{ route('bo.vips.destroy', $vipModel->id) }}" method="POST" + novalidate> + <a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" + href="{{ route('bo.vips.edit', ['vip' => $vipModel->id]) }}" title="{{ __('crud.actions.update') }}"> + <i class="fa-solid fa-pencil"></i> + </a> + @csrf + @method('DELETE') + <button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit" + title="{{ __('crud.actions.delete') }}"> + <i class="fa-solid fa-trash"></i> + </button> + </form> + </td> + </tr> + @endforeach + </tbody> + @else + <tr> + <td class="border-0">{{ __('crud.other.no_model_found', ['model' => trans_choice('models.classes.vips', 2)]) }}</td> + </tr> + @endif + </table> + </div> + {!! $vipModels->links() !!} @endsection diff --git a/resources/views/bo/partials/inputs/bigint-color.blade.php b/resources/views/bo/partials/inputs/bigint-color.blade.php new file mode 100644 index 0000000..2d30bad --- /dev/null +++ b/resources/views/bo/partials/inputs/bigint-color.blade.php @@ -0,0 +1,18 @@ +@php +$data = [ + 'id' => $id, + 'name' => $name, + 'value' => old($name, $model->{$name} ?? $value ?? ''), + 'title' => $title ?? __('Choisissez la couleur de la gamme'), + 'label' => $label, + 'rgbaMode' => $rgbaMode ?? true, + 'nullable' => $nullable ?? false, + 'ariaDescribedby' => "{$id}Help" +]; +@endphp +<div class="color-picker" data-json='@json($data)'></div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php b/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php new file mode 100644 index 0000000..ca89519 --- /dev/null +++ b/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php @@ -0,0 +1,21 @@ +@if(!empty($label)) +<label for="{{ $name }}" class="col-form-label"><b>{{ $label }} *</b></label> +@endif +<select id="{{ $name }}" + class="form-select" + name="{{ $name }}" + @if(!empty($size)) size="{{ $size }}" @endif + aria-describedby="{{ $id }}Help" + @if(!empty($label))required @endif + role="button"> + @foreach ($associatedModels as $associatedModel) + <option value="{{ $associatedModel->id }}" @if (old($name, $model->{$name} ?? $associatedModels[0]->id) == $associatedModel->id) selected @endif> + {{ $associatedModel->{$foreignLabel} }} + </option> + @endforeach +</select> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{{ $id }}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/int-number.blade.php b/resources/views/bo/partials/inputs/int-number.blade.php new file mode 100644 index 0000000..cea96ee --- /dev/null +++ b/resources/views/bo/partials/inputs/int-number.blade.php @@ -0,0 +1,40 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +@if(isset($appendText)) +<div class="input-group"> + @endif + <input id="{{ $id }}" + name="{{ $name }}" + type="number" + value="{{ Str::replace(',', '.', strval(old($name, $value ?? $model->{$name} ?? 0))) }}" + class="form-control" + aria-describedby="{{ $id }}Help" + @if(!empty($step)) + step="{{ Str::replace(',', '.', strval($step)) }}" + @else step="1" + @endif + @if(!empty($max)) + max="{{ $max }}" + @else + max="{{ !empty($unsigned) ? '4294967295' : '2147483647' }}" + @endif + @if(isset($min)) + min="{{ $min }}" + @else + min="{{ !empty($unsigned) ? '0' : '-2147483648' }}" + @endif + @if(!empty($required)) + required + @endif> + @if(isset($appendText)) + <label class="input-group-text">{{ $appendText }}</label> +</div> +@endif +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => '{{ $id }}Help', + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php b/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php new file mode 100644 index 0000000..23818e2 --- /dev/null +++ b/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php @@ -0,0 +1,24 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +@php +if (empty($attributeName) ) { + $attributeName = $name; +} +$data = [ + 'name' => $name, + 'value' => old($name, $model->{$attributeName} ?? $value ?? []) ?? [], + 'placeholder' => $placeholder, + 'itemsList' => $itemsList, + 'itemLimit' => $itemLimit ?? null, + 'errors' => $errors->getBag('default')->getMessages() ?? [] +]; +@endphp +<div class="belongs-to-many-dropdown" data-json='@json($data)'></div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper, +]) diff --git a/resources/views/bo/partials/inputs/select-multiple-enum.blade.php b/resources/views/bo/partials/inputs/select-multiple-enum.blade.php new file mode 100644 index 0000000..c0b7c82 --- /dev/null +++ b/resources/views/bo/partials/inputs/select-multiple-enum.blade.php @@ -0,0 +1,16 @@ +@php +$data = [ + "name" => $name, + "label" => $label, + "value" => $value ?? [], + "placeholder" => $placeholder, + "itemsSelected" => $itemsSelected, + "itemsList" => $itemsList, + "itemLimit" => $itemLimit, + "showSpecificItem" => $showSpecificItem ?? null, + "errors" => $errors->getBag("default")->getMessages() ?? [], + 'helper' => $helper, + 'require' => $require +]; +@endphp +<div class="select-multiple-enum" data-json='@json($data)'></div> diff --git a/resources/views/bo/partials/inputs/text-html.blade.php b/resources/views/bo/partials/inputs/text-html.blade.php new file mode 100644 index 0000000..2cfa18a --- /dev/null +++ b/resources/views/bo/partials/inputs/text-html.blade.php @@ -0,0 +1,20 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +@php +$data = [ + 'name' => $name, + 'text' => old($name, $model->{$name} ?? $value ?? '') +]; +@endphp +<div class="ck-editor" data-json='@json($data)'></div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper ?? __('validation.custom.text_warning') . '. ' . __('validation.min.string', [ + 'attribute' => $input['label'], + 'min' => 15 + ]), +]) diff --git a/resources/views/bo/partials/inputs/text-list-items.blade.php b/resources/views/bo/partials/inputs/text-list-items.blade.php new file mode 100644 index 0000000..ab28f59 --- /dev/null +++ b/resources/views/bo/partials/inputs/text-list-items.blade.php @@ -0,0 +1,31 @@ +<div class="container p-0 m-0"> + <div class="row"> + <div class="col"> + <label for="{{ $name }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> + </label> + </div> + </div> + <div class="row"> + <div class="col"> + @php + $data = [ + 'itemList' => old($name, $model->{$name} ?? []) ?? [], + 'itemColumns' => $itemColumns, + 'itemType' => $itemType, + 'itemLimit' => $itemLimit ?? [], + 'inputName' => $name, + 'inputPlaceholder' => $inputPlaceholder, + 'header' => $header ?? false, + 'errors' => $errors->getBag('default')->getMessages() ?? [] + ]; + @endphp + <div class="list-item" data-json='@json($data)'></div> + @include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper, + ]) + </div> + </div> +</div> diff --git a/resources/views/bo/partials/inputs/timestamp-date.blade.php b/resources/views/bo/partials/inputs/timestamp-date.blade.php new file mode 100644 index 0000000..83a96a1 --- /dev/null +++ b/resources/views/bo/partials/inputs/timestamp-date.blade.php @@ -0,0 +1,15 @@ +<label for="{{ $id }}"> + <b>{{ $label }}</b> +</label> +<input id="{{ $id }}" + name="{{ $name }}" + class="form-control" + type="date" + data-form-type="date" + aria-describedby="{{ "{$id}Help" }}" + value="{{ old($name, ((isset($model) and $model->{$name}) ? ($model->{$name}->format('Y-m-d') ?? ($defaultValue ? Carbon\Carbon::today() : '')) : ($defaultValue ? Carbon\Carbon::today() : ''))) }}"> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/timestamp-datetime.blade.php b/resources/views/bo/partials/inputs/timestamp-datetime.blade.php new file mode 100644 index 0000000..980342d --- /dev/null +++ b/resources/views/bo/partials/inputs/timestamp-datetime.blade.php @@ -0,0 +1,15 @@ +<label for="{{ $id }}"> + <b>{{ $label }}</b> +</label> +<input id="{{ $id }}" + name="{{ $name }}" + class="form-control" + type="datetime-local" + data-form-type="date" + aria-describedby="{{ "{$id}Help" }}" + value="{{ old($name, ((isset($model) and $model->{$name}) ? ($model->{$name}->format('Y-m-d\TH:i') ?? '') : '')) }}"> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/tinyint-boolean.blade.php b/resources/views/bo/partials/inputs/tinyint-boolean.blade.php new file mode 100644 index 0000000..dbe0470 --- /dev/null +++ b/resources/views/bo/partials/inputs/tinyint-boolean.blade.php @@ -0,0 +1,17 @@ +<div class="form-check form-switch"> + <label class="col-form-label p-0" type="button" for="{{ $id }}"><b>{{ $label }}</b></label> + <input + id="{{ $id }}" + aria-describedby="{{ $id }}Help" + name="{{ $name }}" + type="checkbox" + class="ml-2 form-check-input" + value="1" + role="button" + @if(old($name, (old('_token') ? false : ($model->{$name} ?? false)))) checked @endif> +</div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => '{{ $id }}Help' , + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/tinyint-enum.blade.php b/resources/views/bo/partials/inputs/tinyint-enum.blade.php new file mode 100644 index 0000000..67b15ec --- /dev/null +++ b/resources/views/bo/partials/inputs/tinyint-enum.blade.php @@ -0,0 +1,22 @@ +@if(!empty($label)) + <label for="{{ $name }}" class="col-form-label"><b>{{ $label }}@if(!empty($required)) * @endif</b></label> +@endif +<select id="{{ $name }}" + class="form-select" + name="{{ $name }}" + @if(!empty($size)) size="{{ $size }}" @endif + aria-describedby="{{ $id }}Help" + @if(!empty($require))required @endif + role="button"> + @if (isset($default)) <option selected disabled>{{ $default }}</option>@endif + @foreach ($associatedModels as $associatedModel) + <option value="{{ $associatedModel->value}}" @if (old($name, $model->{$name}->value ?? $value ?? 0) == $associatedModel->value) selected @endif> + {{ $associatedModel->label }} + </option> + @endforeach +</select> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{{ $id }}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/varchar-email.blade.php b/resources/views/bo/partials/inputs/varchar-email.blade.php new file mode 100644 index 0000000..c83b695 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar-email.blade.php @@ -0,0 +1,18 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +<input name="{{ $name }}" + type="email" + value="{{ old($name, $model->{$name} ?? '') }}" + class="form-control" + id="{{ $id }}" + aria-describedby="{{ $id }}Help" + placeholder="{{ $placeholder ?? __('Un nom beau et explicite') }}" + @if(!empty($required))required @endif> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => '{{ $id }}Help', + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/varchar-file.blade.php b/resources/views/bo/partials/inputs/varchar-file.blade.php new file mode 100644 index 0000000..dfaae92 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar-file.blade.php @@ -0,0 +1,31 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +<div class="input-group"> + <input name="{{ $name }}" + type="file" + value="{{ old($name, $model->{$name} ?? $value ?? '') }}" + class="form-control" + id="{{ $id }}" + aria-describedby="{{ $id }}Help" + accept="{{ $file ?? pdf }}" + @if(!empty($required)) + required + @endif> + @if (!empty($model->{$name})) + <a class="btn btn-warning" + href="/{{ $model->{$name} }}" + target="_blank" + title="{{ __("Visualiser votre fichier :name", ['name' => basename($model->{$name})]) }}" + data-bs-toggle="tooltip"> + {{ basename($model->{$name}) }} + </a> + @endif +</div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/varchar-multiline.blade.php b/resources/views/bo/partials/inputs/varchar-multiline.blade.php new file mode 100644 index 0000000..99e7bf4 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar-multiline.blade.php @@ -0,0 +1,27 @@ +{{-- $id : id de l'input --}} +{{-- $label : Libellé de l'input --}} +{{-- $name : name de l'input --}} +{{-- $model : instance du model --}} +{{-- $required : l'input est obligatoire ? (true/false) --}} +{{-- $placeholder : texte visible dans l'input lorsque son contenu est vide --}} +{{-- $helper : texte visible en dessous de l'input --}} +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@php +$data = [ + 'id' => $id, + 'class' => 'form-control', + 'name' => $name, + 'placeholder' => $placeholder, + 'ariaDescribedby' => "{$id}Help", + 'required' => $required, + 'value' => old($name, $model->{$name} ?? '') +]; +@endphp +<div class="input-text-auto" data-json='@json($data)'></div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => "{$id}Help", + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/varchar-password.blade.php b/resources/views/bo/partials/inputs/varchar-password.blade.php new file mode 100644 index 0000000..98693f3 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar-password.blade.php @@ -0,0 +1,29 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +@if(!empty($hasWordCounter ?? false)) +<div class="word-counter" data-json='@json(['id'=> "$id"])'></div> +@endif +<div class="col-12 input-group d-flex w-100 justify-content-center"> + <input id="{{ $id }}" + name="{{ $name }}" + type="password" + value="{{ old($name, $model->{$name} ?? '') }}" + class="form-control @if($errors->has($name)) is-invalid @endif @if(!empty($hasWordCounter ?? false)) need-word-counter-password @endif" + id="{{ $id }}" + aria-describedby="{{ $id }}Help" + placeholder="{{ $placeholder ?? __('Un beau mot de passe') }}" + autocomplete="current-password" + @if(!empty($required))required @endif> + @php $dataPassword = ['inputId' => $id]; @endphp + <span class="btn btn-primary password-visibility w-fit d-flex justify-content-center align-items-center p-0 @if(!empty($hasWordCounter ?? false)) need-word-counter-password-btn @endif" + data-json='@json($dataPassword)'> + </span> +</div> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => $id . 'Help', + 'helper' => $helper +]) diff --git a/resources/views/bo/partials/inputs/varchar-picture.blade.php b/resources/views/bo/partials/inputs/varchar-picture.blade.php new file mode 100644 index 0000000..1b2ea47 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar-picture.blade.php @@ -0,0 +1,15 @@ +@php +$data = [ + 'id' => $id, + 'name' => $name, + 'helper' => $helper, + 'width' => $width, + 'height' => $height, + 'value' => $model->{$name} ?? $value ?? '', + 'preview' => $preview ?? false, + 'browseEvent' => $browseEvent ?? false, + 'required' => $required ?? false, +]; +@endphp +<div class="image-input" data-json='@json($data)'></div> +@include('bo.modules.input-error', ['inputName' => $name, 'helper' => null]) diff --git a/resources/views/bo/partials/inputs/varchar.blade.php b/resources/views/bo/partials/inputs/varchar.blade.php new file mode 100644 index 0000000..12dbf02 --- /dev/null +++ b/resources/views/bo/partials/inputs/varchar.blade.php @@ -0,0 +1,23 @@ +@if(!empty($label)) +<label for="{{ $id }}" class="col-form-label"> + <b>{{ $label }} {{ $required ? '*' : '' }}</b> +</label> +@endif +@if(!empty($hasWordCounter ?? false)) +<div class="word-counter" data-json='@json(['id'=> $id])'></div> +@endif +<input name="{{ $name }}" + type="text" + value="{{ old($name, $model->{$name} ?? $value ?? '') }}" + class="form-control" + id="{{ $id }}" + aria-describedby="{{ $id }}Help" + placeholder="{{ $placeholder ?? __('A beautiful title') }}" + @if(!empty($required)) + required + @endif> +@include('bo.modules.input-error', [ + 'inputName' => $name, + 'helperId' => $id.'Help', + 'helper' => $helper +]) diff --git a/resources/views/errors/error.blade.php b/resources/views/errors/error.blade.php index 00738ef..aea59af 100644 --- a/resources/views/errors/error.blade.php +++ b/resources/views/errors/error.blade.php @@ -1,20 +1,21 @@ -@extends(Request::is('bo/*') ? 'bo.backend' : 'fo.frontend-minimal') +@extends(Request::is('bo/*') ? 'bo.layout' : 'fo.layout-minimal') -@section('title', "Erreur") +@section('title', 'Erreur') @section('description', "Page d\'erreurs sur le liste web Le Gaulois Pro") @section('content') - <div class="row p-0 m-0"> + <div class="row m-0 p-0"> <div class="col-12 content container"> <div class="row my-5 py-5"> - <div class="col text-center my-5 py-5"> + <div class="col my-5 py-5 text-center"> <div class="content error @yield('errorCode')"> <h1>@yield('title')</h1> <h4>@yield('message')</h4> - @if((app()->view->getSections()['code'] ?? '') !== '503') - <a href="{{ Request::is('bo/*') ? route('bo.dashboard') : route('home') }}" class="btn btn-yellow btn-arronded-20 text-uppercase"> - {{ __('Retour à la page d\'accueil') }} - </a> + @if ((app()->view->getSections()['code'] ?? '') !== '503') + <a class="btn btn-yellow btn-arronded-20 text-uppercase" + href="{{ Request::is('bo/*') ? route('bo.dashboard') : route('fo.homepage') }}"> + {{ __('Retour à la page d\'accueil') }} + </a> @endif </div> </div> diff --git a/resources/views/documents/partials/product-com-sheet-header.blade.php b/resources/views/fo/documents/partials/product-com-sheet-header.blade.php similarity index 71% rename from resources/views/documents/partials/product-com-sheet-header.blade.php rename to resources/views/fo/documents/partials/product-com-sheet-header.blade.php index e0b1b10..256dee3 100644 --- a/resources/views/documents/partials/product-com-sheet-header.blade.php +++ b/resources/views/fo/documents/partials/product-com-sheet-header.blade.php @@ -9,5 +9,5 @@ </table> {{-- positionfixed --}} <div class="header-logo-block"> - <img class="header-logo" src="{{ public_path('build/assets/images/header/logo-lgp-header.png') }}" alt="{{ config('app.name') }}"> + <img class="header-logo" src="{{ resource_path('assets/images/header/logo-lgp-header.png') }}" alt="{{ config('app.name') }}"> </div> diff --git a/resources/views/documents/partials/product-com-sheet-title.blade.php b/resources/views/fo/documents/partials/product-com-sheet-title.blade.php similarity index 54% rename from resources/views/documents/partials/product-com-sheet-title.blade.php rename to resources/views/fo/documents/partials/product-com-sheet-title.blade.php index 8ce7fe5..aa0aa90 100644 --- a/resources/views/documents/partials/product-com-sheet-title.blade.php +++ b/resources/views/fo/documents/partials/product-com-sheet-title.blade.php @@ -9,12 +9,12 @@ <tr> @if ($product->is_frenchpoultry) <td> - <img class="logo" src="{{ public_path('build/assets/images/logo-vf.png') }}" alt="{{ __('Logo de la volaille française') }}"> + <img class="logo" src="{{ resource_path('assets/images/logo-vf.png') }}" alt="{{ __('Logo de la volaille française') }}"> </td> @endif - @if ($product->nutriscore->value > 0) + @if (\App\Enums\NutriscoreEnum::make($product->nutriscore)->value > 0) <td> - <img class="logo" src="{{ public_path('build/assets/images/nutriscore/logo-nutriscore-'. $product->nutriscore->label .'.png') }}" alt="{{ __('Logo Nutriscore') }}"> + <img class="logo" src="{{ resource_path('assets/images/nutriscore/logo-nutriscore-'. \App\Enums\NutriscoreEnum::make($product->nutriscore)->label() .'.png') }}" alt="{{ __('Logo Nutriscore') }}"> </td> @endif <td> diff --git a/resources/views/documents/product-commercial-sheet.blade.php b/resources/views/fo/documents/product-commercial-sheet.blade.php similarity index 56% rename from resources/views/documents/product-commercial-sheet.blade.php rename to resources/views/fo/documents/product-commercial-sheet.blade.php index 509af0f..d4aff15 100644 --- a/resources/views/documents/product-commercial-sheet.blade.php +++ b/resources/views/fo/documents/product-commercial-sheet.blade.php @@ -6,7 +6,7 @@ {{ $title }} - + - - - - - - - - - - - - - - - - - + .c { + stroke-linejoin: round; + } + + + + + + + + + + + + + + + + + + +
-
- {{-- FIXME + {{-- FIXME +
+
-@include('fo.partials.expertise-products-vip') + @include('fo.partials.expertise-products-vip') -@include('fo.partials.expertise-products', ['specie' => App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::duck()->label]) + @include('fo.partials.expertise-products', [ + 'specie' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::duck->label(), + ]) -@include('fo.partials.expertise-recipes') + @include('fo.partials.expertise-recipes') -
+
@endsection diff --git a/resources/views/fo/pages/expertise/dinde.blade.php b/resources/views/fo/pages/expertise/dinde.blade.php index 769d4c6..e63ed0b 100644 --- a/resources/views/fo/pages/expertise/dinde.blade.php +++ b/resources/views/fo/pages/expertise/dinde.blade.php @@ -1,115 +1,136 @@ -@extends('fo.frontend', ['page' => 'breeder']) +@extends('fo.layout', ['page' => 'breeder']) -@section('title', "Notre expertise volaillere - Dinde") -@section('description', "Grâce à son goût apprécié de tous, elle se met au service du talent des chefs qui pourront créer des recettes à leur image.") +@section('title', 'Notre expertise volaillere - Dinde') +@section('description', + 'Grâce à son goût apprécié de tous, elle se met au service du talent des chefs qui pourront créer des recettes à + leur image.') @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'title' => __('Notre expertise volaillère'), - 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, - source d\'inspiration, pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques - et vous permettent de trouver la solution idéale à votre recette.') -]) + @include('fo.partials.banner-header', [ + 'title' => __('Notre expertise volaillère'), + 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, + source d\'inspiration, pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques + et vous permettent de trouver la solution idéale à votre recette.'), + ]) @endsection @section('content') -
-
-
- @include('fo.partials.nav-expertise') -
-
-

L'anatomie de la dinde

-

La dinde est peu calorique, riche en protéines et en vitamines, faible en lipides, rassasiante... elle assure également une très bonne digestibilité.
- Grâce à son goût apprécié de tous, elle se met au service du talent des chefs qui pourront créer des recettes à leur image.
- Toutes nos dindes sont nées, élevées et préparées en France.

+
+
+
+ @include('fo.partials.nav-expertise') +
+
+

L'anatomie de la dinde

+

La dinde est peu calorique, riche en protéines et en vitamines, faible en lipides, rassasiante... elle assure + également une très bonne digestibilité.
+ Grâce à son goût apprécié de tous, elle se met au service du talent des chefs qui pourront créer des recettes à leur + image.
+ Toutes nos dindes sont nées, élevées et préparées en France.

+
-
-
-
-
-
-
-
-
    -
  1. -

    1/ Blanquette

    -
  2. -
  3. -

    2/ Aile

    -
  4. -
  5. -

    3/ Haut de cuisse

    -
  6. -
  7. -

    4/ Pilon / Osso Bucco

    -
  8. -
  9. -

    5/ Filet ou escalope

    -
  10. -
  11. -

    6/ Sot-l'y-laisse

    -
  12. -
  13. -

    7/ Filet Mignon

    -
  14. -
+
+
+
+
+
+
+
    +
  1. +

    1/ Blanquette

    +
  2. +
  3. +

    2/ Aile

    +
  4. +
  5. +

    3/ Haut de cuisse

    +
  6. +
  7. +

    4/ Pilon / Osso Bucco

    +
  8. +
  9. +

    5/ Filet ou escalope

    +
  10. +
  11. +

    6/ Sot-l'y-laisse

    +
  12. +
  13. +

    7/ Filet Mignon

    +
  14. +
+
-
-
- - -
+ + + - - - - - - - - - - - - - - - - - - - - - + .d { + stroke-dasharray: 0 0 0 0 9 9 0 0; + } + + + + + + + + + + + + + + + + + + + + + + +
-
- {{-- FIXME + {{-- FIXME +
+
-@include('fo.partials.expertise-products-vip') + @include('fo.partials.expertise-products-vip') -@include('fo.partials.expertise-products', ['specie' => App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::turkey()->label]) + @include('fo.partials.expertise-products', [ + 'specie' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::turkey->label(), + ]) -@include('fo.partials.expertise-recipes') + @include('fo.partials.expertise-recipes') -
+
@endsection diff --git a/resources/views/fo/pages/expertise/lapin.blade.php b/resources/views/fo/pages/expertise/lapin.blade.php index 33bed4c..3e71195 100644 --- a/resources/views/fo/pages/expertise/lapin.blade.php +++ b/resources/views/fo/pages/expertise/lapin.blade.php @@ -1,100 +1,115 @@ -@extends('fo.frontend', ['page' => 'breeder']) +@extends('fo.layout', ['page' => 'breeder']) -@section('title', "Notre expertise volaillere - Lapin") -@section('description', "description de la page expertise") +@section('title', 'Notre expertise volaillere - Lapin') +@section('description', 'description de la page expertise') @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'title' => __('Notre expertise volaillère'), - 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, - pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la - solution idéale à votre recette.') -]) + @include('fo.partials.banner-header', [ + 'title' => __('Notre expertise volaillère'), + 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, + pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la + solution idéale à votre recette.'), + ]) @endsection @section('content') -
-
-
- @include('fo.partials.nav-expertise') -
-
-

L'anatomie du lapin

-

Seule volaille sans plume, le lapin a une chair fine et claire. Nous proposons des morceaux de râble sans os pour vous faciliter les services et vos convives apprécieront cette viande désossée et goûteuse, aux atouts nutritionnels indiscutables.

+
+
+
+ @include('fo.partials.nav-expertise') +
+
+

L'anatomie du lapin

+

Seule volaille sans plume, le lapin a une chair fine et claire. Nous proposons des morceaux de râble sans os pour + vous faciliter les services et vos convives apprécieront cette viande désossée et goûteuse, aux atouts nutritionnels + indiscutables.

+
-
-
-
-
-
-
-
-
    -
  1. -

    1/ Rable

    -
  2. -
  3. -

    2/ Cuisse

    -
  4. -
  5. -

    3/ Gigolette / Epaule

    -
  6. -
+
+
+
+
+
+
+
    +
  1. +

    1/ Rable

    +
  2. +
  3. +

    2/ Cuisse

    +
  4. +
  5. +

    3/ Gigolette / Epaule

    +
  6. +
+
-
-
- - -
+ + + - - - - - - - - - - - - - - - - + .c { + stroke-linejoin: round; + } + + + + + + + + + + + + + + + + + +
-
- {{-- FIXME + {{-- FIXME +
+
-@include('fo.partials.expertise-products-vip') + @include('fo.partials.expertise-products-vip') -@include('fo.partials.expertise-products', ['specie' => App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::rabbit()->label]) + @include('fo.partials.expertise-products', [ + 'specie' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::rabbit->label(), + ]) -@include('fo.partials.expertise-recipes') + @include('fo.partials.expertise-recipes') -
+
@endsection diff --git a/resources/views/fo/pages/expertise/pintade.blade.php b/resources/views/fo/pages/expertise/pintade.blade.php index 7da921b..3475947 100644 --- a/resources/views/fo/pages/expertise/pintade.blade.php +++ b/resources/views/fo/pages/expertise/pintade.blade.php @@ -1,89 +1,99 @@ -@extends('fo.frontend', ['page' => 'breeder']) +@extends('fo.layout', ['page' => 'breeder']) -@section('title', "Notre expertise volaillere - Pintade") -@section('description', "Sa saveur douce et racée fait de la pintade un produit différent, à mi-chemin entre la volaille et le gibier.") +@section('title', 'Notre expertise volaillere - Pintade') +@section('description', 'Sa saveur douce et racée fait de la pintade un produit différent, à mi-chemin entre la volaille et le gibier.') @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'title' => __('Notre expertise volaillère'), - 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, - pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la solution - idéale à votre recette.') -]) + @include('fo.partials.banner-header', [ + 'title' => __('Notre expertise volaillère'), + 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, + pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la solution + idéale à votre recette.'), + ]) @endsection @section('content') -
-
-
- @include('fo.partials.nav-expertise') -
-
-

L'anatomie de la pintade

-

Sa saveur douce et racée fait de la pintade un produit différent, à mi-chemin entre la volaille et le gibier. Les pintades sont garanties 100% françaises : nées, élevées et préparées en France.

+
+
+
+ @include('fo.partials.nav-expertise') +
+
+

L'anatomie de la pintade

+

Sa saveur douce et racée fait de la pintade un produit différent, à mi-chemin entre la volaille et le gibier. Les + pintades sont garanties 100% françaises : nées, élevées et préparées en France.

+
-
-
-
-
-
-
-
-
    -
  1. -

    1/ Filet

    -
  2. -
  3. -

    2/ Cuisse

    -
  4. -
+
+
+
+
+
+
+
    +
  1. +

    1/ Filet

    +
  2. +
  3. +

    2/ Cuisse

    +
  4. +
+
-
-
- - -
+ + + - - - - - - - - - - - - + .d { + stroke-dasharray: 0 0 0 0 9 9 0 0; + } + + + + + + + + + + + + + +
-
- {{-- FIXME + {{-- FIXME +
+
-@include('fo.partials.expertise-products-vip') + @include('fo.partials.expertise-products-vip') -@include('fo.partials.expertise-products', ['specie' => App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::guineafowl()->label]) + @include('fo.partials.expertise-products', [ + 'specie' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::guineafowl->label(), + ]) -@include('fo.partials.expertise-recipes') + @include('fo.partials.expertise-recipes') -
+
@endsection diff --git a/resources/views/fo/pages/expertise/poulet.blade.php b/resources/views/fo/pages/expertise/poulet.blade.php index 31842ac..a0f8ef8 100644 --- a/resources/views/fo/pages/expertise/poulet.blade.php +++ b/resources/views/fo/pages/expertise/poulet.blade.php @@ -1,297 +1,337 @@ -@extends('fo.frontend', ['page' => 'breeder']) +@extends('fo.layout', ['page' => 'breeder']) -@section('title', "Notre expertise volaillere - Poulet") -@section('description', "Le poulet se décline en différentes découpes calibrées pour s'adapter aux besoins de la restauration commerciale et de la restauration collective.") +@section('title', 'Notre expertise volaillere - Poulet') +@section('description', + "Le poulet se décline en différentes découpes calibrées pour s'adapter aux besoins de la restauration commerciale et + de la restauration collective.") @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'title' => __('Notre expertise volaillère'), - 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, - pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la solution - idéale à votre recette.') -]) + @include('fo.partials.banner-header', [ + 'title' => __('Notre expertise volaillère'), + 'description' => __('Le Gaulois Professionnel propose une large gamme de volailles entières, découpées et élaborées, source d\'inspiration, + pour des recettes variées et inventives au quotidien. Chaque volaille a ses propres caractéristiques et vous permettent de trouver la solution + idéale à votre recette.'), + ]) @endsection @section('content') -
-
-
- @include('fo.partials.nav-expertise') -
-
-

L'anatomie du poulet

-

Le poulet est la volaille la plus consommée en France. Il se décline en différentes découpes calibrées pour s'adapter aux besoins de la restauration commerciale et de la restauration collective.
- Nos poulets sont garantis 100% français : nés, élevés et préparés en France.

+
+
+
+ @include('fo.partials.nav-expertise') +
+
+

L'anatomie du poulet

+

Le poulet est la volaille la plus consommée en France. Il se décline en différentes découpes calibrées pour s'adapter + aux besoins de la restauration commerciale et de la restauration collective.
+ Nos poulets sont garantis 100% français : nés, élevés et préparés en France.

+
-
-
-
-
-
-
-
-
    -
  1. -

    1/ Filet

    -
  2. -
  3. -

    2/ Aile

    -
      -
    • -

      2A/ Manchon

      -
    • -
    • -

      2B/ Médiane

      -
    • -
    • -

      2C/ Pointe

      -
    • -
    -
  4. -
  5. -

    3/ Cuisse

    -
      -
    • -

      3A/ Haut de cuisse

      -
    • -
    • -

      3B/ Pilon

      -
    • -
    -
  6. -
+
+
+
+
+
+
+
    +
  1. +

    1/ Filet

    +
  2. +
  3. +

    2/ Aile

    +
      +
    • +

      2A/ Manchon

      +
    • +
    • +

      2B/ Médiane

      +
    • +
    • +

      2C/ Pointe

      +
    • +
    +
  4. +
  5. +

    3/ Cuisse

    +
      +
    • +

      3A/ Haut de cuisse

      +
    • +
    • +

      3B/ Pilon

      +
    • +
    +
  6. +
+
-
-
- -
+ + - + .st7 { + fill: #FFFFFF; + } + - + - - - - - - - - + + + + + + + + - - - + - - - + - - - + - - - - + - - - - + - - - + - + - - - - - - + + + + - - - - + + + - - - - + - - - - + - - - - + + + - - - -
-
-
-
-
-

Quelques définitions :

-

Cuisse déjointée : séparée à la jointure

-

Cuisse avec dos échinée 2 lames : sans arête dorsale

-

Cuisse de poulet avec dos sciée 1 lame : avec arête dorsale

-

Cuisse cuisson express : sans l'os du haut de cuisse + incision du pilon

-

Suprême : filet sans os avec peau + manchon

-

Aile entière : manchon + médiane + pointe

-
-
-
-
- -
-

A partir d'un poulet entier, Le Gaulois Professionnel vous propose une multitude de découpes piécées et calibrées pour vous faciliter le quotidien et la gestion de votre budget.

-

Suivez le couteau du chef pour découvrir toute notre offre dédiée aux professionnels des métiers de bouche.

+
+
+
+ +
+

Découvrez la découpe d'un poulet entier

+

Suivez les gestes du Chef Le Gaulois Professionnel pour voir les + différentes étapes de découpe d'un poulet.

+ +
+
+
+
+

A partir d'un poulet entier, Le Gaulois Professionnel vous propose une multitude de découpes piécées + et calibrées pour vous faciliter le quotidien et la gestion de votre budget.

+

Suivez le couteau du chef pour découvrir toute notre offre dédiée aux professionnels des métiers de bouche.

+
+ + @include('fo.partials.expertise-products-vip') + + @include('fo.partials.expertise-products', [ + 'specie' => \App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::chicken->label(), + ]) + + @include('fo.partials.expertise-recipes') +
- @include('fo.partials.expertise-products-vip') - - @include('fo.partials.expertise-products', ['specie' => App\Enums\ExpertiseProducts\ExpertiseProductPageEnum::chicken()->label]) - - @include('fo.partials.expertise-recipes') - -
- @endsection diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php index 3aa85e7..1fd76f9 100644 --- a/resources/views/fo/pages/home.blade.php +++ b/resources/views/fo/pages/home.blade.php @@ -1,717 +1,829 @@ -@extends('fo.frontend') +@extends('fo.layout') -@section('title', "Le Gaulois Professionnel, volailles nées, élevées et préparées en France") -@section('description', "Pourquoi choisir Le Gaulois Professionnel ? Professionnel du food service, restaurateur, acheteur vous pouvez comptez sur un partenaire volaille de choix.") +@section('title', 'Le Gaulois Professionnel, volailles nées, élevées et préparées en France') +@section('description', 'Pourquoi choisir Le Gaulois Professionnel ? Professionnel du food service, restaurateur, acheteur vous pouvez + comptez sur un partenaire volaille de choix.') @section('content') -
- - -
-
-
- Des convives qui mangent dans un restaurant -
+
+
+
- +
+
+ Logo Nature d'éleveurs +
+

{{ __('Générateur d\'idées, révélateur de talents') }}

+

{{ __('Pourquoi choisir Le Gaulois Professionnel ?') }}

+

{{ __('Le repas reste un moment privilégié dans une journée. Sutout s\'il est pris hors domicile. Professionnel + du food service, restaurateur, acheteur vous pouvez comptez sur un partenaire volaille de choix.') }} +

+
-
-
-

28kg

-

{{ __('de volaille consommé par an par Français, +15% en 20 ans') }}

+
+
+
+
+ Une assiette et deux couverts +
+

{{ __('Pour la qualité et la diversité') }}

+

+ {{ __('Tout nos produits sont préparés avec soin, et rigueur. + Ils sont adaptés à tous les types de restauration et tous les usages.') }} +

+
+
+
-
-

500

-

{{ __('références de volaille Le Gaulois Professionnel') }}

+
+
+
+ Dessin de la France +
+

{{ __('Pour la garantie d\'une volaille 100% Française') }}

+

+ {{ __('En partenariat avec nos éleveurs implantés dans nos régions, + toutes nos volailles sont nées, élevées préparées en France. Une offre multi-espèces inégalée : poulet, + dinde, pintade, canard, lapin... au services des professionnels des métiers de bouche.') }} +

+
+
+
-
-

9/10

-

{{ __('des Français veulent trouver de la Volaille Française en restauration hors domicile') }}

-
-
-

89%

-

{{ __('des Français sont allés au restaurant au moins une fois dans l\'année') }}

+
+
+
+ Une ampoule +
+

{{ __('Pour l\'innovation') }}

+

+ {{ __('A l\'écoute des contraintes des utilisateurs et des nouvelles + tendances de consommations, nous vous apportons des solutions toujours plus pratiques pour vos besoins + en volaille de qualité.') }} +

+
+
+
-
-
-
+
+
+ +
+

{{ __('Votre activité') }}

+

{{ __('A chaque type de restauration, il y a une solution Le Gaulois Professionnel. Nous avons conscience que les + contraintes de chaque activité nécessitent des réponses adaptées. Que vous soyez en BtoBtoB ou en autogéré, + nos services et notre large gamme de produits vous permettent de trouver des solutions à vos contraintes de coût, + de praticité et de qualité.') }} +

+
+
+
+
+
+
-
+
-
-

28kg

-

{{ __('de volaille consommé par an par Français, +15% en 20 ans') }}

+
-
-

500

-

{{ __('références de volaille Le Gaulois Professionnel') }}

+
-
-

9/10

-

{{ __('des Français veulent trouver de la Volaille Française en - restauration hors domicile') }}

+
-
-

89%

-

{{ __('des Français sont allés au restaurant au moins une fois dans - l\'année') }}

+ +
+
+ +
+
+
+
+
+
+
+ + {{-- BLOC DES PRODUITS --}} +
+
+
+
+
+

{{ __('Nos solutions produits') }}

+

{{ __('Notre offre de volaille 100% française dédiée à la restauration est composée de plus de 400 références en poulet, + dinde, canard, pintade, lapin ainsi que des produits semi-finis ainsi qu\'élaborés cuits. Nos découpes piécées, + parées et calibrées vous facilitent le quotidien. Nous proposons différents conditionements adaptés à votre activité.') }} +

+
+
+
+ + {{-- BLOC FILTRE DES GAMMES DESKTOP --}} +
+
+ @foreach ($ranges as $range) + + @endforeach +
+
+ {{-- BLOC FILTRE DES GAMMES MOBILE --}} +
+
+
+
+ +
+ + @foreach ($ranges as $range) + + @endforeach +
+
-
-
+
+
+
+
+ + {{-- BLOC DE 3 PRODUITS --}} + +
-
-
-
-
-
-

{{ __('Les engagements Le Gaulois Professionnel') }}

-

{{ __('Notre démarche de Responsabilité Sociétale de Marque se décompose en 5 grands piliers et se traduit par des - actions concrètes. Nos objectifs sont d\'impacter le moins possible l\'environnement, d\'améliorer la qualité de l\'alimentation - des Français, de préserver le bien-vivre ensemble de nos partenaires et collaborateurs ainsi que de veiller au bien-être animal.') }}

+
+ +
+
+
+ Des convives qui mangent dans un restaurant +
+
+ +
-
-
-
-
-
- -
- -
- -
-
-
- Dessin de la France -
-

{{ __('Etre la grande marque alimentaire - 100% Française dédiée aux Professionnels') }}

-

{{ __('Des volailles 100% Françaises, élevées par des éleveurs situés dans nos régions, - et préparés dans nos sites basés près des bassins de production. Une filière locale et régionale gage de - proximité.') }}

+
+
+

28kg

+

{{ __('de volaille consommé par an par Français, +15% en 20 ans') }} +

+
+
+

500

+

{{ __('références de volaille Le Gaulois Professionnel') }}

+
+
+

9/10

+

+ {{ __('des Français veulent trouver de la Volaille Française en restauration hors domicile') }}

+
+
+

89%

+

+ {{ __('des Français sont allés au restaurant au moins une fois dans l\'année') }}

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

28kg

+

+ {{ __('de volaille consommé par an par Français, +15% en 20 ans') }}

-
-
-
-
-
- Un coq et deux poussins -
-

{{ __('Élever durablement en respectant - les Hommes, les animaux et la Nature') }}

-

{{ __('A travers notre charte "Nature d\'éleveurs" dans laquelle l\'ensemble de nos éleveurs - seront engagés en 2025 nous garantissons des conditions d\'élevage respectueuses de la santé et du bien - être de nos volailles. Une démarche globale et ambitieuse visant à rendre l\'élevage plus vertueux.') }}

+
+
+

500

+

+ {{ __('références de volaille Le Gaulois Professionnel') }}

-
-
-
-
-
- Une assiette et deux couverts -
-

{{ __('Bien nourrir tous les Français') }}

-

{{ __('Le Gaulois professionnel met tout en oeuvre pour améliorer sans cesse la qualité - nutritionnelle de ses produits ') }}
- {{ __('Ainsi une vigilence particulière est porté sur les taux de sel, les additifs, le taux de matière grasse... - L\'ensemble de nos gammes sont encadrées par une charte nutritionnelle mise à jour tous les 4 ans.') }}

+
+
+

9/10

+

+ {{ __('des Français veulent trouver de la Volaille Française en + restauration hors domicile') }} +

-
-
-
-
-
- Une main portant un semis -
-

{{ __('Favoriser le mieux vivre ensemble') }}

-

{{ __('Depuis toujours chez Le Gaulois Professionnel nous aimons le sport porteur de valeurs similaires à - l\'univers de la restauration, comme la convivialité, le bien être, le partage et la performance. Nous favorisons sa pratique - aupès de nos collaborateurs. Ainsi nous sponsorisons des équipes et évènements tout au long de l\'année.') }}

-
-
-
-
-
-
-
- Deux mains qui vont se rejoindre -
-

{{ __('Respecter la Terre') }}

-

- {{ __('Face aux enjeux d\'aujourd\'hui, nous mettons tout en oeuvre pour limiter notre impact environnemental.')}} -
- {{ __('Ainsi notre empreinte carbone a été réduite de 17% en 3 ans grace notamment à une attention portée sur le transport de nos - volailles et marchandises, nos emballages, nos fournisseurs etc.') }} +

+
+

89%

+

+ {{ __('des Français sont allés au restaurant au moins une fois dans + l\'année') }}

+ +
+
- -
-
-
-
-
- {{ __('En savoir plus') }} +
+
+
+
+

{{ __('Les engagements Le Gaulois Professionnel') }}

+

{{ __('Notre démarche de Responsabilité Sociétale de Marque se décompose en 5 grands piliers et se traduit par des + actions concrètes. Nos objectifs sont d\'impacter le moins possible l\'environnement, d\'améliorer la qualité de l\'alimentation + des Français, de préserver le bien-vivre ensemble de nos partenaires et collaborateurs ainsi que de veiller au bien-être animal.') }} +

+
+
+
+
+
+
+ +
+ +
+ +
+
+
+ Dessin de la France +
+

+ {{ __('Etre la grande marque alimentaire + 100% Française dédiée aux Professionnels') }} +

+

+ {{ __('Des volailles 100% Françaises, élevées par des éleveurs situés dans nos régions, + et préparés dans nos sites basés près des bassins de production. Une filière locale et régionale gage de + proximité.') }} +

+
+
+
+
+
+
+
+ Un coq et deux poussins +
+

+ {{ __('Élever durablement en respectant + les Hommes, les animaux et la Nature') }} +

+

+ {{ __('A travers notre charte "Nature d\'éleveurs" dans laquelle l\'ensemble de nos éleveurs + seront engagés en 2025 nous garantissons des conditions d\'élevage respectueuses de la santé et du bien + être de nos volailles. Une démarche globale et ambitieuse visant à rendre l\'élevage plus vertueux.') }} +

+
+
+
+
+
+
+
+ Une assiette et deux couverts +
+

+ {{ __('Bien nourrir tous les Français') }}

+

+ {{ __('Le Gaulois professionnel met tout en oeuvre pour améliorer sans cesse la qualité + nutritionnelle de ses produits ') }}
+ {{ __('Ainsi une vigilence particulière est porté sur les taux de sel, les additifs, le taux de matière grasse... + L\'ensemble de nos gammes sont encadrées par une charte nutritionnelle mise à jour tous les 4 ans.') }} +

+
+
+
+
+
+
+
+ Une main portant un semis +
+

+ {{ __('Favoriser le mieux vivre ensemble') }}

+

+ {{ __('Depuis toujours chez Le Gaulois Professionnel nous aimons le sport porteur de valeurs similaires à + l\'univers de la restauration, comme la convivialité, le bien être, le partage et la performance. Nous favorisons sa pratique + aupès de nos collaborateurs. Ainsi nous sponsorisons des équipes et évènements tout au long de l\'année.') }} +

+
+
+
+
+
+
+
+ Deux mains qui vont se rejoindre +
+

+ {{ __('Respecter la Terre') }}

+

+ {{ __('Face aux enjeux d\'aujourd\'hui, nous mettons tout en oeuvre pour limiter notre impact environnemental.') }} +
+ {{ __('Ainsi notre empreinte carbone a été réduite de 17% en 3 ans grace notamment à une attention portée sur le transport de nos + volailles et marchandises, nos emballages, nos fournisseurs etc.') }} +

+
+
+
+
+
+
+ +
+
+
+
+
+ -
-
+
+
+ +
+
+
+
+ Un chef dressant le plat qu'il vient de cuisiner + Assiette de suprême de canette cuit +
+
+
+

{{ __('Amandine Chaignot met à l\'honneur les volailles Le Gaulois Professionnel') }}

+

+ {{ __('Avec sa cuisine joyeuse et efficace, Amandine Chaignot a choisi 10 produits Le Gaulois Professionnel pour élaborer des recettes + à base de volaille. ') }}
+ {{ __('Naviguant entre les différents types de cuisine, Amandine nous propose son interprétation de la cuisse à snacker, des pilons de poulet ou + encore du suprême de pintade et du sauté de canard.') }}
+ {{ __('Inspirée et inspirante, Amandine Chaignot est une ambassadrice Le Gaulois Professionnel au geste sûr et au sourire franc.') }} +

+ +
+
+
-
-
-
-
- Un chef dressant le plat qu'il vient de cuisiner - Assiette de suprême de canette cuit -
-
-
-

{{ __('Amandine Chaignot met à l\'honneur les volailles Le Gaulois Professionnel') }}

-

{{ __('Avec sa cuisine joyeuse et efficace, Amandine Chaignot a choisi 10 produits Le Gaulois Professionnel pour élaborer des recettes - à base de volaille. ') }}
- {{ __('Naviguant entre les différents types de cuisine, Amandine nous propose son interprétation de la cuisse à snacker, des pilons de poulet ou - encore du suprême de pintade et du sauté de canard.') }}
- {{ __('Inspirée et inspirante, Amandine Chaignot est une ambassadrice Le Gaulois Professionnel au geste sûr et au sourire franc.') }}

- -
-
-
- - -
-
-
-
-
-

{{ __('Nos actualités') }}

-

{{ __('Le Gaulois Professionnel vous propose régulièrement des innovations produits. Nous sommes également présents sur les salons - professionnels des métiers de bouche tel que le SIRHA. Suivez toutes nos actualités.') }}

-
-
-
- @if(count($events)>0) -
-
-

{{ __('Retrouvez-nous :') }}

-
-
-
- @foreach ($events as $event) -
-
-
-

{{ \Carbon\Carbon::parse($event->event_start)->locale('fr_FR')->isoFormat('D MMM Y') }}

- - - - - - - - -
-
- {{$event->event_text}} +
+ -
-
-
- -
- -
- - @foreach ($events as $event) -
-
-
-
-

{{ \Carbon\Carbon::parse($event->event_start)->locale('fr_FR')->isoFormat('D MMM Y') }}

- - -
+
+
+ +
+ +
+ + @foreach ($events as $event) +
+
+
+
+

+ {{ \Carbon\Carbon::parse($event->event_start)->locale('fr_FR')->isoFormat('D MMM Y') }} +

+ + + - - - - - -
-
-

{{$event->event_text}}

-
-
- +
+

{{ $event->event_text }}

+
+
+ + + + + + {{ __('Ajouter à mon calendrier') }} + +
+
+
+ @endforeach
- @endforeach + +
+
- -
-
+ @endif +
+ @foreach ($news as $item) +
+ @include('fo.pages.news.postCard', [ + 'news_item' => $item, + 'color' => 'blue', + ]) +
+ @endforeach
-
- @endif -
- @foreach ($news as $item) -
- @include('fo.pages.news.postCard', [ - 'news_item' => $item, - 'color' => 'blue' - ]) -
- @endforeach -
-
-
-
- -
- -
- - @foreach ($news as $item) -
-
- @include('fo.pages.news.postCard', [ - 'news_item' => $item, - 'color' => 'blue' - ]) -
+
+
+
+ +
+ +
+ + @foreach ($news as $item) +
+
+ @include('fo.pages.news.postCard', [ + 'news_item' => $item, + 'color' => 'blue', + ]) +
+
+ @endforeach
- @endforeach
+ +
+
- -
-
+
-
-
@endsection diff --git a/resources/views/fo/pages/ideas/ideas.blade.php b/resources/views/fo/pages/ideas/ideas.blade.php index 495147b..aa2fd9c 100644 --- a/resources/views/fo/pages/ideas/ideas.blade.php +++ b/resources/views/fo/pages/ideas/ideas.blade.php @@ -1,81 +1,98 @@ -@extends('fo.frontend', ['page' => 'ideas']) +@extends('fo.layout', ['page' => 'ideas']) @section('title', "La Cheffe Amandine Chaignot s'associe à Le Gaulois Professionnel") -{{-- FIXME: SEO @section('description', "description de la homepage") --}} +{{-- FIXME: SEO @section('description', 'description de la homepage') --}} @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'breadcrumbs' => "Accueil / Générateur d'idées, révélateurs de talents", - 'title' => __('La Cheffe Amandine Chaignot s\'associe à Le Gaulois Professionnel'), - 'description' => __('De l\'univers bistronomique à la streetfood asiatique, la Cheffe a imaginé 10 recettes inédites avec - différents produits de volaille Le Gaulois Professionnel.') -]) + @include('fo.partials.banner-header', [ + 'breadcrumbs' => "Accueil / Générateur d'idées, révélateurs de talents", + 'title' => __('La Cheffe Amandine Chaignot s\'associe à Le Gaulois Professionnel'), + 'description' => __('De l\'univers bistronomique à la streetfood asiatique, la Cheffe a imaginé 10 recettes inédites avec + différents produits de volaille Le Gaulois Professionnel.'), + ]) @endsection @section('content')
-
+
-
-
+
+
- Un cuisinier avec un tablier bleu -
- - Assiette de suprême de canette cuit + Un cuisinier avec un tablier bleu +
+ + Assiette de suprême de canette cuit
-
+

Une ambassadrice de talent pour cuisiner nos volailles Le Gaulois Professionnel

-

Grâce à son expertise et à sa bonne humeur, Amandine Chaignot a su mettre à l'honneur la volaille française Le Gaulois Professionnel. Son choix s'est porté sur des produits emblématiques de la restauration comme les sot-l'y-laisse de dinde et le suprême de pintade. D'autres produits plus traditionnels mais toujours gourmands ont été revisités avec le râble de lapin et le coquelet blanc. La streetfood est devenu un incontournable de la restauration et les pilons de poulet en sont un parfait emblème du plat régressif à manger avec les doigts et avec une astuce pour les garder bien moelleux.

-

Authentique et efficace, la Cheffe Amandine Chaignot partage avec Le Gaulois Professionnel ses jolies recettes de volaille pour notre plus grand bonheur.

+

Grâce à son expertise et à sa bonne humeur, Amandine Chaignot a su mettre à l'honneur la + volaille française Le Gaulois Professionnel. Son choix s'est porté sur des produits emblématiques de la restauration + comme les sot-l'y-laisse de dinde et le suprême de pintade. D'autres produits plus traditionnels mais toujours + gourmands ont été revisités avec le râble de lapin et le coquelet blanc. La streetfood est devenu un incontournable + de la restauration et les pilons de poulet en sont un parfait emblème du plat régressif à manger avec les doigts et + avec une astuce pour les garder bien moelleux.

+

Authentique et efficace, la Cheffe Amandine Chaignot partage avec Le Gaulois Professionnel ses + jolies recettes de volaille pour notre plus grand bonheur.

-

Trouver l'inspiration avec les recettes volailles d'Amandine Chaignot

-
-
- Un chef dressant le plat qu'il vient de cuisiner - +
+
+ Un chef dressant le plat qu'il vient de cuisiner +
-
+

Les Astuces Volaille d'Amandine Chaignot

-

La Cheffe vous livre ses astuces pour réussir toutes vos recettes élaborées avec de la volaille Le Gaulois Professionnel.

+

La Cheffe vous livre ses astuces pour réussir toutes vos + recettes élaborées avec de la volaille Le Gaulois Professionnel.

-
-
- Un cuisinier dresse un plat de volaille - +
+
+ Un cuisinier dresse un plat de volaille +
-
+

Les Recettes Volaille d'Amandine Chaignot

-

Trouvez l'inspiration avec les fiches recettes élaborées par la Cheffe de Pouliche, Café de Luce et Cosy. Quelque soit votre type de restauration, vous trouverez des idées originales et pleines de saveurs.

+

Trouvez l'inspiration avec les fiches recettes élaborées + par la Cheffe de Pouliche, Café de Luce et Cosy. Quelque soit votre type de restauration, vous trouverez des + idées originales et pleines de saveurs.

-
- @endsection diff --git a/resources/views/fo/pages/ideas/modelCard.blade.php b/resources/views/fo/pages/ideas/modelCard.blade.php index 40a3007..983dd35 100644 --- a/resources/views/fo/pages/ideas/modelCard.blade.php +++ b/resources/views/fo/pages/ideas/modelCard.blade.php @@ -1,41 +1,46 @@ {{-- Generic Card --}} @php $type = $type ?? 'recipe'; @endphp -
+
{{ $picture_alt }} @include('fo.modules.separator', ['color' => $color])
-
-

{{ $title }}

+
+

{{ $title }}

@foreach ($tags as $tag) -
- {{ $tag->label }} -
+
+ {{ $tag->label }} +
@endforeach - @if($type == 'recipe') + @if ($type == 'recipe')
@if ($time)
- Une horloge -

{{ $time }} min

+ Une horloge +

{{ $time }} min

@endif @if ($difficulty)
@switch($difficulty) - @case(App\Enums\Advices\AdviceDifficultyEnum::easy()) - {{ __('Difficulté facile repésenté par un toque') }} + @case(\App\Enums\Advices\AdviceDifficultyEnum::easy) + {{ __('Difficulté facile repésenté par un toque') }}

{{ __('Facile') }}

- @break - @case(App\Enums\Advices\AdviceDifficultyEnum::medium()) - {{ __('Difficulté médium repésenté par deux toques') }} + @break + + @case(\App\Enums\Advices\AdviceDifficultyEnum::medium) + {{ __('Difficulté médium repésenté par deux toques') }}

{{ __('Médium') }}

- @break - @case(App\Enums\Advices\AdviceDifficultyEnum::hard()) - {{ __('Difficulté difficile repésenté par trois toques') }} + @break + + @case(\App\Enums\Advices\AdviceDifficultyEnum::hard) + {{ __('Difficulté difficile repésenté par trois toques') }}

{{ __('Difficile') }}

- @break + @break @endswitch
@endif @@ -44,11 +49,11 @@
- @if($type != 'recipe') -

{{ clean($text) }}

+ @if ($type != 'recipe') +

{{ clean($text) }}

@endif -
diff --git a/resources/views/fo/pages/ideas/recipe.blade.php b/resources/views/fo/pages/ideas/recipe.blade.php index 0f279bc..d084831 100644 --- a/resources/views/fo/pages/ideas/recipe.blade.php +++ b/resources/views/fo/pages/ideas/recipe.blade.php @@ -1,285 +1,319 @@ -@extends('fo.frontend') +@extends('fo.layout') @section('title', $recipe->title) -@section('description', __("description de la fiche recette")) +@section('description', __('description de la fiche recette')) -@section('canonical', route('recipes.show', ['publishedAdvice' => $recipe])) +@section('canonical', route('fo.recipes.show', ['publishedAdvice' => $recipe])) @section('ogPicture', asset($recipe->picture)) -@section('breadcrumb', request()->route()->getName()) +@section('breadcrumb', + request()->route()->getName()) @section('content') -
-
-
-
-
-
- {{ $recipe->picture_alt }} - - -
+
+
+
+
+
+ {{ $recipe->picture_alt }} + + + - - - - - - - - - - - - - - + .bckgd-sep { + fill: #161719; + } + + + + + + + + + + + + + + + +
-
-
-
- @include('./fo/modules/breadcrumb/breadcrumb-body', ['brParam' => $recipe]) -
-

{{ $recipe->title }}

-
- @include('fo.modules.socialShare', ['socialNetwork' => 'facebook', 'title' => $recipe->title]) - @include('fo.modules.socialShare', ['socialNetwork' => 'twitter', 'title' => $recipe->title]) - @include('fo.modules.socialShare', ['socialNetwork' => 'linkedin', 'title' => $recipe->title]) - @include('fo.modules.socialShare', - [ - 'socialNetwork' => 'mail', - 'subject' => __('J\'ai pensé que cette recette :appName pouvait t\'intéresser', ['appName' => config('app.name')]), - 'title' => __( - 'Bonjour, %0D%0A%0D%0AVoici le lien vers la recette ":title".%0D%0A%0D%0A:url%0D%0A%0D%0ABonne cuisine.', - [ - 'title' => $recipe->title, - 'url' => route('recipes.show', ['publishedAdvice' => $recipe]) - ] - ) - ]) -
-
-
- @foreach ($recipe->tags as $tag) -
- {{ $tag->label }} -
- @endforeach -
- @if($recipe->preparation_time) -
-

- Une horloge - Temps de préparation : {{ $recipe->preparation_time }}min -

-
- @endif - @if($recipe->difficulty) -
-

- Une toque de cuisinier - Niveau : {{ \App\Enums\Advices\AdviceDifficultyEnum::toArray()[$recipe->difficulty->value]->label }} -

-
- @endif - @if($recipe->cooking_time) -
-

- Une poele - Temps de cuisson : {{ $recipe->cooking_time }}min -

-
- @endif - {{-- FIXME: Cookie notice integration --}} - @if($recipe->youtube_video_id) -
-
- {{$recipe->sticker_sm_alt}} - - - - - - - -
-
-

{{ $recipe->youtube_title }}

-
-
- @endif -
-
-
- -
- @if ($recipe->guests_nb) - @php - $dataVue = [ - 'guests' => $recipe->guests_nb, - 'ingredients' => $recipe->ingredients - ]; - @endphp
- @endif -
-

{{ __('Progression de la recette') }}

- {!! clean($recipe->preparation) !!} - @if($recipe->advice) -
- Une toque de cuisinier -

{{ __('Le conseil Le Gaulois Professionnel') }}

+ class="col-12 col-md-6 d-flex flex-column justify-content-between align-items-center txt-col text-lg-start px-md-0 pe-md-4 pe-lg-6 pe-xl-8 mt-md-5 mt-lg-0 text-center"> +
+ @include('modules.breadcrumbs.breadcrumb-body', ['brParam' => $recipe]) +
+

{{ $recipe->title }}

+
+ @include('fo.modules.socialShare', ['socialNetwork' => 'facebook', 'title' => $recipe->title]) + @include('fo.modules.socialShare', ['socialNetwork' => 'twitter', 'title' => $recipe->title]) + @include('fo.modules.socialShare', ['socialNetwork' => 'linkedin', 'title' => $recipe->title]) + @include('fo.modules.socialShare', [ + 'socialNetwork' => 'mail', + 'subject' => __('J\'ai pensé que cette recette :appName pouvait t\'intéresser', [ + 'appName' => config('app.name'), + ]), + 'title' => __( + 'Bonjour, %0D%0A%0D%0AVoici le lien vers la recette ":title".%0D%0A%0D%0A:url%0D%0A%0D%0ABonne cuisine.', + [ + 'title' => $recipe->title, + 'url' => route('fo.recipes.show', ['publishedAdvice' => $recipe]), + ]), + ]) +
+
+
+ @foreach ($recipe->tags as $tag) +
+ {{ $tag->label }} +
+ @endforeach +
+ @if ($recipe->preparation_time) +
+

+ Une horloge + Temps de préparation : {{ $recipe->preparation_time }}min +

+
+ @endif + @if ($recipe->difficulty) +
+

+ Une toque de cuisinier + Niveau : {{ $recipe->difficulty->label() }} +

+
+ @endif + @if ($recipe->cooking_time) +
+

+ Une poele + Temps de cuisson : {{ $recipe->cooking_time }}min +

+
+ @endif + {{-- FIXME: Cookie notice integration --}} + @if ($recipe->youtube_video_id) +
+
+ {{ $recipe->sticker_sm_alt }} + + + + + + + +
+
+

{{ $recipe->youtube_title }} +

+
+
+ @endif
- {!! clean($recipe->advice) !!} - @endif +
-
-

{{ __('Produit utilisé dans cette recette :') }}

-
- @foreach ($recipe->products as $product) -
-
- {{ $product->sticker_sm_alt }} - {{-- FIXME: remplacer par le module de séparation --}} - - -
+ @if ($recipe->guests_nb) + @php + $dataVue = [ + 'guests' => $recipe->guests_nb, + 'ingredients' => $recipe->ingredients, + ]; + @endphp +
+ @endif +
+

{{ __('Progression de la recette') }}

+ {!! clean($recipe->preparation) !!} + @if ($recipe->advice) +
+ Une toque de cuisinier +

{{ __('Le conseil Le Gaulois Professionnel') }}

+
+ {!! clean($recipe->advice) !!} + @endif +
+
- .card-prod-recipe-3 { - fill: #282828; - } - - - - - - - - - - - - - - - -
-
-

{{ $product->label }}

-

{{ App\Enums\Products\ProductSpeciesEnum::toArray()[$product->species->value]->label }}

-
-
- {{ __('Découvrir le produit') }} +

+ {{ __('Produit utilisé dans cette recette :') }}

+
+ @foreach ($recipe->products as $product) +
+
+ {{ $product->sticker_sm_alt }} + {{-- FIXME: remplacer par le module de séparation --}} + + + + + + + + + + + + + + + + + +
+
+

{{ $product->label }}

+

+ {{ $product->species->label() }}

+
-
- @endforeach -
-
-
- -@if (count($relatedRecipes) > 0) -
-
-
-
-
-

{{ __('Nos recettes qui pourraient vous intéresser') }}

-
-
-
-
- @foreach ($relatedRecipes as $relatedRecipe) - @include('fo.pages.ideas.modelCard', [ - 'type' => 'recipe', - 'color' => 'blue', - 'title' => $relatedRecipe->title, - 'text' => $relatedRecipe->preparation, - 'picture' => $relatedRecipe->picture, - 'picture_alt' => $relatedRecipe->picture_alt, - 'picture_title' => $relatedRecipe->picture_title, - 'time' => $relatedRecipe->preparation_time, - 'difficulty' => $relatedRecipe->difficulty, - 'tags' => $relatedRecipe->tags ?? [], - 'route' => route('recipes.show', ['publishedAdvice' => $relatedRecipe]) - ]) @endforeach
-@endif -
- -@if (count($relatedTips) > 0) -
-
-

{{ __('Retrouvez nos astuces volaille') }}

- {{-- Associated Tips iteration --}} - @php $relatedTips = $recipe->tips(); $firstTip = $relatedTips->pull(0); @endphp -
-
- @if($firstTip) -
-
- {{ asset($firstTip->sticker_alt) }} - {{-- FIXME: Refactoriser les séparateurs en un fichier svg au lieux des blade et utiliser une classe pour la couleur --}} - - - @include('fo.modules.svgs.play') - -
-
-
{{ $firstTip->title }}
-
{!! clean($firstTip->preparation) !!}
- -
+ @if (count($relatedRecipes) > 0) +
+
+
+
+
+

{{ __('Nos recettes qui pourraient vous intéresser') }}

- @endif +
- @if($relatedTips->count()) -
- @foreach ($relatedTips as $tip) - + @endif + +
+ + @if (count($relatedTips) > 0) +
+
+

{{ __('Retrouvez nos astuces volaille') }}

+ {{-- Associated Tips iteration --}} + @php + $relatedTips = $recipe->tips(); + $firstTip = $relatedTips->pull(0); + @endphp +
+
+ @if ($firstTip) +
+ -
-
{{ $tip->title }}
-
{{ clean($tip->advice) }}
+
+
{{ $firstTip->title }}
+
{!! clean($firstTip->preparation) !!}
+
- @endforeach + @endif
- @endif + @if ($relatedTips->count()) +
+ @foreach ($relatedTips as $tip) +
+ +
+
{{ $tip->title }} +
+
{{ clean($tip->advice) }}
+
+
+ @endforeach +
+ @endif +
+
+
- -
-@endif + @endif @endsection diff --git a/resources/views/fo/pages/ideas/recipes.blade.php b/resources/views/fo/pages/ideas/recipes.blade.php index ca00008..8ab2cd1 100644 --- a/resources/views/fo/pages/ideas/recipes.blade.php +++ b/resources/views/fo/pages/ideas/recipes.blade.php @@ -1,88 +1,88 @@ -@extends('fo.frontend', ['page' => 'recipes']) +@extends('fo.layout', ['page' => 'recipes']) -@section('title', __("Nos recettes")) -@section('description', __("Le Gaulois Professionnel a imaginé pour vous ces recettes inspirantes, pensées pour tous les types de restauration qui sauront ravir vos convives.")) +@section('title', __('Nos recettes')) +@section('description', + __('Le Gaulois Professionnel a imaginé pour vous ces recettes inspirantes, pensées pour tous les types de + restauration qui sauront ravir vos convives.')) @section('bannerHeader') -@include('fo.partials.banner-header', [ - 'title' => __("DÉCOUVREZ NOS RECETTES ORIGINALES"), - 'description' => __("Le Gaulois Professionnel a imaginé pour vous ces recettes originales, gourmandes et délicieuses ! - Des recettes inspirantes, pensées pour tous les types de restauration qui sauront ravir vos convives. - La volaille se caractérise par le large choix d'espèce qui contribue à la richesse de la gastronomie Française. Vous - retrouverez donc des recettes à base de poulet bien sûr mais également à base de dinde, canard, pintade, coquelet etc.") -]) + @include('fo.partials.banner-header', [ + 'title' => __('DÉCOUVREZ NOS RECETTES ORIGINALES'), + 'description' => __("Le Gaulois Professionnel a imaginé pour vous ces recettes originales, gourmandes et délicieuses ! + Des recettes inspirantes, pensées pour tous les types de restauration qui sauront ravir vos convives. + La volaille se caractérise par le large choix d'espèce qui contribue à la richesse de la gastronomie Française. Vous + retrouverez donc des recettes à base de poulet bien sûr mais également à base de dinde, canard, pintade, coquelet etc."), + ]) @endsection @section('content') -
- -
-
- {{-- PAGINATOR --}} -
-
- {{ $recipes->withQueryString()->onEachSide(1)->links('fo.modules.pagination') }} +
+ +
+
+ {{-- PAGINATOR --}} +
+
+ {{ $recipes->withQueryString()->onEachSide(1)->links('fo.modules.pagination') }} +
+
+ @if (count($recipes) > 0) +
+ @foreach ($recipes as $recipe) + @include('fo.pages.ideas.modelCard', [ + 'type' => 'recipe', + 'color' => 'blue', + 'title' => $recipe->title, + 'text' => $recipe->preparation, + 'picture' => $recipe->picture, + 'picture_alt' => $recipe->picture_alt, + 'picture_title' => $recipe->picture_title, + 'time' => $recipe->cooking_time + $recipe->preparation_time, + 'difficulty' => $recipe->difficulty, + 'tags' => $recipe->tags ?? [], + 'route' => route('fo.recipes.show', ['publishedAdvice' => $recipe]), + ]) + @endforeach +
+ @else +
+

{{ __('Aucunes recettes ne correspond aux filtres sélectionnés') }}

+
+ @endif + {{-- PAGINATOR --}} +
+
+ {{ $recipes->withQueryString()->onEachSide(1)->links('fo.modules.pagination') }} +
- - @if (count($recipes) > 0) -
- @foreach ($recipes as $recipe) - @include('fo.pages.ideas.modelCard', [ - 'type' => 'recipe', - 'color' => 'blue', - 'title' => $recipe->title, - 'text' => $recipe->preparation, - 'picture' => $recipe->picture, - 'picture_alt' => $recipe->picture_alt, - 'picture_title' => $recipe->picture_title, - 'time' => $recipe->cooking_time + $recipe->preparation_time, - 'difficulty' => $recipe->difficulty, - 'tags' => $recipe->tags ?? [], - 'route' => route('recipes.show', ['publishedAdvice' => $recipe]) - ]) - @endforeach -
- @else -
-

{{ __('Aucunes recettes ne correspond aux filtres sélectionnés') }}

-
- @endif - - {{-- PAGINATOR --}} -
-
- {{ $recipes->withQueryString()->onEachSide(1)->links('fo.modules.pagination') }} -
-
-
-
-
- + +
@endsection diff --git a/resources/views/fo/pages/ideas/tip.blade.php b/resources/views/fo/pages/ideas/tip.blade.php index ebd328b..e41ca38 100644 --- a/resources/views/fo/pages/ideas/tip.blade.php +++ b/resources/views/fo/pages/ideas/tip.blade.php @@ -1,16 +1,17 @@ -@extends('fo.frontend') +@extends('fo.layout') @section('title', $adviceModel->seo_title) @section('description', $adviceModel->seo_description) -@section('canonical', route('tips.show', $adviceModel)) +@section('canonical', route('fo.tips.show', $adviceModel)) @section('ogPicture', asset($adviceModel->picture)) -@section('breadcrumb', request()->route()->getName()) +@section('breadcrumb', + request()->route()->getName()) -{{-- FIXME: Microdata ex from LG implement for recipies --}} + {{-- FIXME: Microdata ex from LG implement for recipies --}} @section('microdata') -{{-- diff --git a/resources/views/modules/script-routes.blade.php b/resources/views/modules/script-routes.blade.php new file mode 100644 index 0000000..7d5d3e9 --- /dev/null +++ b/resources/views/modules/script-routes.blade.php @@ -0,0 +1,15 @@ +@include('modules.script-constants') + diff --git a/routes/breadcrumbs-bo.php b/routes/breadcrumbs-bo.php new file mode 100644 index 0000000..43d14de --- /dev/null +++ b/routes/breadcrumbs-bo.php @@ -0,0 +1,158 @@ +push(trans('Tableau de bord'), route('bo.dashboard')); +}); + +// * SLIDES +Breadcrumbs::for('bo.slides.index', function (Generator $trail) { + $trail->push( + trans('models.classes.slides'), + route('bo.slides.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.slides.create', function (Generator $trail) { + $trail->parent('bo.slides.index'); + $trail->push(trans('crud.actions.create'), route('bo.slides.create')); +}); +Breadcrumbs::for('bo.slides.edit', function (Generator $trail, Slide $slide) { + $trail->parent('bo.slides.index'); + $trail->push(trans('crud.actions.edit'), route('bo.slides.edit', $slide->id)); +}); + +// * VIPS +Breadcrumbs::for('bo.vips.index', function (Generator $trail) { + $trail->push( + trans_choice('models.classes.vips', 2), + route('bo.vips.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.vips.create', function (Generator $trail) { + $trail->parent('bo.vips.index'); + $trail->push(trans('crud.actions.create'), route('bo.vips.create')); +}); +Breadcrumbs::for('bo.vips.edit', function (Generator $trail, ExpertiseProduct $vip) { + $trail->parent('bo.vips.index'); + $trail->push(trans('crud.actions.edit'), route('bo.vips.edit', $vip->id)); +}); + +// * RANGES +Breadcrumbs::for('bo.ranges.index', function (Generator $trail) { + $trail->push( + trans('models.classes.ranges'), + route('bo.ranges.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.ranges.create', function (Generator $trail) { + $trail->parent('bo.ranges.index'); + $trail->push(trans('crud.actions.create'), route('bo.ranges.create')); +}); +Breadcrumbs::for('bo.ranges.edit', function (Generator $trail, Range $range) { + $trail->parent('bo.ranges.index'); + $trail->push(trans('crud.actions.edit'), route('bo.ranges.edit', $range->id)); +}); + +// * PRODUCTS +Breadcrumbs::for('bo.products.index', function (Generator $trail) { + $trail->push( + trans('models.classes.products'), + route('bo.products.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.products.create', function (Generator $trail) { + $trail->parent('bo.products.index'); + $trail->push(trans('crud.actions.create'), route('bo.products.create')); +}); +Breadcrumbs::for('bo.products.edit', function (Generator $trail, Product $product) { + $trail->parent('bo.products.index'); + $trail->push(trans('crud.actions.edit'), route('bo.products.edit', $product->id)); +}); + +// * NEWS +Breadcrumbs::for('bo.news.index', function (Generator $trail) { + $trail->push( + trans('models.classes.news'), + route('bo.news.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.news.create', function (Generator $trail) { + $trail->parent('bo.news.index'); + $trail->push(trans('crud.actions.create'), route('bo.news.create')); +}); +Breadcrumbs::for('bo.news.edit', function (Generator $trail, News $news) { + $trail->parent('bo.news.index'); + $trail->push(trans('crud.actions.edit'), route('bo.news.edit', $news->id)); +}); + +// * NEWSCATEGORIES +Breadcrumbs::for('bo.newscategories.index', function (Generator $trail) { + $trail->push( + trans('models.classes.newscategories'), + route('bo.newscategories.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.newscategories.edit', function (Generator $trail, NewsCategory $newscategory) { + $trail->parent('bo.newscategories.index'); + $trail->push(trans('crud.actions.edit'), route('bo.news.edit', $newscategory->id)); +}); + +// * ADVICE +Breadcrumbs::for('bo.advice.index', function (Generator $trail, AdviceTypeEnum $currentType) { + switch ($currentType->value()) { + case AdviceTypeEnum::recipes->value(): + $string = AdviceTypeEnum::recipes->label(); + break; + case AdviceTypeEnum::tips->value: + $string = AdviceTypeEnum::tips->label(); + break; + default: + $string = AdviceTypeEnum::all->label(); + break; + } + $trail->push( + $string, + route('bo.advice.index', ['type' => $currentType->value(), 'sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.advice.create', function (Generator $trail, AdviceTypeEnum $currentType, Advice $advice) { + $trail->parent('bo.advice.index', $currentType); + $trail->push(trans('crud.actions.create'), route('bo.advice.create', [ + 'type' => $currentType, + 'advice' => $advice + ])); +}); +Breadcrumbs::for('bo.advice.edit', function (Generator $trail, AdviceTypeEnum $currentType, Advice $advice) { + $trail->parent('bo.advice.index', $currentType); + $trail->push(trans('crud.actions.edit'), route('bo.advice.edit', [ + 'advice' => $advice + ])); +}); + +// * TAGS +Breadcrumbs::for('bo.tags.index', function (Generator $trail) { + $trail->push( + trans('models.classes.tags'), + route('bo.tags.index', ['sort_col' => 'updated_at', 'sort_way' => 'desc']) + ); +}); +Breadcrumbs::for('bo.tags.create', function (Generator $trail) { + $trail->parent('bo.tags.index'); + $trail->push(trans('crud.actions.create'), route('bo.tags.create')); +}); +Breadcrumbs::for('bo.tags.edit', function (Generator $trail, Tag $tag) { + $trail->parent('bo.tags.index'); + $trail->push(trans('crud.actions.edit'), route('bo.tags.edit', $tag->id)); +}); diff --git a/routes/breadcrumbs-fo.php b/routes/breadcrumbs-fo.php index 65f29c3..85a803f 100644 --- a/routes/breadcrumbs-fo.php +++ b/routes/breadcrumbs-fo.php @@ -9,218 +9,218 @@ use Diglactic\Breadcrumbs\Generator; use Illuminate\Support\Str; // * Root -Breadcrumbs::for('home', function (Generator $trail) { - $trail->push(Str::ucfirst(trans('Accueil')), route('home')); +Breadcrumbs::for('fo.homepage', function (Generator $trail) { + $trail->push(Str::ucfirst(trans('Accueil')), route('fo.homepage')); }); // * ADN -Breadcrumbs::for('adn.adn', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.adn.adn', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre ADN')), - route('adn.adn') + route('fo.adn.adn') ); }); -Breadcrumbs::for('adn.story', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.adn.story', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre histoire')), - route('adn.story') + route('fo.adn.story') ); }); -Breadcrumbs::for('adn.btob', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.adn.btob', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos solutions')), - route('adn.btob') + route('fo.adn.btob') ); }); -Breadcrumbs::for('adn.breeder', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.adn.breeder', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos éleveurs de volailles')), - route('adn.breeder') + route('fo.adn.breeder') ); }); // * ENGAGEMENTS -Breadcrumbs::for('engagments.francais', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.engagments.francais', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos engagements / Marque alimentaire 100% Française')), - route('engagments.francais') + route('fo.engagments.francais') ); }); -Breadcrumbs::for('engagments.eleverdurablement', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.engagments.eleverdurablement', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos engagements / Elever durablement en respectant les Hommes, les animaux et la Nature')), - route('engagments.eleverdurablement') + route('fo.engagments.eleverdurablement') ); }); -Breadcrumbs::for('engagments.biennourrir', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.engagments.biennourrir', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos engagements / Bien nourrir tous les Français')), - route('engagments.biennourrir') + route('fo.engagments.biennourrir') ); }); -Breadcrumbs::for('engagments.respecterlaterre', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.engagments.respecterlaterre', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos engagements / Respecter la Terre')), - route('engagments.respecterlaterre') + route('fo.engagments.respecterlaterre') ); }); -Breadcrumbs::for('engagments.vivreensemble', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.engagments.vivreensemble', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos engagements / Favoriser le mieux vivre ensemble')), - route('engagments.vivreensemble') + route('fo.engagments.vivreensemble') ); }); // * EXPERTISE -Breadcrumbs::for('expertise.canard', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.expertise.canard', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre expertise volaillère')), - route('expertise.canard') + route('fo.expertise.canard') ); }); -Breadcrumbs::for('expertise.dinde', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.expertise.dinde', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre expertise volaillère')), - route('expertise.dinde') + route('fo.expertise.dinde') ); }); -Breadcrumbs::for('expertise.lapin', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.expertise.lapin', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre expertise volaillère')), - route('expertise.lapin') + route('fo.expertise.lapin') ); }); -Breadcrumbs::for('expertise.pintade', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.expertise.pintade', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre expertise volaillère')), - route('expertise.pintade') + route('fo.expertise.pintade') ); }); -Breadcrumbs::for('expertise.poulet', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.expertise.poulet', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Notre expertise volaillère')), - route('expertise.poulet') + route('fo.expertise.poulet') ); }); // * IDEES -Breadcrumbs::for('ideas.ideas', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.ideas.ideas', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Générateur d\'idées, révélateurs de talents')), - route('ideas.ideas') + route('fo.ideas.ideas') ); }); -Breadcrumbs::for('ideas.tips.index', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.ideas.tips.index', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos astuces volaille')), - route('ideas.tips.index') + route('fo.ideas.tips.index') ); }); -Breadcrumbs::for('tips.show', function (Generator $trail, Advice $tip) { - $trail->parent('ideas.tips.index'); +Breadcrumbs::for('fo.tips.show', function (Generator $trail, Advice $tip) { + $trail->parent('fo.ideas.tips.index'); $trail->push( Str::ucfirst($tip->title), - route('tips.show', ['publishedAdvice' => $tip]) + route('fo.tips.show', ['publishedAdvice' => $tip]) ); }); -Breadcrumbs::for('ideas.recipes.index', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.ideas.recipes.index', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos recettes')), - route('ideas.recipes.index') + route('fo.ideas.recipes.index') ); }); -Breadcrumbs::for('recipes.show', function (Generator $trail, Advice $recipe) { - $trail->parent('ideas.recipes.index'); +Breadcrumbs::for('fo.recipes.show', function (Generator $trail, Advice $recipe) { + $trail->parent('fo.ideas.recipes.index'); $trail->push( Str::ucfirst($recipe->title), - route('recipes.show', ['publishedAdvice' => $recipe]) + route('fo.recipes.show', ['publishedAdvice' => $recipe]) ); }); // * PRODUITS -Breadcrumbs::for('products.index', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.products.index', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos solutions produits')), - route('products.index') + route('fo.products.index') ); }); -Breadcrumbs::for('products.range-products', function (Generator $trail, Range $range) { - $trail->parent('products.index'); - $trail->push(Str::ucfirst($range->label), route('products.range-products', ['range' => $range])); +Breadcrumbs::for('fo.products.range-products', function (Generator $trail, Range $range) { + $trail->parent('fo.products.index'); + $trail->push(Str::ucfirst($range->label), route('fo.products.range-products', ['range' => $range])); }); -Breadcrumbs::for('products.show', function (Generator $trail, Product $product) { - $trail->parent('products.index'); +Breadcrumbs::for('fo.products.show', function (Generator $trail, Product $product) { + $trail->parent('fo.products.index'); $trail->push( Str::ucfirst($product->subrange->range->label), - route('products.range-products', ['range' => $product->subrange->range]) + route('fo.products.range-products', ['range' => $product->subrange->range]) ); - $trail->push(Str::ucfirst($product->label), route('products.show', ['publishedProduct' => $product])); + $trail->push(Str::ucfirst($product->label), route('fo.products.show', ['publishedProduct' => $product])); }); // * ACTUALITE -Breadcrumbs::for('news.index', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.news.index', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Nos actualités')), - route('news.index') + route('fo.news.index') ); }); -Breadcrumbs::for('news.show', function (Generator $trail, News $news) { - $trail->parent('news.index'); +Breadcrumbs::for('fo.news.show', function (Generator $trail, News $news) { + $trail->parent('fo.news.index'); $trail->push( Str::ucfirst($news->slug), - route('news.show', ['actu' => $news]) + route('fo.news.show', ['actu' => $news]) ); }); // * CONTACT -Breadcrumbs::for('contact.show', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.contact.show', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Contact')), - route('contact.show') + route('fo.contact.show') ); }); // * RECHERCHE -Breadcrumbs::for('search', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.search', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Résultats de recherche')), - route('search') + route('fo.search') ); }); // * FOOTER -Breadcrumbs::for('policies', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.policies', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Politique des données personnelles')), - route('policies') + route('fo.policies') ); }); -Breadcrumbs::for('legals', function (Generator $trail) { - $trail->parent('home'); +Breadcrumbs::for('fo.legals', function (Generator $trail) { + $trail->parent('fo.homepage'); $trail->push( Str::ucfirst(trans('Mentions légales')), - route('legals') + route('fo.legals') ); }); diff --git a/routes/web-bo.php b/routes/web-bo.php index 73a5637..755347e 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -12,69 +12,76 @@ use App\Http\Controllers\Bo\TagController; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; -Route::prefix('bo')->name('bo.')->middleware(['admin-secure', 'throttle:credentials'])->group(function () { - Route::namespace('\App\Http\Controllers\Bo')->group(function () { - Auth::routes([ - 'login' => true, - 'logout' => true, - 'reset' => false, - 'register' => false, - 'confirm' => false, - 'verify' => false - ]); +Route::prefix('bo') + ->name('bo.') + ->middleware(['admin-secure', 'throttle:credentials']) + ->group(function () { + Route::namespace('\App\Http\Controllers\Bo') + ->group(function () { + Auth::routes([ + 'login' => true, + 'logout' => true, + 'reset' => false, + 'register' => false, + 'confirm' => false, + 'verify' => false + ]); + }); + + Route::middleware('auth:backend')->group(function () { + Route::get('/', [HomeController::class, 'dashboard'])->name('dashboard'); + + // * SLIDES + Route::resource('slides', SlideController::class)->except(['show']) + ->withoutMiddleware('htmlsanitize') + ->middleware('htmlsanitize:content'); + Route::get('/slides/change-order/{slide}/{direction}', [ + SlideController::class, 'changeOrder' + ])->where('direction', 'up|down')->name('slides.change-order'); + + // * RANGES + Route::resource('ranges', RangeController::class)->except(['show']); + Route::get('/ranges/change-order/{range}/{direction}', [ + RangeController::class, 'changeOrder' + ])->where('direction', 'up|down')->name('ranges.change-order'); + + // * PRODUCTS + Route::resource('products', ProductController::class)->except(['show']) + ->withoutMiddleware('htmlsanitize') + ->middleware('htmlsanitize:ingredients,advantage,preparation'); + Route::get('/products/change-order/{product}/{direction}', [ + ProductController::class, 'changeOrder' + ])->where('direction', 'up|down')->name('products.change-order'); + Route::post('/products/{product}/change-published', [ProductController::class, 'changePublished']) + ->name('products.change-published'); + + // * NEWS + Route::resource('news', NewsController::class)->except(['show']) + ->withoutMiddleware('htmlsanitize') + ->middleware('htmlsanitize:content,content2'); + Route::post('/news/{news}/change-published', [NewsController::class, 'changePublished']) + ->name('news.change-published'); + + // * NEWSCATEGORIES + Route::resource('newscategories', NewsCategoryController::class) + ->except(['create', 'store', 'show', 'destroy']); + + // * ADVICE (RECIPES + TIPS) + Route::resource('advice', AdviceController::class) + ->except(['show', 'index', 'create']) + ->withoutMiddleware('htmlsanitize') + ->middleware('htmlsanitize:preparation,advice,ingredients'); + + Route::get('advice/{type}', [AdviceController::class, 'index'])->name('advice.index'); + Route::get('advice/{type}/create', [AdviceController::class, 'create'])->name('advice.create'); + Route::post('/advice/{advice}/change-published', [AdviceController::class, 'changePublished']) + ->name('advice.change-published'); + + // * EXPERTISE PRODUITS VIP + Route::resource('vips', ExpertiseProductController::class)->except(['show']); + + // * TAGS + Route::resource('tags', TagController::class)->except(['show']); + Route::post('/tags/store', [TagController::class, 'jsonStore'])->name('tags.jsonStore'); + }); }); - - Route::middleware('auth:backend')->group(function () { - Route::get('/', [HomeController::class, 'dashboard'])->name('dashboard'); - - // * SLIDES - Route::resource('slides', SlideController::class)->except(['show']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:content'); - Route::post('/slides/{slide}/change-order', [SlideController::class, 'changeOrder']) - ->name('slides.change-order'); - - // * RANGES - Route::resource('ranges', RangeController::class)->except(['show']); - Route::post('/ranges/{range}/change-order', [RangeController::class, 'changeOrder']) - ->name('ranges.change-order'); - - // * PRODUCTS - Route::resource('products', ProductController::class)->except(['show']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:ingredients,advantage,preparation'); - Route::post('/products/{product}/change-order', [ProductController::class, 'changeOrder']) - ->name('products.change-order'); - Route::post('/products/{product}/change-published', [ProductController::class, 'changePublished']) - ->name('products.change-published'); - - // * NEWS - Route::resource('news', NewsController::class)->except(['show']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:content,content2'); - Route::post('/news/{news}/change-published', [NewsController::class, 'changePublished']) - ->name('news.change-published'); - - // * NEWSCATEGORIES - Route::resource('newscategories', NewsCategoryController::class) - ->except(['create', 'store', 'show', 'destroy']); - - // * ADVICE (RECIPES + TIPS) - Route::resource('advice', AdviceController::class) - ->except(['show', 'index', 'create']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:preparation,advice,ingredients'); - - Route::get('advice/{type}', [AdviceController::class, 'index'])->name('advice.index'); - Route::get('advice/{type}/create', [AdviceController::class, 'create'])->name('advice.create'); - Route::post('/advice/{advice}/change-published', [AdviceController::class, 'changePublished']) - ->name('advice.change-published'); - - // * EXPERTISE PRODUITS VIP - Route::resource('vips', ExpertiseProductController::class)->except(['show']); - - // * TAGS - Route::resource('tags', TagController::class)->except(['show']); - Route::post('/tags/store', [TagController::class, 'jsonStore'])->name('tags.jsonStore'); - }); -}); diff --git a/routes/web-fo.php b/routes/web-fo.php index dbfaf52..374c38e 100644 --- a/routes/web-fo.php +++ b/routes/web-fo.php @@ -14,157 +14,135 @@ use App\Http\Controllers\Fo\SearchController; use App\Http\Controllers\Fo\TipsController; use Illuminate\Support\Facades\Route; -Route::get('/', [HomeController::class, 'index'])->name('home'); - -Route::prefix('/notre-adn') - ->name('adn.') +Route::name('fo.') ->group(function () { - Route::get( - '/', - [AdnController::class, 'index'] - )->name('adn'); - Route::get( - '/notre-histoire', - [AdnController::class, 'story'] - )->name('story'); - Route::get( - '/nos-solutions-pensees-pour-les-restaurateurs', - [AdnController::class, 'btob'] - )->name('btob'); - Route::get( - '/le-metier-d-eleveur-de-volaille', - [AdnController::class, 'breeder'] - )->name('breeder'); + Route::get('/', [HomeController::class, 'index'])->name('homepage'); + + Route::prefix('/notre-adn') + ->name('adn.') + ->group(function () { + Route::get('/', [AdnController::class, 'index']) + ->name('adn'); + Route::get('/notre-histoire', [AdnController::class, 'story']) + ->name('story'); + Route::get('/nos-solutions-pensees-pour-les-restaurateurs', [AdnController::class, 'btob']) + ->name('btob'); + Route::get('/le-metier-d-eleveur-de-volaille', [AdnController::class, 'breeder']) + ->name('breeder'); + }); + + Route::prefix('/nos-engagements') + ->name('engagments.') + ->group(function () { + // * Onglet 100% Française + Route::get('/marque-alimentaire-francaise', [EngagmentsController::class, 'francais']) + ->name('francais'); + // * Onglet Elever durablement + Route::get('/elever-durablement', [EngagmentsController::class, 'eleverdurablement']) + ->name('eleverdurablement'); + // * Onglet Bien nourrir + Route::get('/bien-nourrir', [EngagmentsController::class, 'biennourrir']) + ->name('biennourrir'); + // * Onglet Respecter la terre + Route::get('/respecter-la-terre', [EngagmentsController::class, 'respecterlaterre']) + ->name('respecterlaterre'); + // * Onglet Mieux vivre ensemble + Route::get('/mieux-vivre-ensemble', [EngagmentsController::class, 'vivreensemble']) + ->name('vivreensemble'); + }); + + Route::prefix('/notre-expertise-volaillere') + ->name('expertise.') + ->group(function () { + // * Onglet Canard + Route::get('/canard', [ExpertiseController::class, 'canard']) + ->name('canard'); + // * Onglet Dinde + Route::get('/dinde', [ExpertiseController::class, 'dinde']) + ->name('dinde'); + // * Onglet Lapin + Route::get('/lapin', [ExpertiseController::class, 'lapin']) + ->name('lapin'); + // * Onglet Pintade + Route::get('/pintade', [ExpertiseController::class, 'pintade']) + ->name('pintade'); + // * Onglet Poulet + Route::get('/poulet', [ExpertiseController::class, 'poulet']) + ->name('poulet'); + }); + + Route::prefix('/generateur-d-idees-revelateur-de-talents') + ->name('ideas.') + ->group(function () { + Route::get('/', [IdeasController::class, 'index']) + ->name('ideas'); + Route::get('/nos-astuces-volaille', [TipsController::class, 'indexTips']) + ->name('tips.index'); + Route::get('/nos-recettes', [RecipesController::class, 'indexRecipes']) + ->name('recipes.index'); + }); + + Route::prefix('/astuce') + ->name('tips.') + ->group(function () { + Route::get('/{publishedAdvice:slug}', [TipsController::class, 'show'])->name('show'); + }); + + Route::prefix('/recette') + ->name('recipes.') + ->group(function () { + Route::get('/{publishedAdvice:slug}', [RecipesController::class, 'show'])->name('show'); + }); + + Route::prefix('/produits') + ->name('products.') + ->group(function () { + Route::get('/', [ProductsController::class, 'index']) + ->name('index'); + Route::get('/gamme/{range:slug}', [ProductsController::class, 'products']) + ->name('range-products'); + Route::get('/gamme/{range:slug}/ajax', [ProductsController::class, 'productsAjax']) + ->name('range-products.ajax'); + }); + + Route::prefix('/produit') + ->name('products.') + ->group(function () { + Route::get('/{publishedProduct:slug}', [ProductsController::class, 'show']) + ->name('show'); + Route::post('/{publishedProduct:slug}/ajout-au-panier', [ + ProductsController::class, 'addProductToBasket' + ])->name('add-product-to-basket'); + Route::get('/{publishedProduct:slug}/print-commercial-sheet', [ + ProductsController::class, 'printCommericalSheet' + ])->name('print-commercial-sheet'); + Route::post('/{slug}/retrait-du-panier', [ProductsController::class, 'removeProductFromBasket']) + ->name('remove-product-from-basket'); + }); + + Route::prefix('/nos-actualites') + ->name('news.') + ->group(function () { + Route::get('/', [NewsController::class, 'index']) + ->name('index'); + Route::get('specifique/{actu:slug}', [NewsController::class, 'show']) + ->where('slug', '^[a-zA-Z0-9-]*$') + ->name('show'); + }); + + Route::prefix('/contactez-nous') + ->name('contact.') + ->group(function () { + Route::get('/', [ContactController::class, 'index'])->name('show'); + Route::post('/mail', [ContactController::class, 'contactSubmit'])->name('submit'); + }); + + Route::get('/restauration-sociale', [ActivitiesController::class, 'sociale'])->name('group'); + Route::get('/restauration-commerciale', [ActivitiesController::class, 'commerciale'])->name('trade'); + Route::get('/distributeur', [ActivitiesController::class, 'distributeur'])->name('dealer'); + Route::get('/boulangerie-vente-a-emporter', [ActivitiesController::class, 'boulangerie'])->name('baker'); + + Route::view('/politique-de-donnees-personnelles', 'fo.pages.policies')->name('policies'); + Route::view('/mentions-legales', 'fo.pages.legals')->name('legals'); + Route::get('/recherche', [SearchController::class, 'search'])->name('search'); }); - -Route::prefix('/nos-engagements') - ->name('engagments.') - ->group(function () { - // * Onglet 100% Française - Route::get( - '/marque-alimentaire-francaise', - [EngagmentsController::class, 'francais'] - )->name('francais'); - // * Onglet Elever durablement - Route::get( - '/elever-durablement', - [EngagmentsController::class, 'eleverdurablement'] - )->name('eleverdurablement'); - // * Onglet Bien nourrir - Route::get( - '/bien-nourrir', - [EngagmentsController::class, 'biennourrir'] - )->name('biennourrir'); - // * Onglet Respecter la terre - Route::get( - '/respecter-la-terre', - [EngagmentsController::class, 'respecterlaterre'] - )->name('respecterlaterre'); - // * Onglet Mieux vivre ensemble - Route::get( - '/mieux-vivre-ensemble', - [EngagmentsController::class, 'vivreensemble'] - )->name('vivreensemble'); - }); - -Route::prefix('/notre-expertise-volaillere') - ->name('expertise.') - ->group(function () { - // * Onglet Canard - Route::get( - '/canard', - [ExpertiseController::class, 'canard'] - )->name('canard'); - // * Onglet Dinde - Route::get( - '/dinde', - [ExpertiseController::class, 'dinde'] - )->name('dinde'); - // * Onglet Lapin - Route::get( - '/lapin', - [ExpertiseController::class, 'lapin'] - )->name('lapin'); - // * Onglet Pintade - Route::get( - '/pintade', - [ExpertiseController::class, 'pintade'] - )->name('pintade'); - // * Onglet Poulet - Route::get( - '/poulet', - [ExpertiseController::class, 'poulet'] - )->name('poulet'); - }); - -Route::prefix('/generateur-d-idees-revelateur-de-talents') - ->name('ideas.') - ->group(function () { - Route::get('/', [ - IdeasController::class, 'index' - ])->name('ideas'); - Route::get('/nos-astuces-volaille', [ - TipsController::class, 'indexTips' - ])->name('tips.index'); - Route::get('/nos-recettes', [ - RecipesController::class, 'indexRecipes' - ])->name('recipes.index'); - }); - -Route::prefix('/astuce') - ->name('tips.') - ->group(function () { - Route::get('/{publishedAdvice:slug}', [TipsController::class, 'show'])->name('show'); - }); - -Route::prefix('/recette') - ->name('recipes.') - ->group(function () { - Route::get('/{publishedAdvice:slug}', [RecipesController::class, 'show'])->name('show'); - }); - -Route::prefix('/produits') -->name('products.') -->group(function () { - Route::get('/', [ProductsController::class, 'index'])->name('index'); - Route::get('/gamme/{range:slug}', [ProductsController::class, 'products'])->name('range-products'); - Route::get('/gamme/{range:slug}/ajax', [ProductsController::class, 'productsAjax'])->name('range-products.ajax'); -}); - -Route::prefix('/produit') -->name('products.') -->group(function () { - Route::get('/{publishedProduct:slug}', [ProductsController::class, 'show'])->name('show'); - Route::post('/{publishedProduct:slug}/ajout-au-panier', [ProductsController::class, 'addProductToBasket']) - ->name('add-product-to-basket'); - Route::get('/{publishedProduct:slug}/print-commercial-sheet', [ProductsController::class, 'printCommericalSheet']) - ->name('print-commercial-sheet'); - Route::post('/{slug}/retrait-du-panier', [ProductsController::class, 'removeProductFromBasket']) - ->name('remove-product-from-basket'); -}); - -Route::prefix('/nos-actualites') - ->name('news.') - ->group(function () { - Route::get('/', [NewsController::class, 'index']) - ->name('index'); - Route::get('specifique/{actu:slug}', [NewsController::class, 'show']) - ->where('slug', '^[a-zA-Z0-9-]*$') - ->name('show'); - }); - -Route::prefix('/contactez-nous') - ->name('contact.') - ->group(function () { - Route::get('/', [ContactController::class, 'index'])->name('show'); - Route::post('/mail', [ContactController::class, 'contactSubmit'])->name('submit'); - }); - -Route::get('/restauration-sociale', [ActivitiesController::class, 'sociale'])->name('group'); -Route::get('/restauration-commerciale', [ActivitiesController::class, 'commerciale'])->name('trade'); -Route::get('/distributeur', [ActivitiesController::class, 'distributeur'])->name('dealer'); -Route::get('/boulangerie-vente-a-emporter', [ActivitiesController::class, 'boulangerie'])->name('baker'); - -Route::view('/politique-de-donnees-personnelles', 'fo.pages.policies')->name('policies'); -Route::view('/mentions-legales', 'fo.pages.legals')->name('legals'); -Route::get('/recherche', [SearchController::class, 'search'])->name('search'); diff --git a/tsconfig.json b/tsconfig.json index 55e4a14..04bea88 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,26 @@ { "sourceMap": true, "compilerOptions": { + "esModuleInterop": true, "target": "esnext", "lib": ["es5", "es6", "es2021", "dom", "dom.iterable"], "module": "esnext", "strict": true, "jsx": "preserve", "moduleResolution": "node", - "typeRoots": ["resources/ts/@types", "node_modules/@types"] + "typeRoots": [ + "resources/ts/@types", + "node_modules/@types" + ], + "types": ["vite/client"], + "baseUrl": ".", + "paths": { + "~/*": [ + "node_modules/*", + "node_modules/@types/*", + ], + "@/*": ["resources/assets/*"], + } }, "include": ["resources/**/*.js", "resources/**/*.ts", "resources/**/*.vue"], "exclude": ["node_modules"], diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..b0c3802 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,120 @@ +import legacy from "@vitejs/plugin-legacy"; +import vue from "@vitejs/plugin-vue"; +import laravel from "laravel-vite-plugin"; +import path from "path"; +import { defineConfig } from "vite"; +import checker from "vite-plugin-checker"; +import eslint from "vite-plugin-eslint"; +import stylelint from "vite-plugin-stylelint"; + +export default defineConfig({ + build: { + rollupOptions: { + output: { + entryFileNames: `assets/${ + process.env.NODE_ENV === "local" ? "[name]-" : "" + }[hash].js`, + chunkFileNames: `assets/${ + process.env.NODE_ENV === "local" ? "[name]-" : "" + }[hash].js`, + assetFileNames: `assets/${ + process.env.NODE_ENV === "local" ? "[name]-" : "" + }[hash].[ext]`, + }, + }, + emptyOutDir: true, + sourcemap: process.env.NODE_ENV === "local" ? "inline" : false, + }, + css: { + devSourcemap: process.env.NODE_ENV === "local" ? true : false, + postcss: { + map: { + inline: true, + }, + plugins: [ + require("postcss-discard-comments")({ + removeAll: true, + }), + ], + }, + }, + plugins: [ + checker({ + enableBuild: true, + vueTsc: { + root: ".", + tsconfigPath: "tsconfig.json", + }, + typescript: { + root: ".", + tsconfigPath: "tsconfig.json", + }, + eslint: { + lintCommand: + "eslint --fix --quiet -c .eslintrc.json \"./resources\"", + }, + stylelint: { + lintCommand: + "stylelint -q --config \"./.stylelintrc.json\" --fix \"**/resources/**/*.scss\"", + }, + }), + laravel({ + input: [ + "resources/sass/bo/bo.scss", + "resources/ts/bo/bo.ts", + "resources/sass/fo/fo.scss", + "resources/ts/fo/fo.ts", + ], + }), + stylelint({ + dev: false, + build: true, + cache: false, + chokidar: true, + quiet: false, + include: ["**/resources/**/*.scss", "**/resources/**/*.css"], + exclude: ["node_modules", "vendor"], + lintOnStart: true, + emitError: true, + emitWarning: true, + emitErrorAsWarning: false, + emitWarningAsError: true, + }), + eslint({ + cache: false, + extensions: ["js", "ts"], + include: "**/*.ts", + exclude: ["node_modules", "vendor"], + lintOnStart: true, + emitWarning: true, + emitError: true, + failOnWarning: false, + failOnError: false, + }), + vue({ + isProduction: process.env.NODE_ENV !== "local" ? true : false, + exclude: ["node_modules", "vendor"], + }), + legacy({ + targets: "last 3 version, not dead, >0.3%", + renderLegacyChunks: false, + }), + ], + resolve: { + extensions: ["*", ".js", ".ts", ".vue"], + alias: [ + { + find: "vue", + replacement: "vue/dist/vue.runtime.esm-bundler.js", + }, + { + find: "@", + replacement: "/resources/assets", + }, + { + find: "~", + replacement: path.resolve(__dirname, "./node_modules"), + }, + ], + }, +}); diff --git a/webpack.mix.js b/webpack.mix.js deleted file mode 100644 index f14a92c..0000000 --- a/webpack.mix.js +++ /dev/null @@ -1,100 +0,0 @@ -const path = require('path'); -const mix = require('laravel-mix'); - -require("laravel-mix-polyfill"); -require("laravel-mix-clean"); -require("laravel-mix-eslint"); -require("laravel-mix-stylelint"); - -const assetDir = "assets"; -const polyfill = { - enabled: true, - bugfixes: true, - useBuiltIns: "usage", - targets: "last 3 version, not dead, >0.3%", -}; - -mix.setPublicPath('public/build'); -mix.setResourceRoot('/build'); - -mix.webpackConfig({ - resolve: { - extensions: ["*", ".js", ".vue", ".ts"], - alias: { - "@": path.resolve("resources/assets"), - vue$: "vue/dist/vue.runtime.esm-bundler.js", - }, - }, - module: { - rules: [ - { - test: /\.ts$/, - loader: "ts-loader", - options: { - appendTsSuffixTo: [/\.vue$/], - }, - }, - { - test: /\.vue$/, - loader: "vue-loader", - options: { - esModule: true, - }, - }, - ], - }, -}); - -mix.options({ - fileLoaderDirs: { - fonts: `${assetDir}/fonts`, - images: `${assetDir}/images` - }, - postCss: [ - require("postcss-discard-comments")({ - removeAll: true, - }), - ], -}); - -mix.clean({ - cleanOnceBeforeBuildPatterns: [ - "css/*", - "js/*", - "assets/*", - ], -}); - -// * COMMON -mix.vue({ - runtimeOnly: true, - extractStyles: "css/v-extract.css", - globalStyles: false, - }) - .eslint({ - fix: true, - extensions: ["js", "ts"], - }) - .stylelint({ - configFile: ".stylelintrc.json", - files: ["**/*.scss"], - }) - .polyfill(polyfill) - .version() - .sourceMaps(false, "inline-source-map") - - // * BACKEND - .ts("resources/ts/back.ts", "js", { - transpileOnly: true, - }) - .sass("resources/sass/back.scss", "css") - - // * FRONTEND - .ts("resources/ts/front.ts", "js", { - transpileOnly: true, - }) - .sass("resources/sass/front.scss", "css"); - -// * Copy Blade Images Assets -mix.copyDirectory("resources/assets", "public/build/assets"); -