2024-12-12

This commit is contained in:
gcch 2024-12-12 10:36:51 +01:00
commit 0c39c95625
45 changed files with 827 additions and 319 deletions

View file

@ -18,8 +18,10 @@
"DERNIERE", "DERNIERE",
"echec", "echec",
"Ecoute", "Ecoute",
"Ecouteurs",
"Eles", "Eles",
"emet", "emet",
"Emetteurs",
"ENTETE", "ENTETE",
"epingle", "epingle",
"Epingle", "Epingle",
@ -29,6 +31,7 @@
"etats", "etats",
"ETATS", "ETATS",
"etendu", "etendu",
"Evenements",
"exts", "exts",
"Fenetre", "Fenetre",
"FENETRE", "FENETRE",
@ -56,6 +59,7 @@
"rafraichissement", "rafraichissement",
"rapprochee", "rapprochee",
"recalcul", "recalcul",
"reinitialise",
"renseignables", "renseignables",
"reponse", "reponse",
"requete", "requete",
@ -63,6 +67,7 @@
"selecteur", "selecteur",
"selecteurs", "selecteurs",
"Selectionne", "Selectionne",
"Selectionnee",
"Separees", "Separees",
"Simplifiee", "Simplifiee",
"souleve", "souleve",

View file

@ -1,6 +1,9 @@
- Page Panier - PAGE PANIER
- [-] Bouton « Réinitialiser » pour les Articles - [-] Bouton « Réinitialiser » pour les Articles
- [-] Bouton « Réinitialiser » pour les Adresses - [-] Bouton « Réinitialiser » pour les Adresses
- [ ] Sauvegarder la dernière adresse validée dans le LocalStorage
- VITE
- Récupérer les liens des fichiers JS depuis le manifeste dans les fichiers PHP
- Menu Mobile - Menu Mobile
- Reprendre pour suivre la maquette initiale - Reprendre pour suivre la maquette initiale
- PayPal à faire - PayPal à faire
@ -10,8 +13,9 @@
- Utiliser un polyfill pour BroadcastChannel - Utiliser un polyfill pour BroadcastChannel
- PAGE SHOP - PAGE SHOP
- [ ] Faire apparaître le menu des catégories de Produits quand on scroll vers le haut - [ ] Faire apparaître le menu des catégories de Produits quand on scroll vers le haut
- PAGE PANIER
- MÉTHODES DE LIVRAISON - MÉTHODES DE LIVRAISON
- [ ] Proposer la livraison à domicile en Belgique et en France pour le coût unique de 12 euros, quel que soit le montant de la commande - [ ] Proposer la livraison à domicile en Belgique et en France pour le coût unique de 8 euros, quel que soit le montant de la commande
--- ---

77
composer.lock generated
View file

@ -646,16 +646,16 @@
}, },
{ {
"name": "illuminate/collections", "name": "illuminate/collections",
"version": "v11.34.2", "version": "v11.35.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/collections.git", "url": "https://github.com/illuminate/collections.git",
"reference": "fd2103ddc121449a7926fc34a9d220e5b88183c1" "reference": "b8be9c0fedfc5be1524b290fed640d4b7d42c813"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/collections/zipball/fd2103ddc121449a7926fc34a9d220e5b88183c1", "url": "https://api.github.com/repos/illuminate/collections/zipball/b8be9c0fedfc5be1524b290fed640d4b7d42c813",
"reference": "fd2103ddc121449a7926fc34a9d220e5b88183c1", "reference": "b8be9c0fedfc5be1524b290fed640d4b7d42c813",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -675,6 +675,7 @@
}, },
"autoload": { "autoload": {
"files": [ "files": [
"functions.php",
"helpers.php" "helpers.php"
], ],
"psr-4": { "psr-4": {
@ -697,11 +698,11 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-11-27T14:51:56+00:00" "time": "2024-12-10T14:54:28+00:00"
}, },
{ {
"name": "illuminate/conditionable", "name": "illuminate/conditionable",
"version": "v11.34.2", "version": "v11.35.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/conditionable.git", "url": "https://github.com/illuminate/conditionable.git",
@ -747,7 +748,7 @@
}, },
{ {
"name": "illuminate/contracts", "name": "illuminate/contracts",
"version": "v11.34.2", "version": "v11.35.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/contracts.git", "url": "https://github.com/illuminate/contracts.git",
@ -795,7 +796,7 @@
}, },
{ {
"name": "illuminate/macroable", "name": "illuminate/macroable",
"version": "v11.34.2", "version": "v11.35.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/macroable.git", "url": "https://github.com/illuminate/macroable.git",
@ -841,16 +842,16 @@
}, },
{ {
"name": "illuminate/support", "name": "illuminate/support",
"version": "v11.34.2", "version": "v11.35.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/support.git", "url": "https://github.com/illuminate/support.git",
"reference": "2b718a86571baed50fdc5d5748a846c2e58e07eb" "reference": "bc363403d9ed3214754a0501e33c05d2afcfd474"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/support/zipball/2b718a86571baed50fdc5d5748a846c2e58e07eb", "url": "https://api.github.com/repos/illuminate/support/zipball/bc363403d9ed3214754a0501e33c05d2afcfd474",
"reference": "2b718a86571baed50fdc5d5748a846c2e58e07eb", "reference": "bc363403d9ed3214754a0501e33c05d2afcfd474",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -873,11 +874,12 @@
"spatie/once": "*" "spatie/once": "*"
}, },
"suggest": { "suggest": {
"illuminate/filesystem": "Required to use the composer class (^11.0).", "illuminate/filesystem": "Required to use the Composer class (^11.0).",
"laravel/serializable-closure": "Required to use the once function (^1.3).", "laravel/serializable-closure": "Required to use the once function (^1.3).",
"league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).",
"league/uri": "Required to use the Uri class (^7.5.1).",
"ramsey/uuid": "Required to use Str::uuid() (^4.7).", "ramsey/uuid": "Required to use Str::uuid() (^4.7).",
"symfony/process": "Required to use the composer class (^7.0).", "symfony/process": "Required to use the Composer class (^7.0).",
"symfony/uid": "Required to use Str::ulid() (^7.0).", "symfony/uid": "Required to use Str::ulid() (^7.0).",
"symfony/var-dumper": "Required to use the dd function (^7.0).", "symfony/var-dumper": "Required to use the dd function (^7.0).",
"vlucas/phpdotenv": "Required to use the Env class and env helper (^5.6.1)." "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.6.1)."
@ -913,7 +915,7 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-11-27T14:58:17+00:00" "time": "2024-12-11T23:23:18+00:00"
}, },
{ {
"name": "laravel/helpers", "name": "laravel/helpers",
@ -3248,16 +3250,16 @@
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
"version": "v3.17.0", "version": "v3.17.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/twigphp/Twig.git", "url": "https://github.com/twigphp/Twig.git",
"reference": "d3a64b742a5e74c57e3964d766e1032982145872" "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/d3a64b742a5e74c57e3964d766e1032982145872", "url": "https://api.github.com/repos/twigphp/Twig/zipball/677ef8da6497a03048192aeeb5aa3018e379ac71",
"reference": "d3a64b742a5e74c57e3964d766e1032982145872", "reference": "677ef8da6497a03048192aeeb5aa3018e379ac71",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3312,7 +3314,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/twigphp/Twig/issues", "issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.17.0" "source": "https://github.com/twigphp/Twig/tree/v3.17.1"
}, },
"funding": [ "funding": [
{ {
@ -3324,7 +3326,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-12-10T15:19:11+00:00" "time": "2024-12-12T09:58:10+00:00"
}, },
{ {
"name": "vlucas/phpdotenv", "name": "vlucas/phpdotenv",
@ -3630,15 +3632,15 @@
}, },
{ {
"name": "wpackagist-plugin/wp-mail-smtp", "name": "wpackagist-plugin/wp-mail-smtp",
"version": "4.2.0", "version": "4.3.0",
"source": { "source": {
"type": "svn", "type": "svn",
"url": "https://plugins.svn.wordpress.org/wp-mail-smtp/", "url": "https://plugins.svn.wordpress.org/wp-mail-smtp/",
"reference": "tags/4.2.0" "reference": "tags/4.3.0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://downloads.wordpress.org/plugin/wp-mail-smtp.4.2.0.zip" "url": "https://downloads.wordpress.org/plugin/wp-mail-smtp.4.3.0.zip"
}, },
"require": { "require": {
"composer/installers": "^1.0 || ^2.0" "composer/installers": "^1.0 || ^2.0"
@ -3844,12 +3846,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git", "url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "7a60033d5e61698bf3ed203afb4f4a2323801990" "reference": "1fd8b74024b8938b25df3a9971c7ad9d57d4f592"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/7a60033d5e61698bf3ed203afb4f4a2323801990", "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1fd8b74024b8938b25df3a9971c7ad9d57d4f592",
"reference": "7a60033d5e61698bf3ed203afb4f4a2323801990", "reference": "1fd8b74024b8938b25df3a9971c7ad9d57d4f592",
"shasum": "" "shasum": ""
}, },
"conflict": { "conflict": {
@ -3990,9 +3992,9 @@
"dolibarr/dolibarr": "<19.0.2", "dolibarr/dolibarr": "<19.0.2",
"dompdf/dompdf": "<2.0.4", "dompdf/dompdf": "<2.0.4",
"doublethreedigital/guest-entries": "<3.1.2", "doublethreedigital/guest-entries": "<3.1.2",
"drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.2.10|>=10.3,<10.3.6|>=11,<11.0.5", "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8",
"drupal/core-recommended": ">=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8",
"drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8",
"duncanmcclean/guest-entries": "<3.1.2", "duncanmcclean/guest-entries": "<3.1.2",
"dweeves/magmi": "<=0.7.24", "dweeves/magmi": "<=0.7.24",
"ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2",
@ -4253,6 +4255,7 @@
"neos/swiftmailer": "<5.4.5", "neos/swiftmailer": "<5.4.5",
"netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15",
"nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6",
"nette/database": "<=3.2.4",
"nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13",
"nilsteampassnet/teampass": "<3.0.10", "nilsteampassnet/teampass": "<3.0.10",
"nonfiction/nterchange": "<4.1.1", "nonfiction/nterchange": "<4.1.1",
@ -4389,7 +4392,7 @@
"sensiolabs/connect": "<4.2.3", "sensiolabs/connect": "<4.2.3",
"serluck/phpwhois": "<=4.2.6", "serluck/phpwhois": "<=4.2.6",
"sfroemken/url_redirect": "<=1.2.1", "sfroemken/url_redirect": "<=1.2.1",
"sheng/yiicms": "<=1.2", "sheng/yiicms": "<1.2.1",
"shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5",
"shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5",
"shopware/production": "<=6.3.5.2", "shopware/production": "<=6.3.5.2",
@ -4686,20 +4689,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-12-09T21:04:47+00:00" "time": "2024-12-10T21:04:50+00:00"
}, },
{ {
"name": "squizlabs/php_codesniffer", "name": "squizlabs/php_codesniffer",
"version": "3.11.1", "version": "3.11.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
"reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87" "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/1368f4a58c3c52114b86b1abe8f4098869cb0079",
"reference": "19473c30efe4f7b3cd42522d0b2e6e7f243c6f87", "reference": "1368f4a58c3c52114b86b1abe8f4098869cb0079",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4766,7 +4769,7 @@
"type": "open_collective" "type": "open_collective"
} }
], ],
"time": "2024-11-16T12:02:36+00:00" "time": "2024-12-11T16:04:26+00:00"
}, },
{ {
"name": "szepeviktor/phpstan-wordpress", "name": "szepeviktor/phpstan-wordpress",

View file

@ -10,7 +10,7 @@ use function Env\env;
Config::define("SAVEQUERIES", true); Config::define("SAVEQUERIES", true);
Config::define("WP_DEBUG", true); Config::define("WP_DEBUG", true);
Config::define("WP_DEBUG_DISPLAY", true); Config::define("WP_DEBUG_DISPLAY", false);
Config::define("WP_DEBUG_LOG", env("WP_DEBUG_LOG") ?? true); Config::define("WP_DEBUG_LOG", env("WP_DEBUG_LOG") ?? true);
Config::define("WP_DISABLE_FATAL_ERROR_HANDLER", true); Config::define("WP_DISABLE_FATAL_ERROR_HANDLER", true);
Config::define("SCRIPT_DEBUG", true); Config::define("SCRIPT_DEBUG", true);

View file

@ -79,7 +79,7 @@
"https://plugins.dprint.dev/json-0.19.4.wasm", "https://plugins.dprint.dev/json-0.19.4.wasm",
"https://plugins.dprint.dev/markdown-0.17.8.wasm", "https://plugins.dprint.dev/markdown-0.17.8.wasm",
"https://plugins.dprint.dev/toml-0.6.3.wasm", "https://plugins.dprint.dev/toml-0.6.3.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.11.0.wasm", "https://plugins.dprint.dev/g-plane/malva-v0.11.1.wasm",
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.18.0.wasm", "https://plugins.dprint.dev/g-plane/markup_fmt-v0.18.0.wasm",
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm", "https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm",
"https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf" "https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf"

View file

@ -14,9 +14,10 @@
}, },
"dependencies": { "dependencies": {
"@mobily/ts-belt": "4.0.0-rc.5", "@mobily/ts-belt": "4.0.0-rc.5",
"@sentry/browser": "8.43.0", "@sentry/browser": "8.44.0",
"@swan-io/boxed": "^3.1.2", "@swan-io/boxed": "^3.1.2",
"a11y-dialog": "^8.1.1", "a11y-dialog": "^8.1.1",
"lit-html": "^3.2.1",
"optics-ts": "^2.4.1", "optics-ts": "^2.4.1",
"purify-ts": "^2.1.0", "purify-ts": "^2.1.0",
"ts-pattern": "^5.5.0", "ts-pattern": "^5.5.0",
@ -27,20 +28,20 @@
"@eslint/js": "^9.16.0", "@eslint/js": "^9.16.0",
"@prettier/plugin-php": "^0.22.2", "@prettier/plugin-php": "^0.22.2",
"@prettier/plugin-xml": "^3.4.1", "@prettier/plugin-xml": "^3.4.1",
"@sentry/core": "^8.43.0", "@sentry/core": "^8.44.0",
"@swc/cli": "0.5.2", "@swc/cli": "0.5.2",
"@types/eslint__js": "^8.42.3", "@types/eslint__js": "^8.42.3",
"@types/node": "^22.10.1", "@types/node": "^22.10.2",
"@vitejs/plugin-legacy": "^6.0.0", "@vitejs/plugin-legacy": "^6.0.0",
"better-typescript-lib": "^2.10.0", "better-typescript-lib": "^2.10.0",
"browserslist": "^4.24.2", "browserslist": "^4.24.2",
"eslint": "^9.16.0", "eslint": "^9.16.0",
"eslint-plugin-oxlint": "^0.14.1", "eslint-plugin-oxlint": "^0.15.0",
"eslint-plugin-perfectionist": "^4.2.0", "eslint-plugin-perfectionist": "^4.3.0",
"fdir": "^6.4.2", "fdir": "^6.4.2",
"globals": "^15.13.0", "globals": "^15.13.0",
"knip": "^5.39.2", "knip": "^5.39.4",
"oxlint": "^0.14.1", "oxlint": "^0.15.0",
"picomatch": "^4.0.2", "picomatch": "^4.0.2",
"prettier": "^3.4.2", "prettier": "^3.4.2",
"prettier-plugin-pkg": "^0.18.1", "prettier-plugin-pkg": "^0.18.1",

366
pnpm-lock.yaml generated
View file

@ -12,14 +12,17 @@ importers:
specifier: 4.0.0-rc.5 specifier: 4.0.0-rc.5
version: 4.0.0-rc.5 version: 4.0.0-rc.5
'@sentry/browser': '@sentry/browser':
specifier: 8.43.0 specifier: 8.44.0
version: 8.43.0 version: 8.44.0
'@swan-io/boxed': '@swan-io/boxed':
specifier: ^3.1.2 specifier: ^3.1.2
version: 3.1.2(typescript@5.8.0-dev.20241122) version: 3.1.2(typescript@5.8.0-dev.20241122)
a11y-dialog: a11y-dialog:
specifier: ^8.1.1 specifier: ^8.1.1
version: 8.1.1 version: 8.1.1
lit-html:
specifier: ^3.2.1
version: 3.2.1
optics-ts: optics-ts:
specifier: ^2.4.1 specifier: ^2.4.1
version: 2.4.1 version: 2.4.1
@ -46,8 +49,8 @@ importers:
specifier: ^3.4.1 specifier: ^3.4.1
version: 3.4.1(prettier@3.4.2) version: 3.4.1(prettier@3.4.2)
'@sentry/core': '@sentry/core':
specifier: ^8.43.0 specifier: ^8.44.0
version: 8.43.0 version: 8.44.0
'@swc/cli': '@swc/cli':
specifier: 0.5.2 specifier: 0.5.2
version: 0.5.2(@swc/core@1.9.1) version: 0.5.2(@swc/core@1.9.1)
@ -55,11 +58,11 @@ importers:
specifier: ^8.42.3 specifier: ^8.42.3
version: 8.42.3 version: 8.42.3
'@types/node': '@types/node':
specifier: ^22.10.1 specifier: ^22.10.2
version: 22.10.1 version: 22.10.2
'@vitejs/plugin-legacy': '@vitejs/plugin-legacy':
specifier: ^6.0.0 specifier: ^6.0.0
version: 6.0.0(terser@5.36.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)) version: 6.0.0(terser@5.36.0)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))
better-typescript-lib: better-typescript-lib:
specifier: ^2.10.0 specifier: ^2.10.0
version: 2.10.0(typescript@5.8.0-dev.20241122) version: 2.10.0(typescript@5.8.0-dev.20241122)
@ -70,11 +73,11 @@ importers:
specifier: ^9.16.0 specifier: ^9.16.0
version: 9.16.0(jiti@2.4.1) version: 9.16.0(jiti@2.4.1)
eslint-plugin-oxlint: eslint-plugin-oxlint:
specifier: ^0.14.1 specifier: ^0.15.0
version: 0.14.1 version: 0.15.0
eslint-plugin-perfectionist: eslint-plugin-perfectionist:
specifier: ^4.2.0 specifier: ^4.3.0
version: 4.2.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122) version: 4.3.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
fdir: fdir:
specifier: ^6.4.2 specifier: ^6.4.2
version: 6.4.2(picomatch@4.0.2) version: 6.4.2(picomatch@4.0.2)
@ -82,11 +85,11 @@ importers:
specifier: ^15.13.0 specifier: ^15.13.0
version: 15.13.0 version: 15.13.0
knip: knip:
specifier: ^5.39.2 specifier: ^5.39.4
version: 5.39.2(@types/node@22.10.1)(typescript@5.8.0-dev.20241122) version: 5.39.4(@types/node@22.10.2)(typescript@5.8.0-dev.20241122)
oxlint: oxlint:
specifier: ^0.14.1 specifier: ^0.15.0
version: 0.14.1 version: 0.15.0
picomatch: picomatch:
specifier: ^4.0.2 specifier: ^4.0.2
version: 4.0.2 version: 4.0.2
@ -128,19 +131,19 @@ importers:
version: 8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122) version: 8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
vite: vite:
specifier: ^6.0.3 specifier: ^6.0.3
version: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0) version: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)
vite-plugin-manifest-sri: vite-plugin-manifest-sri:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.0 version: 0.2.0
vite-plugin-node-polyfills: vite-plugin-node-polyfills:
specifier: ^0.22.0 specifier: ^0.22.0
version: 0.22.0(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)) version: 0.22.0(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))
vite-plugin-valibot-env: vite-plugin-valibot-env:
specifier: ^0.9.2 specifier: ^0.9.2
version: 0.9.2(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)) version: 0.9.2(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: ^5.1.4 specifier: ^5.1.4
version: 5.1.4(typescript@5.8.0-dev.20241122)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)) version: 5.1.4(typescript@5.8.0-dev.20241122)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))
wp-types: wp-types:
specifier: ^4.67.0 specifier: ^4.67.0
version: 4.67.0 version: 4.67.0
@ -1008,8 +1011,8 @@ packages:
resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
engines: {node: '>=18.18'} engines: {node: '>=18.18'}
'@jridgewell/gen-mapping@0.3.5': '@jridgewell/gen-mapping@0.3.8':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
'@jridgewell/resolve-uri@3.1.2': '@jridgewell/resolve-uri@3.1.2':
@ -1145,43 +1148,43 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
'@oxlint/darwin-arm64@0.14.1': '@oxlint/darwin-arm64@0.15.0':
resolution: {integrity: sha512-P76G8QCHOkLm+8HYk2/5uR4sPnx6uxE5Y8ik8dgCV0XjrNR+/Sg8v2aQ1BmWeEnPGkBXTt1VSECO9BdT1HVeDw==} resolution: {integrity: sha512-Y4yFRquejyuI/3dyBxLvc8lbwM8Hf/8e0YH9QwQPD9+dgzgOnF818/+OKVE4bDH/V7nWyw4hIQQibMcPvg038g==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@oxlint/darwin-x64@0.14.1': '@oxlint/darwin-x64@0.15.0':
resolution: {integrity: sha512-bFsNkDtiDEhBKsX2DGLGCVhaRSDP2VgnNHOejjVnLK2LURvOglHMrp4NXxxtHArPAfiP6oezja6q8GmsQbcZ4w==} resolution: {integrity: sha512-l0NksXD2HSzb/u7RXH1kPNtwOXevkvS4vH7pMDiSrfIbtZTx10YgiLy5zFkFbipJRLmIZUdG+9JEjepsy9S3Ig==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@oxlint/linux-arm64-gnu@0.14.1': '@oxlint/linux-arm64-gnu@0.15.0':
resolution: {integrity: sha512-OWJY1qxJgsaLyQvh97MdpI2Mr8FD90ssGw8o0rG63lWIc3PJESmq9NKU0ZwwUbPbbEpKmwdG3aiZRjh4G1k0cQ==} resolution: {integrity: sha512-Yt2LGRfMwPXrMelEqbbkWFcL50ulAUUqMrfcNYB+H/9S8KF4PSMDRm642VV4949xC3XzkjoL3ZMyKQQKMRWC+Q==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@oxlint/linux-arm64-musl@0.14.1': '@oxlint/linux-arm64-musl@0.15.0':
resolution: {integrity: sha512-GPbggyGQV4+5JzpA7l+1liPHkzCDB9ZyPLcHpRtNJJfTQ60JnBww4l3eR7LCukiAor6Sxmlbl+t1OZGjL3zUUA==} resolution: {integrity: sha512-+H6CIbejZyE3sc3StoYImqZL3z2zNbv5L547ATLHGyQ5b2JrXMuJ/lqIaNdAa24BehJ6g+/swBIIE5Pk65K3PA==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@oxlint/linux-x64-gnu@0.14.1': '@oxlint/linux-x64-gnu@0.15.0':
resolution: {integrity: sha512-4ug2y9fEa2MB4wAFfITkm1oJ2m14YjWQaKxKN9bRazPng2k3wivVAvwc6tKj866HftZxXo3FlOIrE1YP6BxcSw==} resolution: {integrity: sha512-e/KSj4fg5EFdK/bJLJjGRzaw2KZdYgr2mTt3k9HF9YIGl0UnBoX5h+q0hJ9scDTNNailT8qytvOjuiUhyJpAPA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@oxlint/linux-x64-musl@0.14.1': '@oxlint/linux-x64-musl@0.15.0':
resolution: {integrity: sha512-bsG5ZxFWKml6BQMHbusvNsEU3O0a5BurlrtdXyxlOBZyrWyG6v3pcXM+NX4YT8gaeoK71iCH5I+ymwI9KOwO/w==} resolution: {integrity: sha512-lOXNTYw7kelNkJPQlrLlk5E8f/ROZFcGOGR5VKHCI+/53QTX/WY5kMo7JOaRyJ+jnNdeN1HW70oRQPjtAujjxw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@oxlint/win32-arm64@0.14.1': '@oxlint/win32-arm64@0.15.0':
resolution: {integrity: sha512-Soc3kRTqz++kleXz+Y4IlfiGY+cwXlOiLCVwcRMAnY+TSaP4h2tPXN/cbOypsE7PPq2/kk7JPGUaEKZ/i4G23A==} resolution: {integrity: sha512-Hms4Ld6uAOKpbLq27MUqQzffxd71+pK96mzK3YULrkASzIa7AZdtNlRBqfqVRuXCiuxPxT6PhfcriURwsvD/YA==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@oxlint/win32-x64@0.14.1': '@oxlint/win32-x64@0.15.0':
resolution: {integrity: sha512-qyjlv5XPxKJ1g9F4ZpNP0m/I2tgHj4lebmyAveaLos3RZWut983WaK3abq4Mr74mIiwfyLA67/m2khG5aXYN2Q==} resolution: {integrity: sha512-AF0t15GJLoVcMqvbpHwYFHx2o9HkMuEt6GEipPMZ9gaNx1yp6NrP655jywNzhbKHSd6wxSY+CH7aRI9QjdtG1w==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1393,28 +1396,28 @@ packages:
'@sec-ant/readable-stream@0.4.1': '@sec-ant/readable-stream@0.4.1':
resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==}
'@sentry-internal/browser-utils@8.43.0': '@sentry-internal/browser-utils@8.44.0':
resolution: {integrity: sha512-5WhJZ3SA5sZVDBwOsChDd5JCzYcwBX7sEqBqEcm3pFru6TUihEnFIJmDIbreIyrQMwUhs3dTxnfnidgjr5z1Ag==} resolution: {integrity: sha512-kmSRdS1r2G3i0wTJJv69uMZqf/UwP3pVqrCq/0hvNaF4L5v+vrEOKTDZghDvCqutEqOFXI0V/l9SuDpgjElcZQ==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sentry-internal/feedback@8.43.0': '@sentry-internal/feedback@8.44.0':
resolution: {integrity: sha512-rcGR2kzFu4vLXBQbI9eGJwjyToyjl36O2q/UKbiZBNJ5IFtDvKRLke6jIHq/YqiHPfFGpVtq5M/lYduDfA/eaQ==} resolution: {integrity: sha512-x/7dilh9VRpsPRgx+1kT3Aulgj0X02GF+JfNeaFA2p786+2jBHTupGBu7AGiq1b1YRbDefkFXQxS1MaeqEEeOg==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sentry-internal/replay-canvas@8.43.0': '@sentry-internal/replay-canvas@8.44.0':
resolution: {integrity: sha512-rL8G7E1GtozH8VNalRrBQNjYDJ5ChWS/vpQI5hUG11PZfvQFXEVatLvT3uO2l0xIlHm4idTsHOSLTe/usxnogQ==} resolution: {integrity: sha512-hFCUHDekuJknzVCu5JnDkgUuOTJbwu82RR+VfbT+2lfIpZoT+gH44LzSH5bQUPXgmznRae4OYHblWAPue9U1Bw==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sentry-internal/replay@8.43.0': '@sentry-internal/replay@8.44.0':
resolution: {integrity: sha512-geV5/zejLfGGwWHjylzrb1w8NI3U37GMG9/53nmv13FmTXUDF5XF2lh41KXFVYwvp7Ha4bd1FRQ9IU9YtBWskw==} resolution: {integrity: sha512-ZPX3Bg8ShuWZZzL5lw/fHjHdRhxxhhdzsVXq2jItg3CPvuO7oQofZsG4po6vgXTlj+fdtjUMQanj/6Ah4+jwsQ==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sentry/browser@8.43.0': '@sentry/browser@8.44.0':
resolution: {integrity: sha512-LGvLLnfmR8+AEgFmd7Q7KHiOTiV0P1Lvio2ENDELhEqJOIiICauttibVmig+AW02qg4kMeywvleMsUYaZv2RVA==} resolution: {integrity: sha512-s12u8rz2aYjiWPzoE7StL7fiCS2Z5p5BYmk9bhGDqDWyAPVEVZFUB3u/hwcPUF4yDAroWCbsNzTiBwr813zihg==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sentry/core@8.43.0': '@sentry/core@8.44.0':
resolution: {integrity: sha512-ktyovtjkTMNud+kC/XfqHVCoQKreIKgx/hgeRvzPwuPyd1t1KzYmRL3DBkbcWVnyOPpVTHn+RsEI1eRcVYHtvw==} resolution: {integrity: sha512-C43eW9Mr1WGpxCeI6pXUl7TeTwR2TwWhuU8wHx2s5eoATDQwbjz9l+JXXjVJf5YXXEwNOZL2WAx/f0diLA5rTQ==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
'@sindresorhus/is@5.6.0': '@sindresorhus/is@5.6.0':
@ -1548,8 +1551,11 @@ packages:
'@types/json-schema@7.0.15': '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@22.10.1': '@types/node@22.10.2':
resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
'@types/trusted-types@2.0.7':
resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
'@typescript-eslint/eslint-plugin@8.18.0': '@typescript-eslint/eslint-plugin@8.18.0':
resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==}
@ -1834,12 +1840,16 @@ packages:
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
call-bound@1.0.2:
resolution: {integrity: sha512-0lk0PHFe/uz0vl527fG9CgdE9WdafjDbCXvBbs+LUv000TVt2Jjhqbs4Jwm8gz070w8xXyEAxrPOMullsxXeGg==}
engines: {node: '>= 0.4'}
callsites@3.1.0: callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
caniuse-lite@1.0.30001687: caniuse-lite@1.0.30001688:
resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} resolution: {integrity: sha512-Nmqpru91cuABu/DTCXbM2NSRHzM2uVHfPnhJ/1zEAJx/ILBRVmz3pzH4N7DZqbdG0gWClsCC05Oj0mJ/1AWMbA==}
chalk@4.1.2: chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@ -2020,8 +2030,8 @@ packages:
easy-table@1.2.0: easy-table@1.2.0:
resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==}
electron-to-chromium@1.5.72: electron-to-chromium@1.5.73:
resolution: {integrity: sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==} resolution: {integrity: sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==}
elliptic@6.6.1: elliptic@6.6.1:
resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
@ -2048,6 +2058,10 @@ packages:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
engines: {node: '>= 0.4'}
esbuild@0.24.0: esbuild@0.24.0:
resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -2061,11 +2075,11 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
eslint-plugin-oxlint@0.14.1: eslint-plugin-oxlint@0.15.0:
resolution: {integrity: sha512-P1IrDS3sRl/2AJwvwJmW1EnsF0AIzUHii8haSkWj8xm5+BW/Gux8S+SXu8uqgJoKkzvV+X7lDxPm4ao4C+COBw==} resolution: {integrity: sha512-W2bJu+w9jYPb3x9MQleJuF1iUSIHWLCR0ChknPgSuz8ZjQgrNlSt5SBYl9FtdOZ09wFzU/CvvIYs86EhhexrdA==}
eslint-plugin-perfectionist@4.2.0: eslint-plugin-perfectionist@4.3.0:
resolution: {integrity: sha512-hEMFx5xfSc/0OLZXJhSaLUKkFxATuRf4yL2iVfxEcxkkb17DfoLZY9eH960dPSw5uB7o+4avqP3rtkNp1Vwo7w==} resolution: {integrity: sha512-8tQ/wn1dFelul2WoXL/NQOEwvWO8H4Vjmsqpt3fDQrfgybr8kQ5Vgb9BQyVRB33ywQqjUApsiwi5Ci7grMPPRA==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies: peerDependencies:
eslint: '>=8.0.0' eslint: '>=8.0.0'
@ -2233,8 +2247,8 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
get-intrinsic@1.2.5: get-intrinsic@1.2.6:
resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
get-stream@6.0.1: get-stream@6.0.1:
@ -2471,6 +2485,11 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
hasBin: true hasBin: true
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
hasBin: true
json-buffer@3.0.1: json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@ -2505,8 +2524,8 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
knip@5.39.2: knip@5.39.4:
resolution: {integrity: sha512-BuvuWRllLWV/r2G4m9ggNH+DZ6gouP/dhtJPXVlMbWNF++w9/EfrF6k2g7YBKCwjzCC+PXmYtpH8S2t8RjnY4Q==} resolution: {integrity: sha512-IiNFwfe8xDFwuGzBY8lKvrY3hhR1I81iCaJ8nd85cxT7LxB7cDd73WP3MrzZylE9Vec1HhC0YLFiAL7jh5OYEQ==}
engines: {node: '>=18.6.0'} engines: {node: '>=18.6.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -2526,6 +2545,9 @@ packages:
linguist-languages@7.27.0: linguist-languages@7.27.0:
resolution: {integrity: sha512-Wzx/22c5Jsv2ag+uKy+ITanGA5hzvBZngrNGDXLTC7ZjGM6FLCYGgomauTkxNJeP9of353OM0pWqngYA180xgw==} resolution: {integrity: sha512-Wzx/22c5Jsv2ag+uKy+ITanGA5hzvBZngrNGDXLTC7ZjGM6FLCYGgomauTkxNJeP9of353OM0pWqngYA180xgw==}
lit-html@3.2.1:
resolution: {integrity: sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==}
locate-path@6.0.0: locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -2557,6 +2579,10 @@ packages:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'} engines: {node: '>=10'}
math-intrinsics@1.0.0:
resolution: {integrity: sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==}
engines: {node: '>= 0.4'}
mathml-tag-names@2.1.3: mathml-tag-names@2.1.3:
resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==}
@ -2690,8 +2716,8 @@ packages:
os-browserify@0.3.0: os-browserify@0.3.0:
resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==}
oxlint@0.14.1: oxlint@0.15.0:
resolution: {integrity: sha512-FwcjPfQu806ibSv73Y9tUM8ezUyd811dp3JwEEOC/dIAgd93egRsRNnFauuAq/WuTjIDv73tbr9hB8MziH31Eg==} resolution: {integrity: sha512-hIED9mcs8c0dnNuQEzXRPXOo09HoOVh60LSD48EQHwcHlcFheMfW5OkLWQvinDkG/1n5qt+zWopQGaKFgmtXPw==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
hasBin: true hasBin: true
@ -3150,8 +3176,20 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'} engines: {node: '>=8'}
side-channel@1.0.6: side-channel-list@1.0.0:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
side-channel-map@1.0.1:
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines: {node: '>= 0.4'}
side-channel-weakmap@1.0.2:
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines: {node: '>= 0.4'}
side-channel@1.1.0:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
signal-exit@3.0.7: signal-exit@3.0.7:
@ -3202,8 +3240,8 @@ packages:
stream-http@3.2.0: stream-http@3.2.0:
resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==}
streamx@2.21.0: streamx@2.21.1:
resolution: {integrity: sha512-Qz6MsDZXJ6ur9u+b+4xCG18TluU7PGlRfXVAAjNiGsFrBUt/ioyLkxbFaKJygoPs+/kW4VyBj0bSj89Qu0IGyg==} resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==}
string-width@4.2.3: string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@ -3600,14 +3638,14 @@ packages:
peerDependencies: peerDependencies:
zod: ^3.18.0 zod: ^3.18.0
zod@3.24.0: zod@3.24.1:
resolution: {integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==} resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==}
snapshots: snapshots:
'@ampproject/remapping@2.3.0': '@ampproject/remapping@2.3.0':
dependencies: dependencies:
'@jridgewell/gen-mapping': 0.3.5 '@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
'@babel/code-frame@7.26.2': '@babel/code-frame@7.26.2':
@ -3642,9 +3680,9 @@ snapshots:
dependencies: dependencies:
'@babel/parser': 7.26.3 '@babel/parser': 7.26.3
'@babel/types': 7.26.3 '@babel/types': 7.26.3
'@jridgewell/gen-mapping': 0.3.5 '@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
jsesc: 3.0.2 jsesc: 3.1.0
'@babel/helper-annotate-as-pure@7.25.9': '@babel/helper-annotate-as-pure@7.25.9':
dependencies: dependencies:
@ -4502,7 +4540,7 @@ snapshots:
'@humanwhocodes/retry@0.4.1': {} '@humanwhocodes/retry@0.4.1': {}
'@jridgewell/gen-mapping@0.3.5': '@jridgewell/gen-mapping@0.3.8':
dependencies: dependencies:
'@jridgewell/set-array': 1.2.1 '@jridgewell/set-array': 1.2.1
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
@ -4514,7 +4552,7 @@ snapshots:
'@jridgewell/source-map@0.3.6': '@jridgewell/source-map@0.3.6':
dependencies: dependencies:
'@jridgewell/gen-mapping': 0.3.5 '@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
'@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/sourcemap-codec@1.5.0': {}
@ -4606,28 +4644,28 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.17.1 fastq: 1.17.1
'@oxlint/darwin-arm64@0.14.1': '@oxlint/darwin-arm64@0.15.0':
optional: true optional: true
'@oxlint/darwin-x64@0.14.1': '@oxlint/darwin-x64@0.15.0':
optional: true optional: true
'@oxlint/linux-arm64-gnu@0.14.1': '@oxlint/linux-arm64-gnu@0.15.0':
optional: true optional: true
'@oxlint/linux-arm64-musl@0.14.1': '@oxlint/linux-arm64-musl@0.15.0':
optional: true optional: true
'@oxlint/linux-x64-gnu@0.14.1': '@oxlint/linux-x64-gnu@0.15.0':
optional: true optional: true
'@oxlint/linux-x64-musl@0.14.1': '@oxlint/linux-x64-musl@0.15.0':
optional: true optional: true
'@oxlint/win32-arm64@0.14.1': '@oxlint/win32-arm64@0.15.0':
optional: true optional: true
'@oxlint/win32-x64@0.14.1': '@oxlint/win32-x64@0.15.0':
optional: true optional: true
'@parcel/watcher-android-arm64@2.5.0': '@parcel/watcher-android-arm64@2.5.0':
@ -4777,33 +4815,33 @@ snapshots:
'@sec-ant/readable-stream@0.4.1': {} '@sec-ant/readable-stream@0.4.1': {}
'@sentry-internal/browser-utils@8.43.0': '@sentry-internal/browser-utils@8.44.0':
dependencies: dependencies:
'@sentry/core': 8.43.0 '@sentry/core': 8.44.0
'@sentry-internal/feedback@8.43.0': '@sentry-internal/feedback@8.44.0':
dependencies: dependencies:
'@sentry/core': 8.43.0 '@sentry/core': 8.44.0
'@sentry-internal/replay-canvas@8.43.0': '@sentry-internal/replay-canvas@8.44.0':
dependencies: dependencies:
'@sentry-internal/replay': 8.43.0 '@sentry-internal/replay': 8.44.0
'@sentry/core': 8.43.0 '@sentry/core': 8.44.0
'@sentry-internal/replay@8.43.0': '@sentry-internal/replay@8.44.0':
dependencies: dependencies:
'@sentry-internal/browser-utils': 8.43.0 '@sentry-internal/browser-utils': 8.44.0
'@sentry/core': 8.43.0 '@sentry/core': 8.44.0
'@sentry/browser@8.43.0': '@sentry/browser@8.44.0':
dependencies: dependencies:
'@sentry-internal/browser-utils': 8.43.0 '@sentry-internal/browser-utils': 8.44.0
'@sentry-internal/feedback': 8.43.0 '@sentry-internal/feedback': 8.44.0
'@sentry-internal/replay': 8.43.0 '@sentry-internal/replay': 8.44.0
'@sentry-internal/replay-canvas': 8.43.0 '@sentry-internal/replay-canvas': 8.44.0
'@sentry/core': 8.43.0 '@sentry/core': 8.44.0
'@sentry/core@8.43.0': {} '@sentry/core@8.44.0': {}
'@sindresorhus/is@5.6.0': {} '@sindresorhus/is@5.6.0': {}
@ -4914,10 +4952,12 @@ snapshots:
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
'@types/node@22.10.1': '@types/node@22.10.2':
dependencies: dependencies:
undici-types: 6.20.0 undici-types: 6.20.0
'@types/trusted-types@2.0.7': {}
'@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122))(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)': '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122))(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
@ -4995,7 +5035,7 @@ snapshots:
'@typescript-eslint/types': 8.18.0 '@typescript-eslint/types': 8.18.0
eslint-visitor-keys: 4.2.0 eslint-visitor-keys: 4.2.0
'@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))': '@vitejs/plugin-legacy@6.0.0(terser@5.36.0)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0))':
dependencies: dependencies:
'@babel/core': 7.26.0 '@babel/core': 7.26.0
'@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-env': 7.26.0(@babel/core@7.26.0)
@ -5006,7 +5046,7 @@ snapshots:
regenerator-runtime: 0.14.1 regenerator-runtime: 0.14.1
systemjs: 6.15.1 systemjs: 6.15.1
terser: 5.36.0 terser: 5.36.0
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0) vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -5285,8 +5325,8 @@ snapshots:
browserslist@4.24.2: browserslist@4.24.2:
dependencies: dependencies:
caniuse-lite: 1.0.30001687 caniuse-lite: 1.0.30001688
electron-to-chromium: 1.5.72 electron-to-chromium: 1.5.73
node-releases: 2.0.19 node-releases: 2.0.19
update-browserslist-db: 1.1.1(browserslist@4.24.2) update-browserslist-db: 1.1.1(browserslist@4.24.2)
@ -5326,12 +5366,17 @@ snapshots:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.1 call-bind-apply-helpers: 1.0.1
es-define-property: 1.0.1 es-define-property: 1.0.1
get-intrinsic: 1.2.5 get-intrinsic: 1.2.6
set-function-length: 1.2.2 set-function-length: 1.2.2
call-bound@1.0.2:
dependencies:
call-bind: 1.0.8
get-intrinsic: 1.2.6
callsites@3.1.0: {} callsites@3.1.0: {}
caniuse-lite@1.0.30001687: {} caniuse-lite@1.0.30001688: {}
chalk@4.1.2: chalk@4.1.2:
dependencies: dependencies:
@ -5521,7 +5566,7 @@ snapshots:
optionalDependencies: optionalDependencies:
wcwidth: 1.0.1 wcwidth: 1.0.1
electron-to-chromium@1.5.72: {} electron-to-chromium@1.5.73: {}
elliptic@6.6.1: elliptic@6.6.1:
dependencies: dependencies:
@ -5550,6 +5595,10 @@ snapshots:
es-errors@1.3.0: {} es-errors@1.3.0: {}
es-object-atoms@1.0.0:
dependencies:
es-errors: 1.3.0
esbuild@0.24.0: esbuild@0.24.0:
optionalDependencies: optionalDependencies:
'@esbuild/aix-ppc64': 0.24.0 '@esbuild/aix-ppc64': 0.24.0
@ -5581,11 +5630,11 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-plugin-oxlint@0.14.1: eslint-plugin-oxlint@0.15.0:
dependencies: dependencies:
jsonc-parser: 3.3.1 jsonc-parser: 3.3.1
eslint-plugin-perfectionist@4.2.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122): eslint-plugin-perfectionist@4.3.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122):
dependencies: dependencies:
'@typescript-eslint/types': 8.18.0 '@typescript-eslint/types': 8.18.0
'@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122) '@typescript-eslint/utils': 8.18.0(eslint@9.16.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
@ -5782,16 +5831,18 @@ snapshots:
gensync@1.0.0-beta.2: {} gensync@1.0.0-beta.2: {}
get-intrinsic@1.2.5: get-intrinsic@1.2.6:
dependencies: dependencies:
call-bind-apply-helpers: 1.0.1 call-bind-apply-helpers: 1.0.1
dunder-proto: 1.0.0 dunder-proto: 1.0.0
es-define-property: 1.0.1 es-define-property: 1.0.1
es-errors: 1.3.0 es-errors: 1.3.0
es-object-atoms: 1.0.0
function-bind: 1.1.2 function-bind: 1.1.2
gopd: 1.2.0 gopd: 1.2.0
has-symbols: 1.1.0 has-symbols: 1.1.0
hasown: 2.0.2 hasown: 2.0.2
math-intrinsics: 1.0.0
get-stream@6.0.1: {} get-stream@6.0.1: {}
@ -5992,6 +6043,8 @@ snapshots:
jsesc@3.0.2: {} jsesc@3.0.2: {}
jsesc@3.1.0: {}
json-buffer@3.0.1: {} json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1: {} json-parse-even-better-errors@2.3.1: {}
@ -6014,11 +6067,11 @@ snapshots:
kleur@4.1.5: {} kleur@4.1.5: {}
knip@5.39.2(@types/node@22.10.1)(typescript@5.8.0-dev.20241122): knip@5.39.4(@types/node@22.10.2)(typescript@5.8.0-dev.20241122):
dependencies: dependencies:
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
'@snyk/github-codeowners': 1.1.0 '@snyk/github-codeowners': 1.1.0
'@types/node': 22.10.1 '@types/node': 22.10.2
easy-table: 1.2.0 easy-table: 1.2.0
enhanced-resolve: 5.17.1 enhanced-resolve: 5.17.1
fast-glob: 3.3.2 fast-glob: 3.3.2
@ -6032,8 +6085,8 @@ snapshots:
strip-json-comments: 5.0.1 strip-json-comments: 5.0.1
summary: 2.1.0 summary: 2.1.0
typescript: 5.8.0-dev.20241122 typescript: 5.8.0-dev.20241122
zod: 3.24.0 zod: 3.24.1
zod-validation-error: 3.4.0(zod@3.24.0) zod-validation-error: 3.4.0(zod@3.24.1)
known-css-properties@0.35.0: {} known-css-properties@0.35.0: {}
@ -6046,6 +6099,10 @@ snapshots:
linguist-languages@7.27.0: {} linguist-languages@7.27.0: {}
lit-html@3.2.1:
dependencies:
'@types/trusted-types': 2.0.7
locate-path@6.0.0: locate-path@6.0.0:
dependencies: dependencies:
p-locate: 5.0.0 p-locate: 5.0.0
@ -6075,6 +6132,8 @@ snapshots:
dependencies: dependencies:
semver: 7.6.3 semver: 7.6.3
math-intrinsics@1.0.0: {}
mathml-tag-names@2.1.3: {} mathml-tag-names@2.1.3: {}
md5.js@1.3.5: md5.js@1.3.5:
@ -6211,16 +6270,16 @@ snapshots:
os-browserify@0.3.0: {} os-browserify@0.3.0: {}
oxlint@0.14.1: oxlint@0.15.0:
optionalDependencies: optionalDependencies:
'@oxlint/darwin-arm64': 0.14.1 '@oxlint/darwin-arm64': 0.15.0
'@oxlint/darwin-x64': 0.14.1 '@oxlint/darwin-x64': 0.15.0
'@oxlint/linux-arm64-gnu': 0.14.1 '@oxlint/linux-arm64-gnu': 0.15.0
'@oxlint/linux-arm64-musl': 0.14.1 '@oxlint/linux-arm64-musl': 0.15.0
'@oxlint/linux-x64-gnu': 0.14.1 '@oxlint/linux-x64-gnu': 0.15.0
'@oxlint/linux-x64-musl': 0.14.1 '@oxlint/linux-x64-musl': 0.15.0
'@oxlint/win32-arm64': 0.14.1 '@oxlint/win32-arm64': 0.15.0
'@oxlint/win32-x64': 0.14.1 '@oxlint/win32-x64': 0.15.0
p-cancelable@3.0.0: {} p-cancelable@3.0.0: {}
@ -6375,7 +6434,7 @@ snapshots:
qs@6.13.1: qs@6.13.1:
dependencies: dependencies:
side-channel: 1.0.6 side-channel: 1.1.0
querystring-es3@0.2.1: {} querystring-es3@0.2.1: {}
@ -6624,7 +6683,7 @@ snapshots:
define-data-property: 1.1.4 define-data-property: 1.1.4
es-errors: 1.3.0 es-errors: 1.3.0
function-bind: 1.1.2 function-bind: 1.1.2
get-intrinsic: 1.2.5 get-intrinsic: 1.2.6
gopd: 1.2.0 gopd: 1.2.0
has-property-descriptors: 1.0.2 has-property-descriptors: 1.0.2
@ -6645,13 +6704,34 @@ snapshots:
shebang-regex@3.0.0: {} shebang-regex@3.0.0: {}
side-channel@1.0.6: side-channel-list@1.0.0:
dependencies: dependencies:
call-bind: 1.0.8
es-errors: 1.3.0 es-errors: 1.3.0
get-intrinsic: 1.2.5
object-inspect: 1.13.3 object-inspect: 1.13.3
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.2
es-errors: 1.3.0
get-intrinsic: 1.2.6
object-inspect: 1.13.3
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.2
es-errors: 1.3.0
get-intrinsic: 1.2.6
object-inspect: 1.13.3
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
object-inspect: 1.13.3
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
signal-exit@3.0.7: {} signal-exit@3.0.7: {}
signal-exit@4.1.0: {} signal-exit@4.1.0: {}
@ -6697,7 +6777,7 @@ snapshots:
readable-stream: 3.6.2 readable-stream: 3.6.2
xtend: 4.0.2 xtend: 4.0.2
streamx@2.21.0: streamx@2.21.1:
dependencies: dependencies:
fast-fifo: 1.3.2 fast-fifo: 1.3.2
queue-tick: 1.0.1 queue-tick: 1.0.1
@ -6891,7 +6971,7 @@ snapshots:
dependencies: dependencies:
b4a: 1.6.7 b4a: 1.6.7
fast-fifo: 1.3.2 fast-fifo: 1.3.2
streamx: 2.21.0 streamx: 2.21.1
terser@5.36.0: terser@5.36.0:
dependencies: dependencies:
@ -7004,39 +7084,39 @@ snapshots:
vite-plugin-manifest-sri@0.2.0: {} vite-plugin-manifest-sri@0.2.0: {}
vite-plugin-node-polyfills@0.22.0(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)): vite-plugin-node-polyfills@0.22.0(rollup@4.28.1)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)):
dependencies: dependencies:
'@rollup/plugin-inject': 5.0.5(rollup@4.28.1) '@rollup/plugin-inject': 5.0.5(rollup@4.28.1)
node-stdlib-browser: 1.3.0 node-stdlib-browser: 1.3.0
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0) vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
vite-plugin-valibot-env@0.9.2(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)): vite-plugin-valibot-env@0.9.2(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)):
dependencies: dependencies:
kleur: 4.1.5 kleur: 4.1.5
log-symbols: 7.0.0 log-symbols: 7.0.0
valibot: 1.0.0-beta.9(typescript@5.8.0-dev.20241122) valibot: 1.0.0-beta.9(typescript@5.8.0-dev.20241122)
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0) vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)
vite-tsconfig-paths@5.1.4(typescript@5.8.0-dev.20241122)(vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)): vite-tsconfig-paths@5.1.4(typescript@5.8.0-dev.20241122)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)):
dependencies: dependencies:
debug: 4.4.0 debug: 4.4.0
globrex: 0.1.2 globrex: 0.1.2
tsconfck: 3.1.4(typescript@5.8.0-dev.20241122) tsconfck: 3.1.4(typescript@5.8.0-dev.20241122)
optionalDependencies: optionalDependencies:
vite: 6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0) vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
vite@6.0.3(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0): vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(sass-embedded@1.82.0)(sass@1.80.6)(terser@5.36.0):
dependencies: dependencies:
esbuild: 0.24.0 esbuild: 0.24.0
postcss: 8.4.49 postcss: 8.4.49
rollup: 4.28.1 rollup: 4.28.1
optionalDependencies: optionalDependencies:
'@types/node': 22.10.1 '@types/node': 22.10.2
fsevents: 2.3.3 fsevents: 2.3.3
jiti: 2.4.1 jiti: 2.4.1
sass: 1.80.6 sass: 1.80.6
@ -7090,8 +7170,8 @@ snapshots:
yoctocolors@2.1.1: {} yoctocolors@2.1.1: {}
zod-validation-error@3.4.0(zod@3.24.0): zod-validation-error@3.4.0(zod@3.24.1):
dependencies: dependencies:
zod: 3.24.0 zod: 3.24.1
zod@3.24.0: {} zod@3.24.1: {}

View file

@ -0,0 +1,2 @@
<?php
return ['x-generator'=>'GlotPress/4.0.1','translation-revision-date'=>'2022-05-06 07:45:25+0000','plural-forms'=>'nplurals=2; plural=n > 1;','project-id-version'=>'Plugins - Preview E-mails for WooCommerce - Stable (latest release)','language'=>'fr','messages'=>['Preview Emails'=>'Prévisualiser les emails','Search Orders'=>'Rechercher des commandes','Only use this field if you have particular orders, that are not listed above in the Choose Order Field. Type the Order ID only. Example: 90'=>'Utiliser uniquement ce champ si vous avez des commandes spécifiques, qui ne sont pas listées ci-dessus dans le champ Choisir une commande. Saisir lidentifiant de commande uniquement. Exemple : 90','Preview E-mails for WooCommerce'=>'Preview E-mails for WooCommerce','https://www.digamberpradhan.com/preview-e-mails-for-woocommerce/'=>'https://www.digamberpradhan.com/preview-e-mails-for-woocommerce/','Choose Email'=>'Choisir lemail','Choose Order'=>'Choisir la commande','Mail to'=>'Envoyer à','Back to Admin Area'=>'Retour à linterface dadministration','An Extension for WooCommerce that lets you Preview Emails, without having to send them.'=>'Une extension pour WooCommerce qui vous laisse prévisualiser les emails, sans avoir besoin de les envoyer.','Digamber Pradhan'=>'Digamber Pradhan','https://digamberpradhan.com/'=>'https://digamberpradhan.com/']];

Binary file not shown.

View file

@ -0,0 +1,65 @@
# Translation of Plugins - Preview E-mails for WooCommerce - Stable (latest release) in French (France)
# This file is distributed under the same license as the Plugins - Preview E-mails for WooCommerce - Stable (latest release) package.
msgid ""
msgstr ""
"PO-Revision-Date: 2022-05-06 07:45:25+0000\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: GlotPress/4.0.1\n"
"Language: fr\n"
"Project-Id-Version: Plugins - Preview E-mails for WooCommerce - Stable (latest release)\n"
#: includes/Main.php:138
msgid "Preview Emails"
msgstr "Prévisualiser les emails"
#: views/form.php:50 views/form.php:61
msgid "Search Orders"
msgstr "Rechercher des commandes"
#: views/form.php:65
msgid "Only use this field if you have particular orders, that are not listed above in the Choose Order Field. Type the Order ID only. Example: 90"
msgstr "Utiliser uniquement ce champ si vous avez des commandes spécifiques, qui ne sont pas listées ci-dessus dans le champ Choisir une commande. Saisir lidentifiant de commande uniquement. Exemple : 90"
#. Plugin Name of the plugin
#: woocommerce-preview-emails.php
msgid "Preview E-mails for WooCommerce"
msgstr "Preview E-mails for WooCommerce"
#. Plugin URI of the plugin
#: woocommerce-preview-emails.php
msgid "https://www.digamberpradhan.com/preview-e-mails-for-woocommerce/"
msgstr "https://www.digamberpradhan.com/preview-e-mails-for-woocommerce/"
#: views/form.php:18 views/form.php:21
msgid "Choose Email"
msgstr "Choisir lemail"
#: views/form.php:30 views/form.php:35
msgid "Choose Order"
msgstr "Choisir la commande"
#: views/form.php:71
msgid "Mail to"
msgstr "Envoyer à"
#: includes/Main.php:335
msgid "Back to Admin Area"
msgstr "Retour à linterface dadministration"
#. Description of the plugin
#: woocommerce-preview-emails.php
msgid "An Extension for WooCommerce that lets you Preview Emails, without having to send them."
msgstr "Une extension pour WooCommerce qui vous laisse prévisualiser les emails, sans avoir besoin de les envoyer."
#. Author of the plugin
#: woocommerce-preview-emails.php
msgid "Digamber Pradhan"
msgstr "Digamber Pradhan"
#. Author URI of the plugin
#: woocommerce-preview-emails.php
msgid "https://digamberpradhan.com/"
msgstr "https://digamberpradhan.com/"

View file

@ -248,8 +248,8 @@ button.bouton-retour-haut {
background: var(--couleur-fond); background: var(--couleur-fond);
border: 1px solid var(--couleur-noir); border: 1px solid var(--couleur-noir);
border-radius: 100%; border-radius: 100%;
transition: 0.2s background, 0.2s opacity, 0.2s visibility;
box-shadow: initial; box-shadow: initial;
transition: 0.2s background, 0.2s opacity, 0.2s visibility;
} }
button.bouton-retour-haut img { button.bouton-retour-haut img {
width: 1rem; width: 1rem;
@ -267,8 +267,17 @@ button.bouton-retour-haut[data-actif] {
} }
} }
fieldset {
all: initial;
display: flex;
flex-flow: column nowrap;
margin-top: var(--espace-l);
font: inherit;
}
input, select, textarea { input, select, textarea {
padding: var(--espace-xs); padding: var(--espace-xs);
accent-color: var(--couleur-jaune);
background: var(--couleur-gris); background: var(--couleur-gris);
border: 1px solid var(--couleur-noir); border: 1px solid var(--couleur-noir);
outline: 2px solid transparent; outline: 2px solid transparent;
@ -340,6 +349,25 @@ label:has(~ input[type=checkbox], ~ input[type=radio]), input[type=checkbox] + l
} }
} }
input[type=radio] {
appearance: initial;
border-radius: 100%;
}
input[type=radio]:checked {
display: inline-flex;
place-content: center;
place-items: center;
}
input[type=radio]:checked::before {
content: " ";
inset: initial;
display: inline-block;
width: calc(var(--espace-l) / 2);
height: calc(var(--espace-l) / 2);
background: var(--couleur-noir);
border-radius: 100%;
}
textarea:focus-visible, textarea:focus-within { textarea:focus-visible, textarea:focus-within {
outline: 1px solid var(--couleur-noir); outline: 1px solid var(--couleur-noir);
} }
@ -612,9 +640,9 @@ body:has(#menu-mobile:not([aria-hidden=true])) {
background: transparent; background: transparent;
} }
#en-tete .logo img { #en-tete .logo img {
image-rendering: crisp-edges;
shape-rendering: geometricPrecision;
object-fit: contain; object-fit: contain;
image-rendering: crisp-edges;
shape-rendering: geometricprecision;
} }
#en-tete .logo button { #en-tete .logo button {
display: block; display: block;
@ -1052,8 +1080,8 @@ body:has(#menu-mobile:not([aria-hidden=true])) {
display: flex; display: flex;
flex-flow: row nowrap; flex-flow: row nowrap;
justify-content: space-between; justify-content: space-between;
padding: var(--espace-m);
margin-bottom: var(--espace-xl); margin-bottom: var(--espace-xl);
padding: var(--espace-m);
} }
.grille-produits article figure figcaption h3 { .grille-produits article figure figcaption h3 {
font-style: italic; font-style: italic;
@ -1450,9 +1478,9 @@ body:has(#menu-mobile:not([aria-hidden=true])) {
max-width: 100vw; max-width: 100vw;
height: var(--pied-de-page-hauteur); height: var(--pied-de-page-hauteur);
padding: var(--espace-m); padding: var(--espace-m);
font-size: 0.8rem;
background: var(--couleur-jaune); background: var(--couleur-jaune);
border-top: 1px solid var(--couleur-noir); border-top: 1px solid var(--couleur-noir);
font-size: 0.8rem;
} }
#pied-de-page .zone-menu-navigation-secondaire { #pied-de-page .zone-menu-navigation-secondaire {
justify-self: start; justify-self: start;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-a-propos.scss"],"names":[],"mappings":"AAEA;EAEE;EAGA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;AACA;AACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAIA;AACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAEA;EACE;;AAIJ;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAEA;EACE;;AAMR;EA3LF;IA4LI;;;;AAIJ;EACE;IACE","file":"page-a-propos.css"} {"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-a-propos.scss"],"names":[],"mappings":"AAEA;EAEE;EAGA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;AAEA;AAEA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAIA;AACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAEA;EACE;;AAIJ;EACE;EAEA;;AAGF;EACE;EAEA;;AAGF;EACE;EAEA;;AAEA;EACE;;AAMR;EA7LF;IA8LI;;;;AAIJ;EACE;IACE","file":"page-a-propos.css"}

View file

@ -46,12 +46,6 @@
.page-modele-simple .contenu__textuel p + p { .page-modele-simple .contenu__textuel p + p {
margin-top: var(--espace-m); margin-top: var(--espace-m);
} }
@media (width <= 50rem) {
.page-modele-simple .contenu {
border-right: initial;
border-left: initial;
}
}
.page-modele-simple#page-cgv .contenu { .page-modele-simple#page-cgv .contenu {
font-style: normal; font-style: normal;
} }
@ -59,8 +53,8 @@
font-style: italic; font-style: italic;
} }
.page-modele-simple#page-cgv .contenu__textuel { .page-modele-simple#page-cgv .contenu__textuel {
padding: 0;
max-width: initial; max-width: initial;
padding: 0;
} }
.page-modele-simple#page-cgv .contenu__textuel__section { .page-modele-simple#page-cgv .contenu__textuel__section {
width: 100%; width: 100%;
@ -70,10 +64,10 @@
} }
.page-modele-simple#page-cgv .contenu__textuel__section header { .page-modele-simple#page-cgv .contenu__textuel__section header {
width: 100%; width: 100%;
margin-bottom: var(--espace-l);
padding: var(--espace-m) var(--espace-xl); padding: var(--espace-m) var(--espace-xl);
border-top: 1px solid var(--couleur-noir); border-top: 1px solid var(--couleur-noir);
border-bottom: 1px solid var(--couleur-noir); border-bottom: 1px solid var(--couleur-noir);
margin-bottom: var(--espace-l);
} }
.page-modele-simple#page-cgv .contenu__textuel__section header h3 { .page-modele-simple#page-cgv .contenu__textuel__section header h3 {
width: fit-content; width: fit-content;
@ -83,9 +77,9 @@
} }
.page-modele-simple#page-cgv .contenu__textuel__section ul { .page-modele-simple#page-cgv .contenu__textuel__section ul {
margin-bottom: 1lh; margin-bottom: 1lh;
padding: 0 var(--espace-xl);
list-style: square; list-style: square;
list-style-position: inside; list-style-position: inside;
padding: 0 var(--espace-xl);
} }
.page-modele-simple#page-cgv .contenu__textuel__section p { .page-modele-simple#page-cgv .contenu__textuel__section p {
padding: 0 var(--espace-xl); padding: 0 var(--espace-xl);
@ -93,5 +87,11 @@
.page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type { .page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type {
margin-bottom: var(--espace-xl); margin-bottom: var(--espace-xl);
} }
@media (width <= 50rem) {
.page-modele-simple .contenu {
border-right: initial;
border-left: initial;
}
}
/*# sourceMappingURL=page-modele-simple.css.map */ /*# sourceMappingURL=page-modele-simple.css.map */

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-modele-simple.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;IACE;IACA;;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAGE;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAKF;EACE;;AAEA;EACE","file":"page-modele-simple.css"} {"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-modele-simple.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAMJ;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAGE;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAKF;EACE;;AAEA;EACE;;AAQZ;EACE;IACE;IACA","file":"page-modele-simple.css"}

View file

@ -1 +1 @@
.page-modele-simple{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}.page-modele-simple .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:400;display:flex}.page-modele-simple .contenu__en-tete{width:100%;padding:var(--espace-m)var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}.page-modele-simple .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple .contenu__textuel{max-width:34rem;height:100%;padding:0 var(--espace-xl);text-wrap:pretty;flex-flow:column;flex:1;place-content:center;display:flex}.page-modele-simple .contenu__textuel p+p{margin-top:var(--espace-m)}@media (width<=50rem){.page-modele-simple .contenu{border-right:initial;border-left:initial}}.page-modele-simple#page-cgv .contenu{font-style:normal}.page-modele-simple#page-cgv .contenu header{font-style:italic}.page-modele-simple#page-cgv .contenu__textuel{max-width:initial;padding:0}.page-modele-simple#page-cgv .contenu__textuel__section{width:100%}.page-modele-simple#page-cgv .contenu__textuel__section:first-of-type header{border-top:initial}.page-modele-simple#page-cgv .contenu__textuel__section header{width:100%;padding:var(--espace-m)var(--espace-xl);border-top:1px solid var(--couleur-noir);border-bottom:1px solid var(--couleur-noir);margin-bottom:var(--espace-l)}.page-modele-simple#page-cgv .contenu__textuel__section header h3{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple#page-cgv .contenu__textuel__section ul{padding:0 var(--espace-xl);margin-bottom:1lh;list-style:square inside}.page-modele-simple#page-cgv .contenu__textuel__section p{padding:0 var(--espace-xl)}.page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type{margin-bottom:var(--espace-xl)} .page-modele-simple{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}.page-modele-simple .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:400;display:flex}.page-modele-simple .contenu__en-tete{width:100%;padding:var(--espace-m)var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}.page-modele-simple .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple .contenu__textuel{max-width:34rem;height:100%;padding:0 var(--espace-xl);text-wrap:pretty;flex-flow:column;flex:1;place-content:center;display:flex}.page-modele-simple .contenu__textuel p+p{margin-top:var(--espace-m)}.page-modele-simple#page-cgv .contenu{font-style:normal}.page-modele-simple#page-cgv .contenu header{font-style:italic}.page-modele-simple#page-cgv .contenu__textuel{max-width:initial;padding:0}.page-modele-simple#page-cgv .contenu__textuel__section{width:100%}.page-modele-simple#page-cgv .contenu__textuel__section:first-of-type header{border-top:initial}.page-modele-simple#page-cgv .contenu__textuel__section header{width:100%;margin-bottom:var(--espace-l);padding:var(--espace-m)var(--espace-xl);border-top:1px solid var(--couleur-noir);border-bottom:1px solid var(--couleur-noir)}.page-modele-simple#page-cgv .contenu__textuel__section header h3{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}.page-modele-simple#page-cgv .contenu__textuel__section ul{padding:0 var(--espace-xl);margin-bottom:1lh;list-style:square inside}.page-modele-simple#page-cgv .contenu__textuel__section p{padding:0 var(--espace-xl)}.page-modele-simple#page-cgv .contenu__textuel__section p:last-of-type{margin-bottom:var(--espace-xl)}@media (width<=50rem){.page-modele-simple .contenu{border-right:initial;border-left:initial}}

View file

@ -144,7 +144,7 @@
margin-top: var(--espace-m); margin-top: var(--espace-m);
} }
#panneau-panier .panneau__sous-totaux { #panneau-panier .panneau__sous-totaux {
width: min(30rem, 100%); width: min(40rem, 100%);
margin: auto; margin: auto;
padding: var(--espace-l) var(--espace-xl); padding: var(--espace-l) var(--espace-xl);
text-align: center; text-align: center;
@ -165,6 +165,27 @@
#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span { #panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span {
color: grey; color: grey;
} }
#panneau-panier .panneau__sous-totaux__choix-methode-livraison {
flex-flow: row wrap;
gap: var(--espace-xs) var(--espace-m);
justify-content: center;
font-size: 0.9rem;
letter-spacing: inherit;
}
#panneau-panier .panneau__sous-totaux__choix-methode-livraison > label:first-of-type {
cursor: revert;
flex-basis: 100%;
margin-bottom: var(--espace-xs);
color: grey;
text-align: center;
text-transform: lowercase;
}
#panneau-panier .panneau__sous-totaux__choix-methode-livraison div {
display: flex;
flex-flow: row nowrap;
column-gap: 1ch;
place-items: center;
}
#panneau-panier .panneau__sous-totaux__conditions-livraison { #panneau-panier .panneau__sous-totaux__conditions-livraison {
margin-top: var(--espace-l); margin-top: var(--espace-l);
font-size: 0.8rem; font-size: 0.8rem;
@ -200,7 +221,8 @@
#panneau-panier .panneau__instructions-code-promo { #panneau-panier .panneau__instructions-code-promo {
padding: var(--espace-xl) var(--espace-l); padding: var(--espace-xl) var(--espace-l);
} }
#panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo input, #panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo button { #panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo input,
#panneau-panier .panneau__instructions-code-promo .panneau__instructions-code-promo__code-promo button {
flex: 1; flex: 1;
} }
#panneau-panier .panneau__sous-totaux { #panneau-panier .panneau__sous-totaux {
@ -325,8 +347,8 @@
#panneau-informations-client .panneau__pied-de-page { #panneau-informations-client .panneau__pied-de-page {
align-content: center; align-content: center;
padding: var(--espace-l) 0; padding: var(--espace-l) 0;
font-style: italic;
font-size: 1.25rem; font-size: 1.25rem;
font-style: italic;
color: var(--couleur-blanc); color: var(--couleur-blanc);
text-align: center; text-align: center;
text-transform: uppercase; text-transform: uppercase;

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;AASA;AAAA;AAAA;AAAA;AAkBA;AASA;;AAnCA;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAGF;IACE;;EAEA;IACE;;EAIJ;IACE;;EAGE;IACE;;EAKN;IACE;;;;AC1PN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAMR;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;IACE;;;;ACpKN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"} {"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;AASA;AAAA;AAAA;AAAA;AAmBA;AASA;;AApCA;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAOJ;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAGF;IACE;;EAEA;IACE;;EAIJ;IACE;;EAGE;AAAA;IAEE;;EAKN;IACE;;;;ACvRN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAMR;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;IACE;;;;ACpKN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"}

File diff suppressed because one or more lines are too long

View file

@ -94,9 +94,9 @@ $sous_total_panier = WC()->cart->get_subtotal();
/** @var string|null $code_promo Le code promo appliqué au Panier s'il existe. */ /** @var string|null $code_promo Le code promo appliqué au Panier s'il existe. */
$code_promo = collect(WC()->cart->get_applied_coupons())->first(); $code_promo = collect(WC()->cart->get_applied_coupons())->first();
/** @var int $sous_total_reduction Le total du montant de la Réduction appliquée au Panier */ /** @var int $sous_total_reduction Le total du montant de la Réduction appliquée au Panier */
$sous_total_reduction = Number::format(WC()->cart->get_totals()["discount_total"], precision: 2); $sous_total_reduction = Number::format(WC()->cart->get_totals()["discount_total"], maxPrecision: 2);
/** @var float $total_panier Le total de la Commande dans le Panier. */ /** @var float $total_panier Le total de la Commande dans le Panier. */
$total_panier = Number::format(floatval(WC()->cart->get_totals()["total"]), precision: 2); $total_panier = Number::format(floatval(WC()->cart->get_totals()["total"]), maxPrecision: 2);
foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) { foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) {
$panier[$cle_panier] = [ $panier[$cle_panier] = [
@ -122,17 +122,24 @@ foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) {
$email = WC()->customer->get_billing_email(); $email = WC()->customer->get_billing_email();
$adresse_livraison = WC()->customer->get_shipping(); $adresse_livraison = WC()->customer->get_shipping();
$adresse_facturation = WC()->customer->get_billing(); $adresse_facturation = WC()->customer->get_billing();
$adresse_renseignee = $adresse_livraison["city"] != "";
$pays_livraison = collect(WC()->countries->get_countries())->only($pays_acceptes)->toArray(); $pays_livraison = collect(WC()->countries->get_countries())->only($pays_acceptes)->toArray();
$total_livraison = Number::format(floatval(WC()->cart->get_totals()["shipping_total"]), precision: 0); $total_livraison = Number::format(floatval(WC()->cart->get_totals()["shipping_total"]), precision: 0);
$methodes_livraison = collect(WC()->session->get("shipping_for_package_0")["rates"])
// echo "<pre>"; ->values()
// print_r(WC()->countries->get_countries()); ->map(function (WC_Shipping_Rate $methode) {
// print_r($adresse_livraison); return [
// echo "</pre>"; "id" => $methode->get_method_id(),
"prix" => Number::format(intval($methode->get_cost()), maxPrecision: 2),
"selectionnee" => collect(WC()->session->get("chosen_shipping_methods"))->first() == $methode->get_id(),
"titre" => $methode->get_label(),
];
});
$contexte["email"] = $email; $contexte["email"] = $email;
$contexte["adresse_livraison"] = $adresse_livraison; $contexte["adresse_livraison"] = $adresse_livraison;
$contexte["adresse_facturation"] = $adresse_facturation; $contexte["adresse_facturation"] = $adresse_facturation;
$contexte["adresse_renseignee"] = $adresse_renseignee;
$contexte["sous_total_panier"] = $sous_total_panier; $contexte["sous_total_panier"] = $sous_total_panier;
$contexte["code_promo"] = $code_promo; $contexte["code_promo"] = $code_promo;
$contexte["sous_total_reduction"] = $sous_total_reduction; $contexte["sous_total_reduction"] = $sous_total_reduction;
@ -140,10 +147,12 @@ $contexte["total_panier"] = $total_panier;
$contexte["produits_panier"] = $panier; $contexte["produits_panier"] = $panier;
$contexte["pays_livraison"] = $pays_livraison; $contexte["pays_livraison"] = $pays_livraison;
$contexte["sous_total_livraison"] = $total_livraison; $contexte["sous_total_livraison"] = $total_livraison;
$contexte["methode_livraison"] = $contexte["methodes_livraison"] = $methodes_livraison;
collect(WC()->session->get("shipping_for_package_0")["rates"])
->first() // echo "<pre>";
?->get_label() ?? ""; // print_r($methodes_livraison);
// print_r(WC()->session->get("chosen_shipping_methods"));
// echo "</pre>";
// Charge les scripts et styles de la page // Charge les scripts et styles de la page
function charge_scripts_styles_page_panier(): void { function charge_scripts_styles_page_panier(): void {

View file

@ -77,8 +77,8 @@ button {
background: var(--couleur-fond); background: var(--couleur-fond);
border: 1px solid var(--couleur-noir); border: 1px solid var(--couleur-noir);
border-radius: 100%; border-radius: 100%;
transition: 0.2s background, 0.2s opacity, 0.2s visibility;
box-shadow: initial; box-shadow: initial;
transition: 0.2s background, 0.2s opacity, 0.2s visibility;
img { img {
width: 1rem; width: 1rem;

View file

@ -1,7 +1,16 @@
// Styles de base pour les éléments de formulaires. // Styles de base pour les éléments de formulaires.
fieldset {
all: initial;
display: flex;
flex-flow: column nowrap;
margin-top: var(--espace-l);
font: inherit;
}
input, select, textarea { input, select, textarea {
padding: var(--espace-xs); padding: var(--espace-xs);
accent-color: var(--couleur-jaune);
background: var(--couleur-gris); background: var(--couleur-gris);
border: 1px solid var(--couleur-noir); border: 1px solid var(--couleur-noir);
outline: 2px solid transparent; outline: 2px solid transparent;
@ -93,6 +102,27 @@ input[type="checkbox"], input[type="radio"] {
} }
} }
input[type="radio"] {
appearance: initial;
border-radius: 100%;
&:checked {
display: inline-flex;
place-content: center;
place-items: center;
&::before {
content: " ";
inset: initial;
display: inline-block;
width: calc(var(--espace-l) / 2);
height: calc(var(--espace-l) / 2);
background: var(--couleur-noir);
border-radius: 100%;
}
}
}
textarea { textarea {
&:focus-visible, &:focus-within { &:focus-visible, &:focus-within {
outline: 1px solid var(--couleur-noir); outline: 1px solid var(--couleur-noir);

View file

@ -33,9 +33,9 @@
} }
img { img {
image-rendering: crisp-edges;
shape-rendering: geometricPrecision;
object-fit: contain; object-fit: contain;
image-rendering: crisp-edges;
shape-rendering: geometricprecision;
} }
button { button {

View file

@ -105,8 +105,8 @@
display: flex; display: flex;
flex-flow: row nowrap; flex-flow: row nowrap;
justify-content: space-between; justify-content: space-between;
padding: var(--espace-m);
margin-bottom: var(--espace-xl); margin-bottom: var(--espace-xl);
padding: var(--espace-m);
h3 { h3 {
font-style: italic; font-style: italic;

View file

@ -150,8 +150,8 @@
.panneau__pied-de-page { .panneau__pied-de-page {
align-content: center; align-content: center;
padding: var(--espace-l) 0; padding: var(--espace-l) 0;
font-style: italic;
font-size: 1.25rem; font-size: 1.25rem;
font-style: italic;
color: var(--couleur-blanc); color: var(--couleur-blanc);
text-align: center; text-align: center;
text-transform: uppercase; text-transform: uppercase;

View file

@ -171,7 +171,7 @@
} }
.panneau__sous-totaux { .panneau__sous-totaux {
width: min(30rem, 100%); width: min(40rem, 100%);
margin: auto; margin: auto;
padding: var(--espace-l) var(--espace-xl); padding: var(--espace-l) var(--espace-xl);
text-align: center; text-align: center;
@ -199,6 +199,32 @@
} }
} }
&__choix-methode-livraison {
flex-flow: row wrap;
gap: var(--espace-xs) var(--espace-m);
justify-content: center;
font-size: 0.9rem;
letter-spacing: inherit;
> label:first-of-type {
cursor: revert;
flex-basis: 100%;
margin-bottom: var(--espace-xs);
color: grey;
text-align: center;
text-transform: lowercase;
}
div {
display: flex;
flex-flow: row nowrap;
column-gap: 1ch;
place-items: center;
input {}
}
}
&__conditions-livraison { &__conditions-livraison {
margin-top: var(--espace-l); margin-top: var(--espace-l);
font-size: 0.8rem; font-size: 0.8rem;

View file

@ -8,9 +8,9 @@
max-width: 100vw; max-width: 100vw;
height: var(--pied-de-page-hauteur); height: var(--pied-de-page-hauteur);
padding: var(--espace-m); padding: var(--espace-m);
font-size: 0.8rem;
background: var(--couleur-jaune); background: var(--couleur-jaune);
border-top: 1px solid var(--couleur-noir); border-top: 1px solid var(--couleur-noir);
font-size: 0.8rem;
// Liens vers les pages du site // Liens vers les pages du site
.zone-menu-navigation-secondaire { .zone-menu-navigation-secondaire {

View file

@ -59,7 +59,9 @@
pointer-events: none; pointer-events: none;
display: block; display: block;
width: 1.75rem; width: 1.75rem;
/* filter: drop-shadow(1px 1px 3px var(--couleur-gris-fonce)); */ /* filter: drop-shadow(1px 1px 3px var(--couleur-gris-fonce)); */
/* transition: 0.2s filter; */ /* transition: 0.2s filter; */
} }

View file

@ -57,13 +57,6 @@
} }
} }
@media (width <= 50rem) {
.contenu {
border-right: initial;
border-left: initial;
}
}
&#page-cgv { &#page-cgv {
.contenu { .contenu {
font-style: normal; font-style: normal;
@ -73,8 +66,8 @@
} }
&__textuel { &__textuel {
padding: 0;
max-width: initial; max-width: initial;
padding: 0;
&__section { &__section {
width: 100%; width: 100%;
@ -87,10 +80,10 @@
header { header {
width: 100%; width: 100%;
margin-bottom: var(--espace-l);
padding: var(--espace-m) var(--espace-xl); padding: var(--espace-m) var(--espace-xl);
border-top: 1px solid var(--couleur-noir); border-top: 1px solid var(--couleur-noir);
border-bottom: 1px solid var(--couleur-noir); border-bottom: 1px solid var(--couleur-noir);
margin-bottom: var(--espace-l);
h3 { h3 {
width: fit-content; width: fit-content;
@ -102,9 +95,9 @@
ul { ul {
margin-bottom: 1lh; margin-bottom: 1lh;
padding: 0 var(--espace-xl);
list-style: square; list-style: square;
list-style-position: inside; list-style-position: inside;
padding: 0 var(--espace-xl);
li {} li {}
} }
@ -120,4 +113,11 @@
} }
} }
} }
@media (width <= 50rem) {
.contenu {
border-right: initial;
border-left: initial;
}
}
} }

View file

@ -46,6 +46,7 @@ export const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = "button.detail-produit__ac
export const SELECTEUR_BOUTON_SUPPRESSION_PANIER = "button.detail-produit__actions__suppression"; export const SELECTEUR_BOUTON_SUPPRESSION_PANIER = "button.detail-produit__actions__suppression";
export const SELECTEUR_CHAMP_CODE_PROMO = "#panneau-panier #champ-code-promo"; export const SELECTEUR_CHAMP_CODE_PROMO = "#panneau-panier #champ-code-promo";
export const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = "input"; export const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = "input";
export const SELECTEUR_CONTENEUR_METHODES_LIVRAISON = "#panneau-panier #choix-methode-livraison";
export const SELECTEUR_ENSEMBLE_CODE_PROMO = "#panneau-panier #ensemble-code-promo"; export const SELECTEUR_ENSEMBLE_CODE_PROMO = "#panneau-panier #ensemble-code-promo";
export const SELECTEUR_ENTREES_PANIER = "article"; export const SELECTEUR_ENTREES_PANIER = "article";
export const SELECTEUR_FORMULAIRE_FACTURATION = "#panneau-informations-client .panneau__formulaires__facturation"; export const SELECTEUR_FORMULAIRE_FACTURATION = "#panneau-informations-client .panneau__formulaires__facturation";

View file

@ -0,0 +1,4 @@
export const ADRESSES_MAJ = "adressesMaj";
export const CODE_PROMO_MAJ = "codePromoMaj";
export const METHODES_LIVRAISON_MAJ = "methodesLivraisonMaj";
export const PRODUITS_MAJ = "produitsMaj";

View file

@ -0,0 +1,30 @@
import { ADRESSES_MAJ, CODE_PROMO_MAJ, METHODES_LIVRAISON_MAJ, PRODUITS_MAJ } from "../../constantes/evenements";
export const ADRESSES_MAJ_EVENT = new CustomEvent(ADRESSES_MAJ, {});
export const CODE_PROMO_MAJ_EVENT = new CustomEvent(CODE_PROMO_MAJ, {});
export class MagasinPanier extends EventTarget {
emetAdressesMaj(): void {
this.dispatchEvent(
new CustomEvent(ADRESSES_MAJ),
);
}
emetCodePromoMaj(): void {
this.dispatchEvent(
new CustomEvent(CODE_PROMO_MAJ),
);
}
emetMethodesLivraisonMaj(): void {
this.dispatchEvent(
new CustomEvent(METHODES_LIVRAISON_MAJ),
);
}
emetProduitsMaj(): void {
this.dispatchEvent(
new CustomEvent(PRODUITS_MAJ),
);
}
}

View file

@ -0,0 +1,30 @@
import type { GenericSchema, InferOutput, ValiError } from "valibot";
import { type Either, Maybe } from "purify-ts";
import { eitherJsonParse } from "./dom.ts";
import { ErreurEntreeInexistante, type NonExistingKeyError } from "./erreurs.ts";
import { eitherValiParseCurried } from "./validation.ts";
export type GetLocalStorage<S extends GenericSchema> = Either<ErreursGetLocalStorage<S>, InferOutput<S>>;
type ErreursGetLocalStorage<S extends GenericSchema> =
| NonExistingKeyError
| SyntaxError
| ValiError<S>;
/**
* Récupère une entrée dans le Stockage Local (`localStorage`) sous forme d'`Either`.
*
* @param cle La clé de l'entrée.
* @returns Un `Either` avec une `NonExistingKeyError` si la clé est absente (`Left`), la
* valeur de l'entrée sinon (`Right`).
*/
export const eitherGetLocalStorage = (cle: string): Either<NonExistingKeyError, string> =>
Maybe
.fromNullable(localStorage.getItem(cle))
.toEither(ErreurEntreeInexistante(`Clé ${cle} absente dans le stockage de session.`));
export const getAndParseLocalStorage = <S extends GenericSchema>(cle: string, schema: S): GetLocalStorage<S> =>
eitherGetLocalStorage(cle)
.chain(eitherJsonParse)
.chain(eitherValiParseCurried(schema));

View file

@ -14,7 +14,7 @@ import { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER, TYPES_MESSAGES } fro
import { reporteErreur } from "./erreurs.ts"; import { reporteErreur } from "./erreurs.ts";
import { WCErrorSchema } from "./schemas/api/erreurs.ts"; import { WCErrorSchema } from "./schemas/api/erreurs.ts";
import { MessageMajBoutonPanierSchema, MessageMajContenuPanierSchema } from "./schemas/messages.ts"; import { MessageMajBoutonPanierSchema, MessageMajContenuPanierSchema } from "./schemas/messages.ts";
import { eitherParse } from "./validation.ts"; import { eitherValiParse } from "./validation.ts";
const canalPostMessage = (canal: BroadcastChannel, message: unknown): BroadcastChannel => { const canalPostMessage = (canal: BroadcastChannel, message: unknown): BroadcastChannel => {
canal.postMessage(message); canal.postMessage(message);
@ -78,6 +78,6 @@ export const valideMessageMajContenuPanier = (
// Correspondances // Correspondances
export const reponseEstCodeErreurWC = (reponse: ReponseSimplifiee, codeErreurWC: string): boolean => export const reponseEstCodeErreurWC = (reponse: ReponseSimplifiee, codeErreurWC: string): boolean =>
eitherParse(reponse, WCErrorSchema) eitherValiParse(reponse, WCErrorSchema)
.map(v => v.body.code === codeErreurWC) .map(v => v.body.code === codeErreurWC)
.orDefault(false); .orDefault(false);

View file

@ -14,5 +14,8 @@ export const inverseNombre = (nombre: number | string): number => Number(nombre)
export const formateEnEuros = (nombre: number | string): string => `${String(nombre)}`; export const formateEnEuros = (nombre: number | string): string => `${String(nombre)}`;
export const diviseParCentEtFormateEnEuros = (nombre: number | string): string =>
pipe(Number(nombre), diviseParCent, formateEnEuros);
export const diviseParCentEtArrondis = (nombre: number | string): string => export const diviseParCentEtArrondis = (nombre: number | string): string =>
pipe(Number(nombre), diviseParCent, arrondisADeuxDecimales); pipe(Number(nombre), diviseParCent, arrondisADeuxDecimales);

View file

@ -5,7 +5,11 @@
import { Either } from "purify-ts"; import { Either } from "purify-ts";
import { type GenericSchema, type InferOutput, parse, type ValiError } from "valibot"; import { type GenericSchema, type InferOutput, parse, type ValiError } from "valibot";
export const eitherParse = <Schema extends GenericSchema>( export const eitherValiParse = <Schema extends GenericSchema>(
valeur: unknown, valeur: unknown,
schema: Schema, schema: Schema,
): Either<ValiError<Schema>, InferOutput<Schema>> => Either.encase(() => parse(schema, valeur)); ): Either<ValiError<Schema>, InferOutput<Schema>> => Either.encase(() => parse(schema, valeur));
export const eitherValiParseCurried =
<S extends GenericSchema>(schema: S) => (valeur: unknown): Either<ValiError<S>, InferOutput<S>> =>
Either.encase(() => parse(schema, valeur));

View file

@ -3,7 +3,6 @@ import { find as arrayFind, head as arrayHead } from "@mobily/ts-belt/Array";
import { get as dictGet, map as dictMap, values as dictValues } from "@mobily/ts-belt/Dict"; import { get as dictGet, map as dictMap, values as dictValues } from "@mobily/ts-belt/Dict";
import { flatMap as optionFlatMap, getWithDefault as optionGetWithDefault } from "@mobily/ts-belt/Option"; import { flatMap as optionFlatMap, getWithDefault as optionGetWithDefault } from "@mobily/ts-belt/Option";
import { trim as stringTrim } from "@mobily/ts-belt/String"; import { trim as stringTrim } from "@mobily/ts-belt/String";
import { Option } from "@swan-io/boxed";
import { EitherAsync, Maybe } from "purify-ts"; import { EitherAsync, Maybe } from "purify-ts";
import { match, P } from "ts-pattern"; import { match, P } from "ts-pattern";
import { type AnySchema, ValiError } from "valibot"; import { type AnySchema, ValiError } from "valibot";
@ -21,13 +20,16 @@ import {
ATTRIBUT_LIVRAISON_VALIDEE, ATTRIBUT_LIVRAISON_VALIDEE,
SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,
SELECTEUR_BOUTON_SEPARATION_ADRESSES, SELECTEUR_BOUTON_SEPARATION_ADRESSES,
SELECTEUR_CONTENEUR_METHODES_LIVRAISON,
SELECTEUR_ENTREES_PANIER, SELECTEUR_ENTREES_PANIER,
SELECTEUR_FORMULAIRE_PANIER, SELECTEUR_FORMULAIRE_PANIER,
SELECTEUR_INSTRUCTIONS_CLIENT, SELECTEUR_INSTRUCTIONS_CLIENT,
SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES, SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES,
SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,
SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, SELECTEUR_SOUS_TOTAL_PRODUITS,
SELECTEUR_TOTAL_PANIER,
} from "../constantes/dom"; } from "../constantes/dom";
import { ADRESSES_MAJ, CODE_PROMO_MAJ } from "../constantes/evenements";
import { NOM_CANAL_REVALIDATION_LIVRAISON } from "../constantes/messages"; import { NOM_CANAL_REVALIDATION_LIVRAISON } from "../constantes/messages";
import { import {
ERREUR_ADRESSE_MAUVAIS_CODE_POSTAL, ERREUR_ADRESSE_MAUVAIS_CODE_POSTAL,
@ -38,6 +40,7 @@ import {
import { eitherJsonParse, eitherSessionStorageGet } from "../lib/dom"; import { eitherJsonParse, eitherSessionStorageGet } from "../lib/dom";
import { leveErreur, type NonExistingKeyError, reporteErreur, reporteEtJournaliseErreur } from "../lib/erreurs"; import { leveErreur, type NonExistingKeyError, reporteErreur, reporteEtJournaliseErreur } from "../lib/erreurs";
import { ErreurAdresseInvalide } from "../lib/erreurs/adresses"; import { ErreurAdresseInvalide } from "../lib/erreurs/adresses";
import { ADRESSES_MAJ_EVENT } from "../lib/evenements/panier";
import { emetUniqueMessageBroadcastChannel } from "../lib/messages"; import { emetUniqueMessageBroadcastChannel } from "../lib/messages";
import { diviseParCent, formateEnEuros } from "../lib/nombres"; import { diviseParCent, formateEnEuros } from "../lib/nombres";
import { creeReponseSimplifiee, eitherAsyncFetch, postBackend, traiteErreursBackendWooCommerce } from "../lib/reseau"; import { creeReponseSimplifiee, eitherAsyncFetch, postBackend, traiteErreursBackendWooCommerce } from "../lib/reseau";
@ -53,7 +56,8 @@ import {
recupereElementsDocumentEither, recupereElementsDocumentEither,
recupereEleOuLeve, recupereEleOuLeve,
} from "../lib/utils"; } from "../lib/utils";
import { eitherParse } from "../lib/validation"; import { eitherValiParse } from "../lib/validation";
import { genereHtmlMethodesLivraison } from "./scripts-page-panier-methodes-livraison";
// @ts-expect-error -- États injectés par le modèle PHP // @ts-expect-error -- États injectés par le modèle PHP
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP
@ -62,42 +66,54 @@ const ETATS_PAGE: EtatsPageGenerique = _etats;
const E = { const E = {
BOUTON_ACTIONS_FORMULAIRE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE), BOUTON_ACTIONS_FORMULAIRE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE),
BOUTON_SEPARATION_ADRESSES: recupereEleOuLeve<HTMLInputElement>(SELECTEUR_BOUTON_SEPARATION_ADRESSES), BOUTON_SEPARATION_ADRESSES: recupereEleOuLeve<HTMLInputElement>(SELECTEUR_BOUTON_SEPARATION_ADRESSES),
CONTENEUR_METHODES_LIVRAISON: recupereEleOuLeve<HTMLFieldSetElement>(SELECTEUR_CONTENEUR_METHODES_LIVRAISON),
ENTREES_PANIER_EITHER: recupereElementsDocumentEither<HTMLElement>(SELECTEUR_ENTREES_PANIER), ENTREES_PANIER_EITHER: recupereElementsDocumentEither<HTMLElement>(SELECTEUR_ENTREES_PANIER),
FORMULAIRE_PANIER: recupereEleOuLeve<HTMLFormElement>(SELECTEUR_FORMULAIRE_PANIER), FORMULAIRE_PANIER: recupereEleOuLeve<HTMLFormElement>(SELECTEUR_FORMULAIRE_PANIER),
INSTRUCTIONS_CLIENT: recupereEleOuLeve<HTMLTextAreaElement>(SELECTEUR_INSTRUCTIONS_CLIENT), INSTRUCTIONS_CLIENT: recupereEleOuLeve<HTMLTextAreaElement>(SELECTEUR_INSTRUCTIONS_CLIENT),
MESSAGE_ADRESSES: recupereEleOuLeve<HTMLParagraphElement>(SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES), MESSAGE_ADRESSES: recupereEleOuLeve<HTMLParagraphElement>(SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES),
TOTAL_LIVRAISON_COUT: recupereEleOuLeve<HTMLElement>(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT), SOUS_TOTAL_LIVRAISON_COUT: recupereEleOuLeve<HTMLElement>(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),
TOTAL_LIVRAISON_PRESTATAIRE: recupereEleOuLeve<HTMLSpanElement>(SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE), SOUS_TOTAL_PRODUITS: recupereEleOuLeve<HTMLElement>(SELECTEUR_SOUS_TOTAL_PRODUITS),
TOTAL_PANIER: recupereEleOuLeve<HTMLSpanElement>(SELECTEUR_TOTAL_PANIER),
}; };
/** /**
* Initialise l'écoute sur le `BroadcastChannel` de revalidation de la livraison. * Réinitialise le bouton de soumission du Formulaire en revenant à l'étape de validation des adresses.
*
* Lorsqu'un Message est émis, force l'Utilisateur à réaliser une requête pour le recalcul de ses conditions de
* livraison.
* *
* @returns void * @returns void
*/ */
export const initialiseCanalRevalidationLivraison = (): void => { export const reinitialiseValidationLivraison = (): void => {
new BroadcastChannel(NOM_CANAL_REVALIDATION_LIVRAISON).addEventListener("message", (): void => {
E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_LIVRAISON_VALIDEE); E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_LIVRAISON_VALIDEE);
E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Calculate shipping"; E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Calculate shipping";
});
}; };
/** /**
* Lorsque le Formulaire du Panier change (que l'Utilisateur a changé une valeur), demande une revalidation * Initialise les Émetteurs d'Événements sur divers parties du Panier.
* de la livraison si elle a é précédemment validée. *
* 1. Émet un Événement de mise à jour des Adresses quand le Formulaire est modifié (s'il est valide).
* *
* @returns void * @returns void
*/ */
export const demandeRevalidationLivraisonAMajFormulaires = (): void => export const initialiseEmetteursEvenementsFormulairePanier = (): void => {
E.FORMULAIRE_PANIER.addEventListener("change", (): void => { E.FORMULAIRE_PANIER.addEventListener("change", (): void => {
Maybe Maybe
.fromFalsy(E.FORMULAIRE_PANIER.checkValidity()) .fromFalsy(E.FORMULAIRE_PANIER.checkValidity())
.chainNullable((): boolean => E.BOUTON_ACTIONS_FORMULAIRE.hasAttribute(ATTRIBUT_LIVRAISON_VALIDEE)) .ifJust((): boolean => window.dispatchEvent(ADRESSES_MAJ_EVENT));
.ifJust((): void => emetUniqueMessageBroadcastChannel(NOM_CANAL_REVALIDATION_LIVRAISON, true));
}); });
};
/**
* Souscris aux différents Événements liés aux Panier et déclenche différentes opérations en fonction de ces derniers.
*
* @returns void
*/
export const souscrisEvenementsPanier = (): void => {
window.addEventListener(ADRESSES_MAJ, (): void => {
reinitialiseValidationLivraison();
});
window.addEventListener(CODE_PROMO_MAJ, (): void => {
reinitialiseValidationLivraison();
});
};
export const initialiseBoutonCalculLivraison = (): void => { export const initialiseBoutonCalculLivraison = (): void => {
// Déclenche la requête pour la soumission des adresses // Déclenche la requête pour la soumission des adresses
@ -106,7 +122,9 @@ export const initialiseBoutonCalculLivraison = (): void => {
// Ne fais rien si le Formulaire n'est pas valide // Ne fais rien si le Formulaire n'est pas valide
.fromFalsy(E.FORMULAIRE_PANIER.checkValidity()) .fromFalsy(E.FORMULAIRE_PANIER.checkValidity())
// Ne fais rien si la livraison a déjà été validée // Ne fais rien si la livraison a déjà été validée
.chainNullable((): boolean => !E.BOUTON_ACTIONS_FORMULAIRE.hasAttribute(ATTRIBUT_LIVRAISON_VALIDEE)) .chainNullable((): boolean | null =>
E.BOUTON_ACTIONS_FORMULAIRE.hasAttribute(ATTRIBUT_LIVRAISON_VALIDEE) ? null : true
)
.ifJust((): void => { .ifJust((): void => {
evenement.preventDefault(); evenement.preventDefault();
@ -151,7 +169,7 @@ export const initialiseBoutonCalculLivraison = (): void => {
// Réalise la requête et traite sa réponse // Réalise la requête et traite sa réponse
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse(argumentsFormulaire, WCStoreCartUpdateCustomerArgsSchema)) .liftEither(eitherValiParse(argumentsFormulaire, WCStoreCartUpdateCustomerArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement // 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement
.ifRight((): void => { .ifRight((): void => {
// Désactive le Bouton pour empêcher des requêtes concurrentes // Désactive le Bouton pour empêcher des requêtes concurrentes
@ -176,28 +194,29 @@ export const initialiseBoutonCalculLivraison = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corps: unknown) => EitherAsync.liftEither(eitherParse(corps, WCStoreCartSchema))) .chain((corps: unknown) => EitherAsync.liftEither(eitherValiParse(corps, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart): void => { .ifRight((panier: WCStoreCart): void => {
E.MESSAGE_ADRESSES.textContent = " "; E.MESSAGE_ADRESSES.textContent = " ";
const sousTotalLivraison = panier.totals.total_shipping === 0 // const sousTotalLivraison = panier.totals.total_shipping === 0
? "Free" // ? "Free"
: pipe(diviseParCent(panier.totals.total_shipping), formateEnEuros); // : pipe(diviseParCent(panier.totals.total_shipping), formateEnEuros);
const sousTotalLivraison = pipe(diviseParCent(panier.totals.total_shipping), formateEnEuros);
const methodesLivraison = pipe(arrayHead(panier.shipping_rates), optionFlatMap(dictGet("shipping_rates"))); const methodesLivraison = pipe(arrayHead(panier.shipping_rates), optionFlatMap(dictGet("shipping_rates")));
const methodeChoisie = optionFlatMap(methodesLivraison, arrayHead);
const prestataireLivraison = pipe(methodeChoisie, optionFlatMap(dictGet("name")));
// Met à jour les informations de Livraison affichés à l'Utilisateur // Met à jour les informations de Livraison affichés à l'Utilisateur
E.TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison; E.SOUS_TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison;
E.TOTAL_LIVRAISON_PRESTATAIRE.textContent = optionGetWithDefault(prestataireLivraison, "???");
// Sauvegarde la Méthode de Livraison dans le Stockage de Session // Sauvegarde la Méthode de Livraison dans LocalStorage
sessionStorage.setItem( localStorage.setItem(
"shipping_rates", "shipping_rates",
JSON.stringify(optionGetWithDefault(methodesLivraison, [])), JSON.stringify(optionGetWithDefault(methodesLivraison, [])),
); );
// Affiche les méthodes disponibles à l'Utilisateur
genereHtmlMethodesLivraison(E.CONTENEUR_METHODES_LIVRAISON, optionGetWithDefault(methodesLivraison, []));
// Active le Bouton pour la création de la Commande // Active le Bouton pour la création de la Commande
E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Check-out"; E.BOUTON_ACTIONS_FORMULAIRE.textContent = "Check-out";
E.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_LIVRAISON_VALIDEE, ""); E.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_LIVRAISON_VALIDEE, "");
@ -277,7 +296,7 @@ export const initialiseBoutonCreationCommande = (): void => {
// Récupère la méthode de livraison depuis le stockage de session sous forme d'objet // Récupère la méthode de livraison depuis le stockage de session sous forme d'objet
.chain(eitherJsonParse) .chain(eitherJsonParse)
// Vérifie la forme de l'objet récupéré // Vérifie la forme de l'objet récupéré
.chain((json: JSONValue) => eitherParse(json, WCStoreShippingRateShippingRatesSchema)) .chain((json: JSONValue) => eitherValiParse(json, WCStoreShippingRateShippingRatesSchema))
// Traite de manière différenciée les Erreurs // Traite de manière différenciée les Erreurs
.ifLeft((erreur: NonExistingKeyError | SyntaxError | ValiError<AnySchema>): void => { .ifLeft((erreur: NonExistingKeyError | SyntaxError | ValiError<AnySchema>): void => {
match(erreur) match(erreur)
@ -356,7 +375,7 @@ export const initialiseBoutonCreationCommande = (): void => {
// Réalise la requête et traite sa réponse // Réalise la requête et traite sa réponse
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse(argumentsFormulaire, WCV3OrdersArgsSchema)) .liftEither(eitherValiParse(argumentsFormulaire, WCV3OrdersArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement // 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement
.ifRight((): void => { .ifRight((): void => {
// Désactive le Bouton pour empêcher des requêtes concurrentes // Désactive le Bouton pour empêcher des requêtes concurrentes
@ -382,7 +401,7 @@ export const initialiseBoutonCreationCommande = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corps: unknown) => EitherAsync.liftEither(eitherParse(corps, WCV3OrderSchema))) .chain((corps: unknown) => EitherAsync.liftEither(eitherValiParse(corps, WCV3OrderSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((commande: WCV3Order): void => { .ifRight((commande: WCV3Order): void => {
E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT); E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT);
@ -390,11 +409,11 @@ export const initialiseBoutonCreationCommande = (): void => {
E.MESSAGE_ADRESSES.textContent = " "; E.MESSAGE_ADRESSES.textContent = " ";
// Redirige vers Stripe // Redirige vers Stripe
Option Maybe
.fromNullable(new URL(`https://${window.location.host}/checkout`)) .fromNullable(new URL(`https://${window.location.host}/checkout`))
.tapSome(url => url.searchParams.append("order_key", commande.order_key)) .ifJust(url => url.searchParams.append("order_key", commande.order_key))
.tapSome(url => url.searchParams.append("order_id", String(commande.id))) .ifJust(url => url.searchParams.append("order_id", String(commande.id)))
.tapSome(url => location.assign(url)); .ifJust(url => location.assign(url));
}) })
// 7. Traite les Erreurs et affiche un message à l'Utilisateur // 7. Traite les Erreurs et affiche un message à l'Utilisateur
.ifLeft((erreur: FetchErrors | HttpCodeErrors | ValiError<AnySchema>): void => { .ifLeft((erreur: FetchErrors | HttpCodeErrors | ValiError<AnySchema>): void => {

View file

@ -33,6 +33,7 @@ import { lanceAnimationCycleLoading } from "../lib/animations";
import { accorderCibleASelecteur } from "../lib/dom"; import { accorderCibleASelecteur } from "../lib/dom";
import { reporteErreur, ServerError } from "../lib/erreurs"; import { reporteErreur, ServerError } from "../lib/erreurs";
import { ErreurCodePromoInvalide } from "../lib/erreurs/codes-promo"; import { ErreurCodePromoInvalide } from "../lib/erreurs/codes-promo";
import { CODE_PROMO_MAJ_EVENT } from "../lib/evenements/panier";
import { estReponse500 } from "../lib/gardes"; import { estReponse500 } from "../lib/gardes";
import { emetUniqueMessageBroadcastChannel, reponseEstCodeErreurWC } from "../lib/messages"; import { emetUniqueMessageBroadcastChannel, reponseEstCodeErreurWC } from "../lib/messages";
import { arrondisADeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from "../lib/nombres"; import { arrondisADeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from "../lib/nombres";
@ -41,7 +42,7 @@ import { WCStoreCartSchema } from "../lib/schemas/api/cart";
import { WCStoreCartApplyCouponArgsSchema } from "../lib/schemas/api/cart-apply-coupon"; import { WCStoreCartApplyCouponArgsSchema } from "../lib/schemas/api/cart-apply-coupon";
import { WCStoreCartRemoveCouponArgsSchema } from "../lib/schemas/api/cart-remove-coupon"; import { WCStoreCartRemoveCouponArgsSchema } from "../lib/schemas/api/cart-remove-coupon";
import { recupereEleOuLeve } from "../lib/utils"; import { recupereEleOuLeve } from "../lib/utils";
import { eitherParse } from "../lib/validation"; import { eitherValiParse } from "../lib/validation";
// @ts-expect-error -- États injectés par le modèle PHP // @ts-expect-error -- États injectés par le modèle PHP
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP
@ -82,7 +83,7 @@ export const initialiseElementsCodePromo = (): void => {
({ valeurCodePromo }) => ({ valeurCodePromo }) =>
void EitherAsync void EitherAsync
// Vérifie le Schéma des arguments // Vérifie le Schéma des arguments
.liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartApplyCouponArgsSchema)) .liftEither(eitherValiParse({ code: valeurCodePromo }, WCStoreCartApplyCouponArgsSchema))
.ifRight(() => { .ifRight(() => {
// Désactive le Bouton pour empêcher des requêtes concurrentes // Désactive le Bouton pour empêcher des requêtes concurrentes
E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, "");
@ -120,7 +121,7 @@ export const initialiseElementsCodePromo = (): void => {
}) })
) )
// Vérifie le Schéma de la Réponse du backend // Vérifie le Schéma de la Réponse du backend
.chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherValiParse(corpsReponse, WCStoreCartSchema)))
// Déclenche les mises à jour du DOM avec les données du nouveau Panier // Déclenche les mises à jour du DOM avec les données du nouveau Panier
.ifRight((panier: WCStoreCart) => { .ifRight((panier: WCStoreCart) => {
E.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); E.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);
@ -141,7 +142,8 @@ export const initialiseElementsCodePromo = (): void => {
formateEnEuros, formateEnEuros,
); );
emetUniqueMessageBroadcastChannel(NOM_CANAL_REVALIDATION_LIVRAISON, true); window.dispatchEvent(CODE_PROMO_MAJ_EVENT);
// emetUniqueMessageBroadcastChannel(NOM_CANAL_REVALIDATION_LIVRAISON, true);
}) })
.ifLeft(erreur => { .ifLeft(erreur => {
// Rétablis le texte d'origine // Rétablis le texte d'origine
@ -174,6 +176,7 @@ export const initialiseElementsCodePromo = (): void => {
}) })
.finally(() => { .finally(() => {
// Désactive l'animation de chargement et rend le Bouton de nouveau cliquable // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable
// TODO: Créer un type d'Événement ?
E.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT); E.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT);
E.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE); E.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE);
}) })
@ -189,7 +192,7 @@ export const initialiseElementsCodePromo = (): void => {
}, },
({ valeurCodePromo }) => ({ valeurCodePromo }) =>
void EitherAsync void EitherAsync
.liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartRemoveCouponArgsSchema)) .liftEither(eitherValiParse({ code: valeurCodePromo }, WCStoreCartRemoveCouponArgsSchema))
.ifRight(() => { .ifRight(() => {
E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, "");
E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, ""); E.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, "");
@ -209,7 +212,7 @@ export const initialiseElementsCodePromo = (): void => {
return await reponse.json(); return await reponse.json();
}) })
) )
.chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherValiParse(corpsReponse, WCStoreCartSchema)))
.ifRight((panier: WCStoreCart) => { .ifRight((panier: WCStoreCart) => {
E.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); E.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);
E.ENSEMBLE_CODE_PROMO.reset(); E.ENSEMBLE_CODE_PROMO.reset();

View file

@ -0,0 +1,111 @@
import { find as arrayFind, forEach as arrayForEach, map as arrayMap } from "@mobily/ts-belt/Array";
import { html, render, type TemplateResult } from "lit-html";
import { Maybe } from "purify-ts";
import type { WCStoreShippingRateShippingRate } from "../lib/types/api/cart";
import type { WCStoreShippingRateShippingRates } from "../lib/types/api/couts-livraison";
import {
ATTRIBUT_HIDDEN,
SELECTEUR_CONTENEUR_METHODES_LIVRAISON,
SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,
SELECTEUR_SOUS_TOTAL_PRODUITS,
SELECTEUR_TOTAL_PANIER,
} from "../constantes/dom";
import { recupereElementsAvecSelecteur } from "../lib/dom";
import { reporteEtJournaliseErreur } from "../lib/erreurs";
import { getAndParseLocalStorage } from "../lib/local-storage";
import { diviseParCent, diviseParCentEtFormateEnEuros, formateEnEuros } from "../lib/nombres";
import { WCStoreShippingRateShippingRatesSchema } from "../lib/schemas/api/couts-livraison";
import { recupereEleOuLeve } from "../lib/utils";
const E = {
CONTENEUR_METHODES_LIVRAISON: recupereEleOuLeve<HTMLFieldSetElement>(SELECTEUR_CONTENEUR_METHODES_LIVRAISON),
SOUS_TOTAL_LIVRAISON_COUT: recupereEleOuLeve<HTMLElement>(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),
SOUS_TOTAL_PRODUITS: recupereEleOuLeve<HTMLElement>(SELECTEUR_SOUS_TOTAL_PRODUITS),
TOTAL_PANIER: recupereEleOuLeve<HTMLSpanElement>(SELECTEUR_TOTAL_PANIER),
};
/**
* Créé un Événement MethodesLivraisonMaj déclenché quand l'Utilisateur change son choix avec en corps un object ShippingRates
* À l'Émission, sauvegarde les méthodes mises à jour dans le LocalStorage et met à jour le DOM
* Le déclenchement de la mise à jour des adresses déclenche aussi cet Événement.
* Le LocalStorage est comparé avec la Réponse, et si la méthode jusqe- sélectionnée est présente dans la Réponse, la mise à jour du DOM doit se faire en conservant ce choix.
*/
export const initialiseBoutonsChoixMethodesLivraison = (): void => {
recupereElementsAvecSelecteur(E.CONTENEUR_METHODES_LIVRAISON)<HTMLInputElement>("input").ifRight(
arrayForEach((i): void =>
// Met à jour sous-total de livraison et total au changement de méthode
i.addEventListener("click", (evenement: MouseEvent): void => {
const methodeChoisie = (evenement.target as HTMLInputElement).value;
getAndParseLocalStorage("shipping_rates", WCStoreShippingRateShippingRatesSchema)
.map(arrayMap((m): WCStoreShippingRateShippingRate => {
m.selected = m.method_id === methodeChoisie;
return m;
}))
// Enregistre les méthodes de livraison mises à jour
.ifRight((xs): void => localStorage.setItem("shipping_rates", JSON.stringify(xs)))
.ifLeft(reporteEtJournaliseErreur)
// Met à jour sous-total livraison et total
.toMaybe()
.chainNullable(xs => xs.find(m => m.selected))
.ifJust((m): void => {
Maybe
.fromNullable(E.SOUS_TOTAL_PRODUITS.textContent)
.map(s => s.split("€")[0])
.chainNullable(Number)
.map(t => formateEnEuros(t + diviseParCent(m.price)))
.ifJust(t => {
E.TOTAL_PANIER.textContent = t;
E.SOUS_TOTAL_LIVRAISON_COUT.textContent = diviseParCentEtFormateEnEuros(m.price);
});
});
})
),
);
};
export const genereHtmlMethodesLivraison = (
conteneur: HTMLElement,
methodes: WCStoreShippingRateShippingRates,
): void => {
// Cache les méthodes s'il n'y en a pas
if (methodes.length === 0) {
conteneur.setAttribute(ATTRIBUT_HIDDEN, "");
return;
}
// Retire les méthodes de livraison initiales
recupereElementsAvecSelecteur(conteneur)("div[data-methode-initiale]").ifRight(arrayForEach(div => div.remove()));
const methodeSelectionnee: string = getAndParseLocalStorage("shipping_rates", WCStoreShippingRateShippingRatesSchema)
.ifLeft(reporteEtJournaliseErreur)
.toMaybe()
.chainNullable(arrayFind(m => m.selected))
.map(m => m.method_id)
.orDefault("");
const methodesHtml: ReadonlyArray<TemplateResult> = arrayMap(methodes, methode => {
return html`
<div>
<input
id="methode-livraison-${methode.method_id}"
name="choix-methode-livraison"
type="radio"
value="${methode.method_id}"
.checked="${methode.method_id === methodeSelectionnee}"
>
<label for="methode-livraison-${methode.method_id}">${methode.name} (${
diviseParCentEtFormateEnEuros(methode.price)
})</label>
</div>`;
});
// Ajoute les nouveaux Produits dans le DOM
conteneur.removeAttribute(ATTRIBUT_HIDDEN);
render(methodesHtml, conteneur);
// Recréé les Écouteurs de clic sur les choix de méthodes
initialiseBoutonsChoixMethodesLivraison();
};

View file

@ -37,7 +37,7 @@ import { WCStoreCartSchema } from "../lib/schemas/api/cart";
import { WCStoreCartRemoveItemArgsSchema } from "../lib/schemas/api/cart-remove-item"; import { WCStoreCartRemoveItemArgsSchema } from "../lib/schemas/api/cart-remove-item";
import { WCStoreCartUpdateItemArgsSchema } from "../lib/schemas/api/cart-update-item"; import { WCStoreCartUpdateItemArgsSchema } from "../lib/schemas/api/cart-update-item";
import { recupereElementsDocumentEither } from "../lib/utils"; import { recupereElementsDocumentEither } from "../lib/utils";
import { eitherParse } from "../lib/validation"; import { eitherValiParse } from "../lib/validation";
// @ts-expect-error -- États injectés par le modèle PHP // @ts-expect-error -- États injectés par le modèle PHP
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP
@ -122,7 +122,9 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réalise la requête et traite sa réponse // Réalise la requête et traite sa réponse
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse({ key: clePanier, quantity: valeur + 1 }, WCStoreCartUpdateItemArgsSchema)) .liftEither(
eitherValiParse({ key: clePanier, quantity: valeur + 1 }, WCStoreCartUpdateItemArgsSchema),
)
// 2. Exécute un Effet pour empêcher les requêtes concurrentes // 2. Exécute un Effet pour empêcher les requêtes concurrentes
.ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false))) .ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false)))
// 3. Exécute la requête via fetch sous forme d'EitherAsync // 3. Exécute la requête via fetch sous forme d'EitherAsync
@ -145,7 +147,7 @@ export const initialiseActionsEntreesPanier = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corps: unknown) => EitherAsync.liftEither(eitherParse(corps, WCStoreCartSchema))) .chain((corps: unknown) => EitherAsync.liftEither(eitherValiParse(corps, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart): void => { .ifRight((panier: WCStoreCart): void => {
// Émet un Message avec le nouveau nombre de Produits dans le Panier // Émet un Message avec le nouveau nombre de Produits dans le Panier
@ -202,7 +204,9 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réalise la requête et traite sa réponse // Réalise la requête et traite sa réponse
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse({ key: clePanier, quantity: valeur - 1 }, WCStoreCartUpdateItemArgsSchema)) .liftEither(
eitherValiParse({ key: clePanier, quantity: valeur - 1 }, WCStoreCartUpdateItemArgsSchema),
)
// 2. Exécute un Effet pour empêcher les requêtes concurrentes // 2. Exécute un Effet pour empêcher les requêtes concurrentes
.ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false))) .ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false)))
// 3. Exécute la requête via fetch sous forme d'EitherAsync // 3. Exécute la requête via fetch sous forme d'EitherAsync
@ -225,7 +229,7 @@ export const initialiseActionsEntreesPanier = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corps: unknown) => EitherAsync.liftEither(eitherParse(corps, WCStoreCartSchema))) .chain((corps: unknown) => EitherAsync.liftEither(eitherValiParse(corps, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart): void => { .ifRight((panier: WCStoreCart): void => {
// Émet un Message avec le nouveau nombre de Produits dans le Panier // Émet un Message avec le nouveau nombre de Produits dans le Panier
@ -281,7 +285,7 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réalise la requête et traite sa réponse // Réalise la requête et traite sa réponse
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse({ key: clePanier }, WCStoreCartRemoveItemArgsSchema)) .liftEither(eitherValiParse({ key: clePanier }, WCStoreCartRemoveItemArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes // 2. Exécute un Effet pour empêcher les requêtes concurrentes
.ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false))) .ifRight(() => pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(false)))
// 3. Exécute la requête via fetch sous forme d'EitherAsync // 3. Exécute la requête via fetch sous forme d'EitherAsync
@ -304,7 +308,7 @@ export const initialiseActionsEntreesPanier = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corps: unknown) => EitherAsync.liftEither(eitherParse(corps, WCStoreCartSchema))) .chain((corps: unknown) => EitherAsync.liftEither(eitherValiParse(corps, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart): void => { .ifRight((panier: WCStoreCart): void => {
// Émet un Message avec le nouveau nombre de Produits dans le Panier // Émet un Message avec le nouveau nombre de Produits dans le Panier

View file

@ -28,7 +28,7 @@ import { BadRequestError, reporteErreur, ServerError } from "./lib/erreurs.ts";
import { creeReponseSimplifiee, getBackendAvecParametresUrl } from "./lib/reseau.ts"; import { creeReponseSimplifiee, getBackendAvecParametresUrl } from "./lib/reseau.ts";
import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts"; import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts";
import { recupereEleOuLeve } from "./lib/utils.ts"; import { recupereEleOuLeve } from "./lib/utils.ts";
import { eitherParse } from "./lib/validation.ts"; import { eitherValiParse } from "./lib/validation.ts";
// @ts-expect-error -- États injectés par le modèle PHP // @ts-expect-error -- États injectés par le modèle PHP
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP
@ -62,7 +62,7 @@ const initialisePageBoutique = (): void => {
void EitherAsync void EitherAsync
// 1. Valide les Arguments de la Requête // 1. Valide les Arguments de la Requête
.liftEither(eitherParse(args, WCV3ProductsArgsSchema)) .liftEither(eitherValiParse(args, WCV3ProductsArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement // 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement
.ifRight(() => { .ifRight(() => {
// Désactive le Bouton pour empêcher des requêtes concurrentes // Désactive le Bouton pour empêcher des requêtes concurrentes
@ -94,7 +94,7 @@ const initialisePageBoutique = (): void => {
}) })
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCV3ProductsSchema))) .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherValiParse(corpsReponse, WCV3ProductsSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((donnees: WCV3Products) => { .ifRight((donnees: WCV3Products) => {
// Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page) // Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page)

View file

@ -33,12 +33,13 @@ import { valideMessageMajBoutonPanier, valideMessageMajContenuPanier } from "./l
import { arrondisADeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from "./lib/nombres.ts"; import { arrondisADeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from "./lib/nombres.ts";
import { propEither, recupereElementsDocumentEither, recupereEleOuLeve } from "./lib/utils.ts"; import { propEither, recupereElementsDocumentEither, recupereEleOuLeve } from "./lib/utils.ts";
import { import {
demandeRevalidationLivraisonAMajFormulaires,
initialiseBoutonCalculLivraison, initialiseBoutonCalculLivraison,
initialiseBoutonCreationCommande, initialiseBoutonCreationCommande,
initialiseCanalRevalidationLivraison, initialiseEmetteursEvenementsFormulairePanier,
souscrisEvenementsPanier,
} from "./page-panier/scripts-page-panier-adresses.ts"; } from "./page-panier/scripts-page-panier-adresses.ts";
import { initialiseElementsCodePromo } from "./page-panier/scripts-page-panier-code-promo.ts"; import { initialiseElementsCodePromo } from "./page-panier/scripts-page-panier-code-promo.ts";
import { initialiseBoutonsChoixMethodesLivraison } from "./page-panier/scripts-page-panier-methodes-livraison.ts";
import { initialiseActionsEntreesPanier } from "./page-panier/scripts-page-panier-panneau-produits.ts"; import { initialiseActionsEntreesPanier } from "./page-panier/scripts-page-panier-panneau-produits.ts";
type ElementsEntreePanier = { type ElementsEntreePanier = {
@ -193,13 +194,14 @@ const initialiseMajFormulairesPanier = (): void => {
}; };
document.addEventListener("DOMContentLoaded", (): void => { document.addEventListener("DOMContentLoaded", (): void => {
initialiseCanalRevalidationLivraison(); initialiseEmetteursEvenementsFormulairePanier();
souscrisEvenementsPanier();
initialiseActionsEntreesPanier(); initialiseActionsEntreesPanier();
initialiseBoutonsChoixMethodesLivraison();
initialiseMajConteneurPanier(); initialiseMajConteneurPanier();
initialiseMajContenuPanier(); initialiseMajContenuPanier();
initialiseMajFormulairesPanier(); initialiseMajFormulairesPanier();
initialiseBoutonCalculLivraison(); initialiseBoutonCalculLivraison();
initialiseBoutonCreationCommande(); initialiseBoutonCreationCommande();
initialiseElementsCodePromo(); initialiseElementsCodePromo();
demandeRevalidationLivraisonAMajFormulaires();
}); });

View file

@ -40,7 +40,7 @@ import { creeReponseSimplifiee, eitherAsyncFetch, postBackend } from "./lib/rese
import { WCStoreCartAddItemArgsSchema } from "./lib/schemas/api/cart-add-item.ts"; import { WCStoreCartAddItemArgsSchema } from "./lib/schemas/api/cart-add-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/api/cart.ts"; import { WCStoreCartSchema } from "./lib/schemas/api/cart.ts";
import { recupereElementDocumentEither, recupereEleOuLeve, recupereElesOuLeve } from "./lib/utils.ts"; import { recupereElementDocumentEither, recupereEleOuLeve, recupereElesOuLeve } from "./lib/utils.ts";
import { eitherParse } from "./lib/validation.ts"; import { eitherValiParse } from "./lib/validation.ts";
type EnsembleLienContenu = [HTMLAnchorElement, HTMLElement]; type EnsembleLienContenu = [HTMLAnchorElement, HTMLElement];
/** États utiles pour les scripts de la page. */ /** États utiles pour les scripts de la page. */
@ -201,7 +201,7 @@ const ajouteProduitAuPanier = (): void => {
// Réalise la Requête et traite sa Réponse // Réalise la Requête et traite sa Réponse
void EitherAsync void EitherAsync
// 1. Valide les arguments de la Requête // 1. Valide les arguments de la Requête
.liftEither(eitherParse(argsRequete, WCStoreCartAddItemArgsSchema)) .liftEither(eitherValiParse(argsRequete, WCStoreCartAddItemArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement // 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement
.ifRight(() => { .ifRight(() => {
// Désactive le Bouton pour empêcher des requêtes concurrentes // Désactive le Bouton pour empêcher des requêtes concurrentes
@ -233,7 +233,7 @@ const ajouteProduitAuPanier = (): void => {
) )
) )
// 5. Vérifie le Schéma de la Réponse // 5. Vérifie le Schéma de la Réponse
.chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherValiParse(corpsReponse, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats // 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart) => .ifRight((panier: WCStoreCart) =>
pipe( pipe(

View file

@ -40,7 +40,7 @@
<div class="detail-produit__actions"> <div class="detail-produit__actions">
<button <button
class="detail-produit__actions__soustraction" class="detail-produit__actions__soustraction"
{{ produit.quantite > 1 ? "" : "disabled" }} {{ produit.quantite < 1 ? "disabled" }}
type="button" type="button"
> >
- -
@ -85,18 +85,18 @@
<form <form
action="" action=""
class="panneau__instructions-code-promo__code-promo" class="panneau__instructions-code-promo__code-promo"
{{ code_promo ? "data-code-promo-present" : "" }} {{ code_promo ? "data-code-promo-present" }}
id="ensemble-code-promo" id="ensemble-code-promo"
> >
<input <input
{{ code_promo ? "disabled" : "" }} {{ code_promo ? "disabled" }}
id="champ-code-promo" id="champ-code-promo"
maxlength="20" maxlength="20"
minlength="3" minlength="3"
name="code-promo" name="code-promo"
placeholder="Discount code or gift card" placeholder="Discount code or gift card"
type="text" type="text"
value='{{ code_promo ? code_promo : ""}}' value="{{ code_promo ? code_promo }}"
> >
<button <button
class="bouton-blanc-sur-noir" class="bouton-blanc-sur-noir"
@ -123,7 +123,7 @@
<div <div
class="panneau__sous-totaux__ligne" class="panneau__sous-totaux__ligne"
id="sous-total-reduction" id="sous-total-reduction"
{{ code_promo ? "" : "hidden"}} {{ not code_promo ? "hidden"}}
> >
<p>Discount:</p> <p>Discount:</p>
<p><strong>-{{ sous_total_reduction }}€</strong></p> <p><strong>-{{ sous_total_reduction }}€</strong></p>
@ -134,23 +134,43 @@
id="sous-total-livraison" id="sous-total-livraison"
> >
<p>Shipping:</p> <p>Shipping:</p>
{% if sous_total_livraison == 0 %} {% if not adresse_renseignee %}
<p> <p>
<strong>Enter your delivery address</strong> <strong>Enter your delivery address</strong>
<br>
<span>&nbsp;</span>
</p> </p>
{% else %} {% else %}
<p> <p>
<strong>{{ sous_total_livraison }}€</strong> <strong>{{ sous_total_livraison }}€</strong>
<br>
<span>{{ methode_livraison }}</span>
</p> </p>
{% endif %} {% endif %}
</div> </div>
<fieldset
class="panneau__sous-totaux__choix-methode-livraison"
{{ not adresse_renseignee ? "hidden" }}
id="choix-methode-livraison"
>
<label>Select your shipping method</label>
{% for methode_livraison in methodes_livraison %}
<div data-methode-initiale>
<input
{{ methode_livraison.selectionnee ? "checked"}}
data-prix="{{ methode_livraison.prix }}"
id="methode-livraison-{{ methode_livraison.id }}"
name="choix-methode-livraison"
type="radio"
value="{{ methode_livraison.id }}"
>
<label for="methode-livraison-{{ methode_livraison.id }}">{{ methode_livraison.titre }} ({{
methode_livraison.prix
}}€)</label>
</div>
{% endfor %}
</fieldset>
<p class="panneau__sous-totaux__conditions-livraison"> <p class="panneau__sous-totaux__conditions-livraison">
Belgium and France: free shipping on orders above 50€.<br> Belgium and France: free shipping on orders above 50€ (Pickup Point only).<br>
Worldwide: free shipping on orders above 100€. Worldwide: free shipping on orders above 100€.
</p> </p>
</div> </div>