2024-11-29

This commit is contained in:
gcch 2024-11-29 09:04:11 +01:00
commit 700299157c
66 changed files with 478 additions and 451 deletions

View file

@ -29,6 +29,8 @@
"ETATS",
"etendu",
"exts",
"Fenetre",
"FENETRE",
"formatte",
"generique",
"geometricprecision",
@ -44,12 +46,14 @@
"multiformats",
"paypal",
"phpstan",
"Planifiee",
"prenom",
"presentes",
"problemes",
"Proprietes",
"rafraichissement",
"rapprochee",
"recalcul",
"reponse",
"requete",
"resultat",

View file

@ -3,14 +3,13 @@
- [-] Bouton « Réinitialiser » pour les Adresses
- Emails
- Gestion des erreurs sur le Panier
- Ajouter une flèche pour revenir en haut de la page
- Menu Mobile
- Reprendre pour suivre la maquette initiale
- PayPal à faire
- Styles pour les focus à faire
- Boutons
- Champs
- Envoyer des emails aux deux clients
- Reporter toutes les erreurs
---

89
composer.lock generated
View file

@ -2288,16 +2288,16 @@
},
{
"name": "symfony/clock",
"version": "v7.1.6",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/clock.git",
"reference": "97bebc53548684c17ed696bc8af016880f0f098d"
"reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d",
"reference": "97bebc53548684c17ed696bc8af016880f0f098d",
"url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
"reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24",
"shasum": ""
},
"require": {
@ -2342,7 +2342,7 @@
"time"
],
"support": {
"source": "https://github.com/symfony/clock/tree/v7.1.6"
"source": "https://github.com/symfony/clock/tree/v7.2.0"
},
"funding": [
{
@ -2358,7 +2358,7 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "symfony/deprecation-contracts",
@ -2899,20 +2899,21 @@
},
{
"name": "symfony/translation",
"version": "v7.1.6",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f"
"reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f",
"reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f",
"url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5",
"reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
},
@ -2973,7 +2974,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v7.1.6"
"source": "https://github.com/symfony/translation/tree/v7.2.0"
},
"funding": [
{
@ -2989,7 +2990,7 @@
"type": "tidelift"
}
],
"time": "2024-09-28T12:35:13+00:00"
"time": "2024-11-12T20:47:56+00:00"
},
{
"name": "symfony/translation-contracts",
@ -3071,16 +3072,16 @@
},
{
"name": "symfony/uid",
"version": "v7.1.6",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
"reference": "65befb3bb2d503bbffbd08c815aa38b472999917"
"reference": "2d294d0c48df244c71c105a169d0190bfb080426"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917",
"reference": "65befb3bb2d503bbffbd08c815aa38b472999917",
"url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426",
"reference": "2d294d0c48df244c71c105a169d0190bfb080426",
"shasum": ""
},
"require": {
@ -3125,7 +3126,7 @@
"uuid"
],
"support": {
"source": "https://github.com/symfony/uid/tree/v7.1.6"
"source": "https://github.com/symfony/uid/tree/v7.2.0"
},
"funding": [
{
@ -3141,7 +3142,7 @@
"type": "tidelift"
}
],
"time": "2024-09-25T14:20:29+00:00"
"time": "2024-09-25T14:21:43+00:00"
},
{
"name": "timber/timber",
@ -3247,16 +3248,16 @@
},
{
"name": "twig/twig",
"version": "v3.15.0",
"version": "v3.16.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02"
"reference": "475ad2dc97d65d8631393e721e7e44fb544f0561"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/2d5b3964cc21d0188633d7ddce732dc8e874db02",
"reference": "2d5b3964cc21d0188633d7ddce732dc8e874db02",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/475ad2dc97d65d8631393e721e7e44fb544f0561",
"reference": "475ad2dc97d65d8631393e721e7e44fb544f0561",
"shasum": ""
},
"require": {
@ -3267,6 +3268,7 @@
"symfony/polyfill-php81": "^1.29"
},
"require-dev": {
"phpstan/phpstan": "^2.0",
"psr/container": "^1.0|^2.0",
"symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0"
},
@ -3310,7 +3312,7 @@
],
"support": {
"issues": "https://github.com/twigphp/Twig/issues",
"source": "https://github.com/twigphp/Twig/tree/v3.15.0"
"source": "https://github.com/twigphp/Twig/tree/v3.16.0"
},
"funding": [
{
@ -3322,7 +3324,7 @@
"type": "tidelift"
}
],
"time": "2024-11-17T15:59:19+00:00"
"time": "2024-11-29T08:27:05+00:00"
},
{
"name": "vlucas/phpdotenv",
@ -5889,16 +5891,16 @@
},
{
"name": "symfony/console",
"version": "v7.1.8",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5"
"reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5",
"reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5",
"url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf",
"reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf",
"shasum": ""
},
"require": {
@ -5962,7 +5964,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.1.8"
"source": "https://github.com/symfony/console/tree/v7.2.0"
},
"funding": [
{
@ -5978,20 +5980,20 @@
"type": "tidelift"
}
],
"time": "2024-11-06T14:23:19+00:00"
"time": "2024-11-06T14:24:19+00:00"
},
{
"name": "symfony/filesystem",
"version": "v7.1.6",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4"
"reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4",
"reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
"reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb",
"shasum": ""
},
"require": {
@ -6028,7 +6030,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/filesystem/tree/v7.1.6"
"source": "https://github.com/symfony/filesystem/tree/v7.2.0"
},
"funding": [
{
@ -6044,7 +6046,7 @@
"type": "tidelift"
}
],
"time": "2024-10-25T15:11:02+00:00"
"time": "2024-10-25T15:15:23+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
@ -6290,16 +6292,16 @@
},
{
"name": "symfony/string",
"version": "v7.1.8",
"version": "v7.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281"
"reference": "446e0d146f991dde3e73f45f2c97a9faad773c82"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281",
"reference": "591ebd41565f356fcd8b090fe64dbb5878f50281",
"url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82",
"reference": "446e0d146f991dde3e73f45f2c97a9faad773c82",
"shasum": ""
},
"require": {
@ -6357,7 +6359,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.1.8"
"source": "https://github.com/symfony/string/tree/v7.2.0"
},
"funding": [
{
@ -6373,7 +6375,7 @@
"type": "tidelift"
}
],
"time": "2024-11-13T13:31:21+00:00"
"time": "2024-11-13T13:31:26+00:00"
},
{
"name": "szepeviktor/phpstan-wordpress",
@ -6406,6 +6408,7 @@
"suggest": {
"swissspidy/phpstan-no-private": "Detect usage of internal core functions, classes and methods"
},
"default-branch": true,
"type": "phpstan-extension",
"extra": {
"phpstan": {
@ -6433,7 +6436,7 @@
],
"support": {
"issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
"source": "https://github.com/szepeviktor/phpstan-wordpress/tree/2.x"
"source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v2.0.0"
},
"time": "2024-11-17T13:12:31+00:00"
},

102
pnpm-lock.yaml generated
View file

@ -65,13 +65,13 @@ importers:
version: 4.24.2
eslint:
specifier: ^9.15.0
version: 9.15.0(jiti@2.4.0)
version: 9.15.0(jiti@2.4.1)
eslint-plugin-oxlint:
specifier: ^0.13.2
version: 0.13.2
eslint-plugin-perfectionist:
specifier: ^4.1.2
version: 4.1.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
version: 4.1.2(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
fdir:
specifier: ^6.4.2
version: 6.4.2(picomatch@4.0.2)
@ -122,22 +122,22 @@ importers:
version: 5.8.0-dev.20241122
typescript-eslint:
specifier: ^8.16.0
version: 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
version: 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
vite:
specifier: ^6.0.1
version: 6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)
version: 6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)
vite-plugin-manifest-sri:
specifier: ^0.2.0
version: 0.2.0
vite-plugin-node-polyfills:
specifier: ^0.22.0
version: 0.22.0(rollup@4.27.4)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6))
version: 0.22.0(rollup@4.27.4)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6))
vite-plugin-valibot-env:
specifier: ^0.9.1
version: 0.9.1(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6))
version: 0.9.1(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6))
vite-tsconfig-paths:
specifier: ^5.1.3
version: 5.1.3(typescript@5.8.0-dev.20241122)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6))
version: 5.1.3(typescript@5.8.0-dev.20241122)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6))
wp-types:
specifier: ^4.67.0
version: 4.67.0
@ -1905,8 +1905,8 @@ packages:
resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==}
engines: {node: '>=10'}
jiti@2.4.0:
resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==}
jiti@2.4.1:
resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==}
hasBin: true
js-tokens@4.0.0:
@ -2771,8 +2771,8 @@ packages:
resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==}
engines: {node: '>=14.16'}
ts-api-utils@1.4.2:
resolution: {integrity: sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==}
ts-api-utils@1.4.3:
resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
@ -3183,9 +3183,9 @@ snapshots:
'@esbuild/win32-x64@0.24.0':
optional: true
'@eslint-community/eslint-utils@4.4.1(eslint@9.15.0(jiti@2.4.0))':
'@eslint-community/eslint-utils@4.4.1(eslint@9.15.0(jiti@2.4.1))':
dependencies:
eslint: 9.15.0(jiti@2.4.0)
eslint: 9.15.0(jiti@2.4.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@ -3637,32 +3637,32 @@ snapshots:
dependencies:
undici-types: 6.20.0
'@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122))(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)':
'@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122))(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/parser': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/scope-manager': 8.16.0
'@typescript-eslint/type-utils': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/type-utils': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/visitor-keys': 8.16.0
eslint: 9.15.0(jiti@2.4.0)
eslint: 9.15.0(jiti@2.4.1)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
ts-api-utils: 1.4.2(typescript@5.8.0-dev.20241122)
ts-api-utils: 1.4.3(typescript@5.8.0-dev.20241122)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)':
'@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)':
dependencies:
'@typescript-eslint/scope-manager': 8.16.0
'@typescript-eslint/types': 8.16.0
'@typescript-eslint/typescript-estree': 8.16.0(typescript@5.8.0-dev.20241122)
'@typescript-eslint/visitor-keys': 8.16.0
debug: 4.3.7
eslint: 9.15.0(jiti@2.4.0)
eslint: 9.15.0(jiti@2.4.1)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
@ -3673,13 +3673,13 @@ snapshots:
'@typescript-eslint/types': 8.16.0
'@typescript-eslint/visitor-keys': 8.16.0
'@typescript-eslint/type-utils@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)':
'@typescript-eslint/type-utils@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)':
dependencies:
'@typescript-eslint/typescript-estree': 8.16.0(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
debug: 4.3.7
eslint: 9.15.0(jiti@2.4.0)
ts-api-utils: 1.4.2(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.1)
ts-api-utils: 1.4.3(typescript@5.8.0-dev.20241122)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
@ -3696,19 +3696,19 @@ snapshots:
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
ts-api-utils: 1.4.2(typescript@5.8.0-dev.20241122)
ts-api-utils: 1.4.3(typescript@5.8.0-dev.20241122)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)':
'@typescript-eslint/utils@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.1))
'@typescript-eslint/scope-manager': 8.16.0
'@typescript-eslint/types': 8.16.0
'@typescript-eslint/typescript-estree': 8.16.0(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.0)
eslint: 9.15.0(jiti@2.4.1)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
@ -4244,11 +4244,11 @@ snapshots:
dependencies:
jsonc-parser: 3.3.1
eslint-plugin-perfectionist@4.1.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122):
eslint-plugin-perfectionist@4.1.2(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122):
dependencies:
'@typescript-eslint/types': 8.16.0
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.0)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.1)
natural-orderby: 5.0.0
transitivePeerDependencies:
- supports-color
@ -4263,9 +4263,9 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
eslint@9.15.0(jiti@2.4.0):
eslint@9.15.0(jiti@2.4.1):
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.0))
'@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.19.0
'@eslint/core': 0.9.0
@ -4300,7 +4300,7 @@ snapshots:
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
jiti: 2.4.0
jiti: 2.4.1
transitivePeerDependencies:
- supports-color
@ -4638,7 +4638,7 @@ snapshots:
isomorphic-timers-promises@1.0.1: {}
jiti@2.4.0: {}
jiti@2.4.1: {}
js-tokens@4.0.0: {}
@ -4674,7 +4674,7 @@ snapshots:
easy-table: 1.2.0
enhanced-resolve: 5.17.1
fast-glob: 3.3.2
jiti: 2.4.0
jiti: 2.4.1
js-yaml: 4.1.0
minimist: 1.2.8
picocolors: 1.1.1
@ -5517,7 +5517,7 @@ snapshots:
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
ts-api-utils@1.4.2(typescript@5.8.0-dev.20241122):
ts-api-utils@1.4.3(typescript@5.8.0-dev.20241122):
dependencies:
typescript: 5.8.0-dev.20241122
@ -5535,12 +5535,12 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122):
typescript-eslint@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122):
dependencies:
'@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122))(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/parser': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.0)
'@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122))(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/parser': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
'@typescript-eslint/utils': 8.16.0(eslint@9.15.0(jiti@2.4.1))(typescript@5.8.0-dev.20241122)
eslint: 9.15.0(jiti@2.4.1)
optionalDependencies:
typescript: 5.8.0-dev.20241122
transitivePeerDependencies:
@ -5592,33 +5592,33 @@ snapshots:
vite-plugin-manifest-sri@0.2.0: {}
vite-plugin-node-polyfills@0.22.0(rollup@4.27.4)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)):
vite-plugin-node-polyfills@0.22.0(rollup@4.27.4)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)):
dependencies:
'@rollup/plugin-inject': 5.0.5(rollup@4.27.4)
node-stdlib-browser: 1.3.0
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)
transitivePeerDependencies:
- rollup
vite-plugin-valibot-env@0.9.1(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)):
vite-plugin-valibot-env@0.9.1(valibot@1.0.0-beta.9(typescript@5.8.0-dev.20241122))(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)):
dependencies:
kleur: 4.1.5
log-symbols: 7.0.0
valibot: 1.0.0-beta.9(typescript@5.8.0-dev.20241122)
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)
vite-tsconfig-paths@5.1.3(typescript@5.8.0-dev.20241122)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)):
vite-tsconfig-paths@5.1.3(typescript@5.8.0-dev.20241122)(vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)):
dependencies:
debug: 4.3.7
globrex: 0.1.2
tsconfck: 3.1.4(typescript@5.8.0-dev.20241122)
optionalDependencies:
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6)
vite: 6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6)
transitivePeerDependencies:
- supports-color
- typescript
vite@6.0.1(@types/node@22.10.1)(jiti@2.4.0)(sass-embedded@1.81.0)(sass@1.80.6):
vite@6.0.1(@types/node@22.10.1)(jiti@2.4.1)(sass-embedded@1.81.0)(sass@1.80.6):
dependencies:
esbuild: 0.24.0
postcss: 8.4.49
@ -5626,7 +5626,7 @@ snapshots:
optionalDependencies:
'@types/node': 22.10.1
fsevents: 2.3.3
jiti: 2.4.0
jiti: 2.4.1
sass: 1.80.6
sass-embedded: 1.81.0

View file

@ -233,7 +233,7 @@ button.bouton-blanc-sur-noir {
button.bouton-retour-haut {
position: fixed;
right: var(--espace-xl);
bottom: calc(var(--espace-xl) + var(--pied-de-page-hauteur));
bottom: calc(var(--espace-l) + var(--pied-de-page-hauteur));
transform: rotate(180deg);
padding: var(--espace-m);
visibility: hidden;

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,67 +1,41 @@
{
"_animations.Qm6pdIPC.js": {
"file": "animations.Qm6pdIPC.js",
"name": "animations",
"imports": [
"_utils.DNv5smZT.js"
],
"integrity": "sha512-jRjNX07vm4GLWnKD033PE+nHjYx9KSQx5+wJonXCXerQrHe0yHfpmgiHs1fnPaXkWskasrU8cUc7538+xRfT2Q=="
},
"_api.DpNqIphF.js": {
"file": "api.DpNqIphF.js",
"name": "api",
"integrity": "sha512-mTfL4gtvoz3qjZQc7YT1SR3vveP++WDx2k4ZRvGymQqyphpGVy449QeScFaoHKn1foAIA6tVv3zyLPRRxNe8DA=="
},
"_belt_Option-91f3b350.y_XblYXp.js": {
"file": "belt_Option-91f3b350.y_XblYXp.js",
"name": "belt_Option-91f3b350",
"imports": [
"_utils.DNv5smZT.js"
],
"integrity": "sha512-eOwGPCcuN6HDz5c6hr2qmF+V4eJBx3M7Vq/TnUlpNIbkrm2Czsltx8suxRUwui4TzdEt4t6AJXfkO/gQrPzM6A=="
},
"_exports.1ijyAKMZ.js": {
"file": "exports.1ijyAKMZ.js",
"name": "exports",
"integrity": "sha512-rJhZSofSl3JPZZ+GhoqNey/Yq1PI4SLzLm9zb6x2wNb+XrqHY//eaKKfWFpTDTAq3kb5GA83kQAQCbTIT87dqw=="
},
"_gardes.CgXTclcl.js": {
"file": "gardes.CgXTclcl.js",
"_gardes.CUgVnuaB.js": {
"file": "gardes.CUgVnuaB.js",
"name": "gardes",
"integrity": "sha512-OBCB0p698NhCHDMxxmkgijBmjufwF2NDjZl1j1SlohZYzT/fRqoUURBwr97o1d/d9lx3V86U6dYtn5O5vHFIdQ=="
"integrity": "sha512-vm0IriyudxmLFDDV6rB6o7rCqTsT2I7Rupjru5IX6WuTx8WZ+Pvm8Xnml4qUvhIAcDjM1NnOohGItitNxLKYHA=="
},
"_index-0eef19ec.BdWpJoEP.js": {
"file": "index-0eef19ec.BdWpJoEP.js",
"name": "index-0eef19ec",
"imports": [
"_utils.DNv5smZT.js",
"_belt_Option-91f3b350.y_XblYXp.js"
],
"integrity": "sha512-Tt1Dy4aNY2HiBRTMaY+p12kI46gAAjn0hDK1PyErTNZQchQrynv3RUt8/OKM6iyr0we/wsdae62uEQCVsHR7+w=="
},
"_index-c1cc4c86.BsIfgdq2.js": {
"file": "index-c1cc4c86.BsIfgdq2.js",
"_index-c1cc4c86.RjqwfILA.js": {
"file": "index-c1cc4c86.RjqwfILA.js",
"name": "index-c1cc4c86",
"imports": [
"_belt_Option-91f3b350.y_XblYXp.js",
"_utils.DNv5smZT.js"
"_utils.DS2YS0tX.js"
],
"integrity": "sha512-AR5N1q+q6bqLw0ABJvuY/Q5pPJv/Kt8VRNzU64eiAGoqVQLLNUFaXYytAFZAi/O3qGbveSm6vhV9TbIG08lCwg=="
"integrity": "sha512-H92M5EOab0KcEZ7HG5eU3A04CJhqcemVErVxHIP9cFW4hFUMiL3qB+lv4cQQ7AszeOfbMINXqggZvaG8wfIZfA=="
},
"_index.CuMLbxmh.js": {
"file": "index.CuMLbxmh.js",
"name": "index",
"integrity": "sha512-u/eN65V2Mf+6bp8PJqdo4/z5+Ht+17xIrQG7BPsZWCM8BNgBh9Sllb+qTa1gAqj+f8zUsADoUA93twZvBTU6nQ=="
},
"_messages.B4HRoo_h.js": {
"file": "messages.B4HRoo_h.js",
"_messages.Qx8X6YMT.js": {
"file": "messages.Qx8X6YMT.js",
"name": "messages",
"imports": [
"_validation.CuPxXgCV.js",
"_utils.DNv5smZT.js",
"_validation.p-hUfG_o.js",
"_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js"
],
"integrity": "sha512-6Z51Hgtxxrk+R2ym+m5pryKII+Okf0KF1lfw1fnfI5JQpMOtYNXcfN3u0I2+yKrTn9PQu6G8XPLwiXdlG0BFdQ=="
"integrity": "sha512-PGSWoFfZPADzB4i4pFN468IMt8tYXQrFXOL8sPN5QSBLEu7F4jEFJZ1Ym5iSpomPaXLLIIg2HmXT50yBq8SiHA=="
},
"_nombres.n4VPN7qr.js": {
"file": "nombres.n4VPN7qr.js",
@ -71,33 +45,30 @@
],
"integrity": "sha512-tplE1x3QotJwjR/88Gked0Naxkl+PwUtPNjSDoWwIyl/3Y5jyCSbcBSAvcPNG5K0CyJRnozj5aUiVXazKm50XA=="
},
"_reseau.BY8-4gXm.js": {
"file": "reseau.BY8-4gXm.js",
"_reseau.C8CWV2JS.js": {
"file": "reseau.C8CWV2JS.js",
"name": "reseau",
"imports": [
"_index.CuMLbxmh.js",
"_validation.CuPxXgCV.js",
"_api.DpNqIphF.js",
"_utils.DNv5smZT.js",
"_exports.1ijyAKMZ.js"
"_utils.DS2YS0tX.js",
"_api.DpNqIphF.js"
],
"integrity": "sha512-CovkZ+/wMng2pkuwwix7gEHlZWoGStc/77MrDGhRTZdUtfrdwTkeisXNdtvrb0gM5HnjAlFm8JLlfhI4ov3fog=="
"integrity": "sha512-HUpopU/Kk2R5l1fNpuKaUBAXYyG1/ofIRXmEfXHTElg7E8vbyWAde8b1ZLR4t6iKwl3mhraHzRlPbcjkS3RQEw=="
},
"_utils.DNv5smZT.js": {
"file": "utils.DNv5smZT.js",
"_utils.DS2YS0tX.js": {
"file": "utils.DS2YS0tX.js",
"name": "utils",
"imports": [
"_exports.1ijyAKMZ.js"
],
"integrity": "sha512-sfRBh+WliazJoVRpuqpOcgYR5UMBsUKexeLsOR88eVsmWFpagj9iMCAerlFRz171Id2ikIVK/Y9kUjHmEFCuVw=="
"integrity": "sha512-MpJC/uObUIE48VQyU7cfHHe1oTqniZuIThTp/gXSNBQuWjwwIe5FbCJBeR0+6Ab/oL9nHgMP9lkSb//iVjPPew=="
},
"_validation.CuPxXgCV.js": {
"file": "validation.CuPxXgCV.js",
"_validation.p-hUfG_o.js": {
"file": "validation.p-hUfG_o.js",
"name": "validation",
"imports": [
"_utils.DNv5smZT.js"
"_utils.DS2YS0tX.js"
],
"integrity": "sha512-tznL8NmgoWlo00JJsZaoYA69cCZdCb/wpxB49f6V+tPmm+lcWqN9ugtg4VEv1eQJGJ9hLDtrpm7vrBSzIj0PCA=="
"integrity": "sha512-JiBgCO1G2lYlIBrQ7JQaqIynKpti44CoSRZt5JUluqbzEx6d7RGdtrxvTQOZI71tu4mKeFnViC8rZhlFRyabTw=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/gaffe.ts": {
"file": "gaffe.js",
@ -108,7 +79,7 @@
"_api.DpNqIphF.js",
"_exports.1ijyAKMZ.js"
],
"integrity": "sha512-Ytv7YxquAHWEukHDAUnuQvhyeqoxasaesRX6YRDBi0LTmbmPd3PxbcaLAIQ9J0FsFnywyRr8dyfO9abtB7fX3g=="
"integrity": "sha512-4MYUCOMO0X3HFwN7ubugRTcF0GkMRxsLS0ziTYQewm523z3vWPPAXs9hhGJHjt2jhZY8m1wyadKCJCvBHnVqCA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": {
"file": "scripts-bouton-panier.js",
@ -116,12 +87,12 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_messages.B4HRoo_h.js",
"_utils.DS2YS0tX.js",
"_messages.Qx8X6YMT.js",
"_exports.1ijyAKMZ.js",
"_validation.CuPxXgCV.js"
"_validation.p-hUfG_o.js"
],
"integrity": "sha512-iG6P+98eu+x1s4ON57LdWH+DkkLXG5OICEFxoDXCr6k0X47ToYChMiLKlex1ILE0TB34lBQ+GiMAizLArz2k8A=="
"integrity": "sha512-O2UStDYJI8sYbmVPxIyKcv0LGLbW6e/NnBl5mWF07XE6LrsJCl+6aopsTQso+Rum66nDaBtBmDGXP+ugZx2vRg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-retour-sommet.ts": {
"file": "scripts-bouton-retour-sommet.js",
@ -129,12 +100,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-retour-sommet.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js"
],
"integrity": "sha512-wHWc6eAG1Mx+7lvIcks07qKx1Do70/prEa62AGOad5JO2zCP33O7PhiPzcq79zceO9el+fDEz5LiMpsDqvAgww=="
"integrity": "sha512-eSgUhUMFGH3+lb8VHA7SMxEKH1hennA3ioZtwQRgam4A0PkArixOH6dWVnssBK5m0JS6SI5MSdYw7bbsKO3Iig=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-categories.ts": {
"file": "scripts-menu-categories.js",
@ -143,10 +113,10 @@
"isEntry": true,
"imports": [
"_index.CuMLbxmh.js",
"_utils.DNv5smZT.js",
"_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js"
],
"integrity": "sha512-zsicg9FCUX8+2jnJk6xXVH4+fcv6YX/kh8eGgsnUrNUB99fHk7zEZ08IF0/4zh6W22moc+8BZbgXp+8u4OeG3g=="
"integrity": "sha512-bBtWkcglfOQX2zrtNSjjqbtgvIs/NU5LQCvUUHNSN+vSBZMUfooTPsbhns68cydEkXdIiz1gN4bOJm4NCb2BIQ=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts": {
"file": "scripts-menu-mobile.js",
@ -154,12 +124,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js"
],
"integrity": "sha512-VnI22OX11MgovPxoms9yzXyOe4ua58dYH+uLXKI2U9TE0gR2fiwUwxlaR5RaU3IdqEo5//89fZSLVxnMke9rDw=="
"integrity": "sha512-I+HieuVa3p0OLDdzNJhRu12fNnKtH0JVInJT+zheNGEFRl03ckB0O261xXeF4hzoGFMRq0r3kMwQ0BiJcaMBvg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": {
"file": "scripts-page-a-propos.js",
@ -167,12 +136,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js"
],
"integrity": "sha512-eAiZkJwn+Tf5URID69tQVpymDTFHIIiI656wWpbJ+ddfR1mpxVblxIwBQTqScop2bnJlc76rttZpStjKOADbRw=="
"integrity": "sha512-wkbRCz77c1NXq/bAIzaGkNsSfKqN+gQxpA8t/VEQCfmQNHJsScjdodSuOefw9WhQQwQpE5CY6QauG7MDOLtRug=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts": {
"file": "scripts-page-accueil.js",
@ -180,13 +148,12 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_utils.DS2YS0tX.js",
"_nombres.n4VPN7qr.js",
"_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js"
],
"integrity": "sha512-9JpaEKsYNltIO6Fwf84bqS4QdE25tRczV09TcKnGB3Kw9O80ATwElB51dNTxwP6XwJB0OZoQrMRDziHh4zh0yw=="
"integrity": "sha512-GF+2quJeXyU5difx44vjv4/eLm7EGD6RS1jTzj68+HzLf0i3kHcFMxCwYLM5I7Eu0FvDq/DNRTHdH86aRKJQww=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts": {
"file": "scripts-page-boutique.js",
@ -195,16 +162,13 @@
"isEntry": true,
"imports": [
"_index.CuMLbxmh.js",
"_validation.CuPxXgCV.js",
"_validation.p-hUfG_o.js",
"_api.DpNqIphF.js",
"_utils.DNv5smZT.js",
"_animations.Qm6pdIPC.js",
"_reseau.BY8-4gXm.js",
"_exports.1ijyAKMZ.js",
"_index-0eef19ec.BdWpJoEP.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_utils.DS2YS0tX.js",
"_reseau.C8CWV2JS.js",
"_exports.1ijyAKMZ.js"
],
"integrity": "sha512-3kF55bNdRSwZDTQHBm7jb6EO4RNQSPV/JHAvyGTyZSNtuPvnXk414E8ECpLeOLzH+afwpkTtgI68pWjoKYCagw=="
"integrity": "sha512-hkKU+xO2o23KphBXVN7Im7knCzLn4VpgazebmRRJSclm4x1ZX4Q4NwK2K5JpHjzIEyMbAg4UiR8tLkH8EU3kew=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
"file": "scripts-page-panier.js",
@ -212,20 +176,18 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts",
"isEntry": true,
"imports": [
"_utils.DNv5smZT.js",
"_messages.B4HRoo_h.js",
"_utils.DS2YS0tX.js",
"_messages.Qx8X6YMT.js",
"_nombres.n4VPN7qr.js",
"_index.CuMLbxmh.js",
"_validation.CuPxXgCV.js",
"_validation.p-hUfG_o.js",
"_api.DpNqIphF.js",
"_animations.Qm6pdIPC.js",
"_reseau.BY8-4gXm.js",
"_reseau.C8CWV2JS.js",
"_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js",
"_gardes.CgXTclcl.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js",
"_gardes.CUgVnuaB.js"
],
"integrity": "sha512-7oZPpY06yidFju+WmSgSNKZeUUgoowheMZkiDF0AMIw6EnJF2uQIR2yWsPhgEPE5QHwqcPDMpfB00N4KIYh4hA=="
"integrity": "sha512-xWRO6G9WQM4CwzVGBh9FYmHX+fslOq25ELZZZtSgm3Q6wEfCk4uages0uJ2enzKi47OadCASXPx9jNOdWn/fMA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
"file": "scripts-page-produit.js",
@ -234,16 +196,15 @@
"isEntry": true,
"imports": [
"_index.CuMLbxmh.js",
"_validation.p-hUfG_o.js",
"_api.DpNqIphF.js",
"_utils.DNv5smZT.js",
"_gardes.CgXTclcl.js",
"_messages.B4HRoo_h.js",
"_reseau.BY8-4gXm.js",
"_validation.CuPxXgCV.js",
"_utils.DS2YS0tX.js",
"_reseau.C8CWV2JS.js",
"_gardes.CUgVnuaB.js",
"_messages.Qx8X6YMT.js",
"_exports.1ijyAKMZ.js",
"_index-0eef19ec.BdWpJoEP.js",
"_belt_Option-91f3b350.y_XblYXp.js"
"_index-c1cc4c86.RjqwfILA.js"
],
"integrity": "sha512-mk2TzSoaVhfvCK/fna+S/wfq4pAU14NAAJrjfp2IHtEQFUA2SEzv6qbJH3DJ7p5Ty+64ZkJLeeRoVTYm4dvM+A=="
"integrity": "sha512-aqdkuZjhvcdnGLbqGdmYphpDjDprtPrwsr6kTBUQ0LZ78gLuQmhQTVUA4k7/f8FyEhNYt6l4QjtUXEKrIAfLAg=="
}
}

View file

@ -1,2 +0,0 @@
import{B as a}from"./utils.DNv5smZT.js";const i=t=>{const e={callback:()=>{if(!t.element.hasAttribute(t.attribut)){clearInterval(e.interval);return}t.element.textContent=e.etapes.at(e.index)??"Loading...",e.index=e.index+1>e.etapes.length-1?0:e.index+1},etapes:t.etapes,index:0,interval:setInterval(()=>{},2147483647)};return e},o=(t,e)=>{const n=i({attribut:a,element:t,etapes:["Loading","Loading.","Loading..","Loading..."]});n.callback(),n.interval=setInterval(n.callback,e)};export{o as l};
//# sourceMappingURL=animations.Qm6pdIPC.js.map

View file

@ -1 +0,0 @@
{"version":3,"file":"animations.Qm6pdIPC.js","sources":["../../src/scripts/lib/animations.ts"],"sourcesContent":["/** Fonctions pour la création de simples animations JavaScript. */\n\nimport { ATTRIBUT_CHARGEMENT } from \"../constantes/dom\";\n\n// Types\ninterface AnimationCycleTexte {\n callback: () => void;\n etapes: Array<string>;\n index: number;\n interval: NodeJS.Timeout;\n}\n\ninterface ParametresAnimationCycleTexte {\n attribut: string;\n element: HTMLElement;\n etapes: Array<string>;\n}\n\n/**\n * Créer le nécessaire pour une animation s'exécutant jusqu'à ce que un interval soit manuellement arrêté. L'animation\n * consiste en la mise à jour d'un texte avec l'utilisation de toutes les valeurs d'un tableau, une par une.\n *\n * @param args Les paramètres nécessaires pour la création de l'animation.\n * @returns Un objet contenant les informations de l'animation, notamment l'interval utilisable pour son arrêt.\n */\nconst lanceAnimationCycleTexte = (args: ParametresAnimationCycleTexte): AnimationCycleTexte => {\n const animation: AnimationCycleTexte = {\n callback: (): void => {\n // Arrête le cycle quand l'Attribut de chargement n'est plus présent\n if (!args.element.hasAttribute(args.attribut)) {\n clearInterval(animation.interval);\n return;\n }\n\n // Change le texte\n args.element.textContent = animation.etapes.at(animation.index) ?? \"Loading...\";\n // Incrémente ou réinitialise l'index\n animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1;\n },\n etapes: args.etapes,\n index: 0,\n interval: setInterval(() => {}, 2147483647),\n };\n\n return animation;\n};\n\nexport const lanceAnimationCycleLoading = (element: HTMLElement, delai: number): void => {\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: element,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, delai);\n};\n"],"names":["ATTRIBUT_CHARGEMENT","lanceAnimationCycleTexte","args","animation","lanceAnimationCycleLoading","element","delai"],"mappings":"AAyBA,OAAA,KAAAA,MAAA,sBAAA,MAAMC,EAA4BC,GAA6D,CAC7F,MAAMC,EAAiC,CACrC,SAAU,IAAY,CAEpB,GAAI,CAACD,EAAK,QAAQ,aAAaA,EAAK,QAAQ,EAAG,CAC7C,cAAcC,EAAU,QAAQ,EAChC,MAAA,CAIFD,EAAK,QAAQ,YAAcC,EAAU,OAAO,GAAGA,EAAU,KAAK,GAAK,aAEzDA,EAAA,MAAQA,EAAU,MAAQ,EAAIA,EAAU,OAAO,OAAS,EAAI,EAAIA,EAAU,MAAQ,CAC9F,EACA,OAAQD,EAAK,OACb,MAAO,EACP,SAAU,YAAY,IAAM,CAAA,EAAI,UAAU,CAC5C,EAEO,OAAAC,CACT,EAEaC,EAA6B,CAACC,EAAsBC,IAAwB,CACvF,MAAMH,EAAYF,EAAyB,CACzC,SAAUD,EACV,QAAAK,EACA,OAAQ,CACN,UACA,WACA,YACA,YAAA,CACF,CACD,EACDF,EAAU,SAAS,EACnBA,EAAU,SAAW,YAAYA,EAAU,SAAUG,CAAK,CAC5D"}

View file

@ -1,2 +0,0 @@
import{at as f,aq as h}from"./utils.DNv5smZT.js";function l(n,r,i){for(var t=new Array(i),e=0,u=r;e<i;)t[e]=n[u],e=e+1|0,u=u+1|0;return t}function v(n,r){for(;;){var i=r,t=n,e=t.length,u=e===0?1:e,o=u-i.length|0;if(o===0)return t.apply(null,i);if(o>=0)return function(a,c){return function(p){return v(a,c.concat([p]))}}(t,i);r=l(i,u,0|-o),n=t.apply(null,l(i,0,u))}}function d(n,r){var i=n.length;if(i===1)return n(r);switch(i){case 1:return n(r);case 2:return function(t){return n(r,t)};case 3:return function(t,e){return n(r,t,e)};case 4:return function(t,e,u){return n(r,t,e,u)};case 5:return function(t,e,u,o){return n(r,t,e,u,o)};case 6:return function(t,e,u,o,a){return n(r,t,e,u,o,a)};case 7:return function(t,e,u,o,a,c){return n(r,t,e,u,o,a,c)};default:return v(n,[r])}}function _(n){return n.length===1?n:function(r){return d(n,r)}}var s={contents:0};function E(n){return s.contents=s.contents+1|0,n+"/"+s.contents}function w(n){return n==null?!1:typeof n.RE_EXN_ID=="string"}function y(n){if(n!==void 0)return f(n);throw{RE_EXN_ID:"Not_found",Error:new Error}}function D(n,r,i){return n!==void 0?i(f(n)):r}function N(n,r){if(n!==void 0)return h(r(f(n)))}function g(n,r){if(n!==void 0)return r(f(n))}function x(n,r){return g(n,_(r))}function U(n,r){return n!==void 0?f(n):r}function b(n){return n!==void 0}function I(n){return n===void 0}export{d as _,U as a,I as b,E as c,b as d,g as e,x as f,y as g,D as h,w as i,N as m};
//# sourceMappingURL=belt_Option-91f3b350.y_XblYXp.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
const s=e=>t=>t instanceof e,n=s(HTMLSelectElement),c=e=>e.status===500;export{n as a,c as e};
//# sourceMappingURL=gardes.CUgVnuaB.js.map

View file

@ -1 +1 @@
{"version":3,"file":"gardes.CgXTclcl.js","sources":["../../src/scripts/lib/gardes.ts"],"sourcesContent":["import type { Constructor } from \"./types/classes\";\n\nconst estElement = <T extends HTMLElement>(typeElement: Constructor<T>) => (element: unknown): element is T =>\n element instanceof typeElement;\n\nexport const estHTMLSelectElement = estElement<HTMLSelectElement>(HTMLSelectElement);\n\nexport const estError = (erreur: unknown): erreur is Error => erreur instanceof Error;\n\nexport const estReponse500 = (reponse: Response): boolean => reponse.status === 500;\n"],"names":["estElement","typeElement","element","estHTMLSelectElement","estError","erreur","estReponse500","reponse"],"mappings":"AAEA,MAAMA,EAAqCC,GAAiCC,GAC1EA,aAAmBD,EAERE,EAAuBH,EAA8B,iBAAiB,EAEtEI,EAAYC,GAAqCA,aAAkB,MAEnEC,EAAiBC,GAA+BA,EAAQ,SAAW"}
{"version":3,"file":"gardes.CUgVnuaB.js","sources":["../../src/scripts/lib/gardes.ts"],"sourcesContent":["import type { Constructor } from \"./types/classes\";\n\nconst estElement = <T extends HTMLElement>(typeElement: Constructor<T>) => (element: unknown): element is T =>\n element instanceof typeElement;\n\nexport const estHTMLSelectElement = estElement<HTMLSelectElement>(HTMLSelectElement);\n\nexport const estError = (erreur: unknown): erreur is Error => erreur instanceof Error;\n\nexport const estReponse500 = (reponse: Response): boolean => reponse.status === 500;\n"],"names":["estElement","typeElement","element","estHTMLSelectElement","estReponse500","reponse"],"mappings":"AAEA,MAAMA,EAAqCC,GAAiCC,GAC1EA,aAAmBD,EAERE,EAAuBH,EAA8B,iBAAiB,EAItEI,EAAiBC,GAA+BA,EAAQ,SAAW"}

View file

@ -1,2 +0,0 @@
const s=e=>t=>t instanceof e,n=s(HTMLSelectElement),o=e=>e instanceof Error,c=e=>e.status===500;export{n as a,o as b,c as e};
//# sourceMappingURL=gardes.CgXTclcl.js.map

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,2 +0,0 @@
import{_ as W,i as x,c as z,g as D,a,b as U,d as S,f as $,m as M,e as i,h as E}from"./belt_Option-91f3b350.y_XblYXp.js";import{aq as u,ar as R,as as k,at as e,au as q,av as y}from"./utils.DNv5smZT.js";var A=z("Promise.JsError");function F(n,r){return n.catch(function(t){return W(r,x(t)?t:{RE_EXN_ID:A,_1:t})})}function G(n){}function T(n){return u(n)}function I(n){}function J(n){if(n!=null)return u(n)}function O(n){if(n)return n}function o(n,r){return $(n==null?void 0:u(n),function(t){if(r(t))return u(t)})}function X(){if(arguments.length===1){const n=arguments;return function(t){return o(t,n[0])}}return o(arguments[0],arguments[1])}function j(n){try{return u(n(void 0))}catch{return}}function w(n){return F(n.then(function(r){return u(r)}),function(r){return Promise.resolve(void 0)})}var f=M;function B(){if(arguments.length===1){const n=arguments;return function(t){return f(t,n[0])}}return f(arguments[0],arguments[1])}var s=i;function C(){if(arguments.length===1){const n=arguments;return function(t){return s(t,n[0])}}return s(arguments[0],arguments[1])}var c=E;function H(){if(arguments.length===2){const n=arguments;return function(t){return c(t,n[0],n[1])}}return c(arguments[0],arguments[1],arguments[2])}function m(n,r){if(n!==void 0)return k(r(e(n)))}function K(){if(arguments.length===1){const n=arguments;return function(t){return m(t,n[0])}}return m(arguments[0],arguments[1])}function g(n,r){return i(n,function(t){if(r(t))return u(t)})}function L(){if(arguments.length===1){const n=arguments;return function(t){return g(t,n[0])}}return g(arguments[0],arguments[1])}var l=a;function Q(){if(arguments.length===1){const n=arguments;return function(t){return l(t,n[0])}}return l(arguments[0],arguments[1])}var V=D;function Y(n){return a(n,null)}function Z(n){return a(n,void 0)}function h(n,r){return n!==void 0?{TAG:0,_0:e(n)}:{TAG:1,_0:r}}function nn(){if(arguments.length===1){const n=arguments;return function(t){return h(t,n[0])}}return h(arguments[0],arguments[1])}function v(n,r,t){return n!==void 0?r(e(n)):t(void 0)}function tn(){if(arguments.length===2){const n=arguments;return function(t){return v(t,n[0],n[1])}}return v(arguments[0],arguments[1],arguments[2])}var rn=U,en=S;function d(n,r){return n!==void 0&&r(e(n)),n}function un(){if(arguments.length===1){const n=arguments;return function(t){return d(t,n[0])}}return d(arguments[0],arguments[1])}function _(n,r){return E(n,!1,function(t){return q(t,r)})}function an(){if(arguments.length===1){const n=arguments;return function(t){return _(t,n[0])}}return _(arguments[0],arguments[1])}function p(n,r){if(n!==void 0&&r!==void 0)return[e(n),e(r)]}function on(){if(arguments.length===1){const n=arguments;return function(t){return p(t,n[0])}}return p(arguments[0],arguments[1])}function N(n,r,t){if(n!==void 0&&r!==void 0)return u(t(e(n),e(r)))}function fn(){if(arguments.length===2){const n=arguments;return function(t){return N(t,n[0],n[1])}}return N(arguments[0],arguments[1],arguments[2])}function b(n,r,t){return n!==void 0?r(e(n)):t(void 0)}function sn(){if(arguments.length===2){const n=arguments;return function(t){return b(t,n[0],n[1])}}return b(arguments[0],arguments[1],arguments[2])}function cn(n){return R(n,[],function(r,t){return i(r,function(P){if(t!==void 0)return y(P,[e(t)])})})}const mn=n=>n;var hn={__proto__:null,Some:mn,None:void 0,placeholder:G,makeSome:T,makeNone:I,fromNullable:J,fromFalsy:O,fromPredicate:X,fromExecution:j,fromPromise:w,map:B,flatMap:C,mapWithDefault:H,mapNullable:K,filter:L,getWithDefault:Q,getExn:V,toNullable:Y,toUndefined:Z,toResult:nn,match:tn,isNone:rn,isSome:en,tap:un,contains:an,zip:on,zipWith:fn,fold:sn,all:cn};export{hn as P,C as f,Q as g,un as t};
//# sourceMappingURL=index-c1cc4c86.BsIfgdq2.js.map

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
import{aG as o,aH as a,aI as $,aJ as A,aK as G,aL as M}from"./utils.DS2YS0tX.js";function v(n,t,r){for(var e=new Array(r),u=0,i=t;u<r;)e[u]=n[i],u=u+1|0,i=i+1|0;return e}function R(n,t){for(;;){var r=t,e=n,u=e.length,i=u===0?1:u,f=i-r.length|0;if(f===0)return e.apply(null,r);if(f>=0)return function(c,m){return function(S){return R(c,m.concat([S]))}}(e,r);t=v(r,i,0|-f),n=e.apply(null,v(r,0,i))}}function U(n,t){var r=n.length;if(r===1)return n(t);switch(r){case 1:return n(t);case 2:return function(e){return n(t,e)};case 3:return function(e,u){return n(t,e,u)};case 4:return function(e,u,i){return n(t,e,u,i)};case 5:return function(e,u,i,f){return n(t,e,u,i,f)};case 6:return function(e,u,i,f,c){return n(t,e,u,i,f,c)};case 7:return function(e,u,i,f,c,m){return n(t,e,u,i,f,c,m)};default:return R(n,[t])}}function X(n){return n.length===1?n:function(t){return U(n,t)}}var g={contents:0};function k(n){return g.contents=g.contents+1|0,n+"/"+g.contents}function F(n){return n==null?!1:typeof n.RE_EXN_ID=="string"}function J(n){if(n!==void 0)return o(n);throw{RE_EXN_ID:"Not_found",Error:new Error}}function I(n,t,r){return n!==void 0?r(o(n)):t}function T(n,t){if(n!==void 0)return a(t(o(n)))}function s(n,t){if(n!==void 0)return t(o(n))}function q(n,t){return s(n,X(t))}function l(n,t){return n!==void 0?o(n):t}function H(n){return n!==void 0}function K(n){return n===void 0}var L=k("Promise.JsError");function O(n,t){return n.catch(function(r){return U(t,F(r)?r:{RE_EXN_ID:L,_1:r})})}function j(n){}function B(n){return a(n)}function C(n){}function Q(n){if(n!=null)return a(n)}function V(n){if(n)return n}function h(n,t){return q(n==null?void 0:a(n),function(r){if(t(r))return a(r)})}function Y(){if(arguments.length===1){const n=arguments;return function(r){return h(r,n[0])}}return h(arguments[0],arguments[1])}function Z(n){try{return a(n(void 0))}catch{return}}function nn(n){return O(n.then(function(t){return a(t)}),function(t){return Promise.resolve(void 0)})}var d=T;function tn(){if(arguments.length===1){const n=arguments;return function(r){return d(r,n[0])}}return d(arguments[0],arguments[1])}var _=s;function rn(){if(arguments.length===1){const n=arguments;return function(r){return _(r,n[0])}}return _(arguments[0],arguments[1])}var p=I;function en(){if(arguments.length===2){const n=arguments;return function(r){return p(r,n[0],n[1])}}return p(arguments[0],arguments[1],arguments[2])}function N(n,t){if(n!==void 0)return A(t(o(n)))}function un(){if(arguments.length===1){const n=arguments;return function(r){return N(r,n[0])}}return N(arguments[0],arguments[1])}function E(n,t){return s(n,function(r){if(t(r))return a(r)})}function on(){if(arguments.length===1){const n=arguments;return function(r){return E(r,n[0])}}return E(arguments[0],arguments[1])}var b=l;function fn(){if(arguments.length===1){const n=arguments;return function(r){return b(r,n[0])}}return b(arguments[0],arguments[1])}var an=J;function cn(n){return l(n,null)}function sn(n){return l(n,void 0)}function D(n,t){return n!==void 0?{TAG:0,_0:o(n)}:{TAG:1,_0:t}}function mn(){if(arguments.length===1){const n=arguments;return function(r){return D(r,n[0])}}return D(arguments[0],arguments[1])}function w(n,t,r){return n!==void 0?t(o(n)):r(void 0)}function gn(){if(arguments.length===2){const n=arguments;return function(r){return w(r,n[0],n[1])}}return w(arguments[0],arguments[1],arguments[2])}var ln=K,vn=H;function y(n,t){return n!==void 0&&t(o(n)),n}function hn(){if(arguments.length===1){const n=arguments;return function(r){return y(r,n[0])}}return y(arguments[0],arguments[1])}function P(n,t){return I(n,!1,function(r){return G(r,t)})}function dn(){if(arguments.length===1){const n=arguments;return function(r){return P(r,n[0])}}return P(arguments[0],arguments[1])}function W(n,t){if(n!==void 0&&t!==void 0)return[o(n),o(t)]}function _n(){if(arguments.length===1){const n=arguments;return function(r){return W(r,n[0])}}return W(arguments[0],arguments[1])}function x(n,t,r){if(n!==void 0&&t!==void 0)return a(r(o(n),o(t)))}function pn(){if(arguments.length===2){const n=arguments;return function(r){return x(r,n[0],n[1])}}return x(arguments[0],arguments[1],arguments[2])}function z(n,t,r){return n!==void 0?t(o(n)):r(void 0)}function Nn(){if(arguments.length===2){const n=arguments;return function(r){return z(r,n[0],n[1])}}return z(arguments[0],arguments[1],arguments[2])}function En(n){return $(n,[],function(t,r){return s(t,function(e){if(r!==void 0)return M(e,[o(r)])})})}const bn=n=>n;var wn={__proto__:null,Some:bn,None:void 0,placeholder:j,makeSome:B,makeNone:C,fromNullable:Q,fromFalsy:V,fromPredicate:Y,fromExecution:Z,fromPromise:nn,map:tn,flatMap:rn,mapWithDefault:en,mapNullable:un,filter:on,getWithDefault:fn,getExn:an,toNullable:cn,toUndefined:sn,toResult:mn,match:gn,isNone:ln,isSome:vn,tap:hn,contains:dn,zip:_n,zipWith:pn,fold:Nn,all:En};export{wn as P,rn as f,fn as g,hn as t};
//# sourceMappingURL=index-c1cc4c86.RjqwfILA.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +0,0 @@
import{o as n,s as e,p as c,i as l,n as s,l as M,c as r,f as o,d as i,e as m,u as d,g as p,h as P,t as b,v as y,q as h,j as x,W as I}from"./validation.CuPxXgCV.js";import{aO as S,ao as g}from"./utils.DNv5smZT.js";import{a0 as j}from"./exports.1ijyAKMZ.js";const v="bouton_panier",A="contenu_panier",z="revalidation_livraison",u={MajBoutonPanier:"maj_bouton_panier",MajContenuPanier:"maj_contenu_panier",RevalidationLivraison:"revalidation_livraison"},N={INVISIBLE:"invisible",VISIBLE:"visible"},B=n({address_1:e(),address_2:e(),city:e(),company:e(),country:e(),email:e(),first_name:e(),last_name:e(),phone:e(),postcode:e(),state:e()}),C=n({address_1:e(),address_2:e(),city:e(),company:e(),country:e(),first_name:e(),last_name:e(),phone:e(),postcode:e(),state:e()}),E=n({code:e(),discount_type:e(),totals:n({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:c(s(),l()),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),total_discount:e(),total_discount_tax:e()})}),W=n({key:e(),name:e(),quantity:s()}),R=n({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:s(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),delivery_time:e(),description:e(),instance_id:s(),meta_data:r(o()),method_id:e(),name:e(),price:e(),rate_id:e(),selected:i(),taxes:e()}),T=r(R),L=n({destination:M(C,["company","first_name","last_name","phone"]),items:r(W),name:e(),package_id:s(),shipping_rates:T}),O=n({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:s(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),line_subtotal:e(),line_subtotal_tax:e(),line_total:e(),line_total_tax:e()}),f=n({backorders_allowed:i(),catalog_visibility:m(N),description:e(),extensions:o(),id:s(),images:r(o()),item_data:r(o()),key:e(),low_stock_remaining:d([p()]),name:e(),permalink:c(e(),P()),prices:o(),quantity:s(),quantity_limits:o(),short_description:e(),show_backorder_badge:i(),sku:e(),sold_individually:i(),totals:O,type:e(),variation:r(o())}),k=n({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:s(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),tax_lines:r(o()),total_discount:e(),total_discount_tax:e(),total_fees:e(),total_fees_tax:e(),total_items:e(),total_items_tax:e(),total_price:e(),total_shipping:c(d([e(),p()]),b(Number)),total_shipping_tax:d([e(),p()]),total_tax:e()}),F=n({billing_address:B,coupons:r(E),cross_sells:o(),errors:o(),extensions:o(),fees:o(),has_calculated_shipping:i(),items:r(f),items_count:c(s(),l()),items_weight:c(s(),l()),needs_payment:i(),needs_shipping:i(),payment_methods:o(),payment_requirements:o(),shipping_address:C,shipping_rates:r(L),totals:k});m(u);const q=n({quantiteProduits:s()}),w=n({donnees:q,type:c(e(),y(u.MajBoutonPanier))}),V=n({produits:r(f),sousTotalProduits:s(),sousTotalReduction:s(),totalPanier:s()}),D=n({donnees:V,type:c(e(),y(u.MajContenuPanier))}),U=(a,t)=>(a.postMessage(t),a),H=a=>{const t=new BroadcastChannel(v);t.postMessage({donnees:{quantiteProduits:a.quantiteProduits},type:u.MajBoutonPanier}),t.close()},J=a=>{const t=new BroadcastChannel(A);t.postMessage({donnees:{produits:a.produits,sousTotalProduits:a.sousTotalProduits,sousTotalReduction:a.sousTotalReduction,totalPanier:a.totalPanier},type:u.MajContenuPanier}),t.close()},K=(a,t)=>j(new BroadcastChannel(a),_=>U(_,t),_=>_.close()),Q=a=>S.of(h(w,a.data)).ifLeft(t=>g(t)),X=a=>S.of(h(D,a.data)).ifLeft(t=>g(t)),Z=(a,t)=>x(a,I).map(_=>_.body.code===t).orDefault(!1);export{v as N,B as W,C as a,z as b,F as c,T as d,K as e,H as f,J as g,A as h,X as i,Z as r,Q as v};
//# sourceMappingURL=messages.B4HRoo_h.js.map

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
import{o as a,l as y,a as p,s as e,u as d,p as i,k as x,g as u,q as h,n as t,i as m,r as I,c as r,f as o,d as c,e as S,h as j,t as v,v as g,w as C,j as A}from"./validation.p-hUfG_o.js";import{aF as f,I as M}from"./utils.DS2YS0tX.js";import{a0 as E}from"./exports.1ijyAKMZ.js";const W="bouton_panier",B="contenu_panier",X="revalidation_livraison",l={MajBoutonPanier:"maj_bouton_panier",MajContenuPanier:"maj_contenu_panier",RevalidationLivraison:"revalidation_livraison"},N=a({code:e(),data:a({status:t()}),message:e()}),R=a({body:N,status:t()}),T=a({code:y("rest_invalid_param"),data:a({details:a({billing_address:p(a({code:e(),data:d([u(),e()]),message:e()})),shipping_address:p(a({code:e(),data:d([u(),e()]),message:e()}))}),params:a({billing_address:p(e()),shipping_address:p(e())}),status:y(400)}),message:i(e(),h("Invalid parameter(s):"),h("_address"))}),Z=s=>x(T,s),L={INVISIBLE:"invisible",VISIBLE:"visible"},k=a({address_1:e(),address_2:e(),city:e(),company:e(),country:e(),email:e(),first_name:e(),last_name:e(),phone:e(),postcode:e(),state:e()}),P=a({address_1:e(),address_2:e(),city:e(),company:e(),country:e(),first_name:e(),last_name:e(),phone:e(),postcode:e(),state:e()}),q=a({code:e(),discount_type:e(),totals:a({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:i(t(),m()),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),total_discount:e(),total_discount_tax:e()})}),w=a({key:e(),name:e(),quantity:t()}),O=a({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:t(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),delivery_time:e(),description:e(),instance_id:t(),meta_data:r(o()),method_id:e(),name:e(),price:e(),rate_id:e(),selected:c(),taxes:e()}),V=r(O),D=a({destination:I(P,["company","first_name","last_name","phone"]),items:r(w),name:e(),package_id:t(),shipping_rates:V}),U=a({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:t(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),line_subtotal:e(),line_subtotal_tax:e(),line_total:e(),line_total_tax:e()}),b=a({backorders_allowed:c(),catalog_visibility:S(L),description:e(),extensions:o(),id:t(),images:r(o()),item_data:r(o()),key:e(),low_stock_remaining:d([u()]),name:e(),permalink:i(e(),j()),prices:o(),quantity:t(),quantity_limits:o(),short_description:e(),show_backorder_badge:c(),sku:e(),sold_individually:c(),totals:U,type:e(),variation:r(o())}),G=a({currency_code:e(),currency_decimal_separator:e(),currency_minor_unit:t(),currency_prefix:e(),currency_suffix:e(),currency_symbol:e(),currency_thousand_separator:e(),tax_lines:r(o()),total_discount:e(),total_discount_tax:e(),total_fees:e(),total_fees_tax:e(),total_items:e(),total_items_tax:e(),total_price:e(),total_shipping:i(d([e(),u()]),v(Number)),total_shipping_tax:d([e(),u()]),total_tax:e()}),ee=a({billing_address:k,coupons:r(q),cross_sells:o(),errors:o(),extensions:o(),fees:o(),has_calculated_shipping:c(),items:r(b),items_count:i(t(),m()),items_weight:i(t(),m()),needs_payment:c(),needs_shipping:c(),payment_methods:o(),payment_requirements:o(),shipping_address:P,shipping_rates:r(D),totals:G});S(l);const F=a({quantiteProduits:t()}),Y=a({donnees:F,type:i(e(),g(l.MajBoutonPanier))}),$=a({produits:r(b),sousTotalProduits:t(),sousTotalReduction:t(),totalPanier:t()}),z=a({donnees:$,type:i(e(),g(l.MajContenuPanier))}),H=(s,n)=>(s.postMessage(n),s),ae=s=>{const n=new BroadcastChannel(W);n.postMessage({donnees:{quantiteProduits:s.quantiteProduits},type:l.MajBoutonPanier}),n.close()},se=s=>{const n=new BroadcastChannel(B);n.postMessage({donnees:{produits:s.produits,sousTotalProduits:s.sousTotalProduits,sousTotalReduction:s.sousTotalReduction,totalPanier:s.totalPanier},type:l.MajContenuPanier}),n.close()},te=(s,n)=>E(new BroadcastChannel(s),_=>H(_,n),_=>_.close()),ne=s=>f.of(C(Y,s.data)).ifLeft(n=>M(n)),oe=s=>f.of(C(z,s.data)).ifLeft(n=>M(n)),re=(s,n)=>A(s,R).map(_=>_.body.code===n).orDefault(!1);export{W as N,k as W,P as a,X as b,te as c,ee as d,Z as e,V as f,ae as g,se as h,B as i,oe as j,re as r,ne as v};
//# sourceMappingURL=messages.Qx8X6YMT.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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,2 +1,2 @@
import{r as o,S as a,a as r,A as s}from"./utils.DNv5smZT.js";import{N as d,v as E}from"./messages.B4HRoo_h.js";import{a0 as N}from"./exports.1ijyAKMZ.js";import"./validation.CuPxXgCV.js";const u=()=>{const e=N(o(a),r),t=new BroadcastChannel(d);t.onmessage=i=>{E(i).ifRight(n=>{e.textContent=`cart (${String(n.donnees.quantiteProduits)})`,e.setAttribute(s,String(n.donnees.quantiteProduits>0))})},document.addEventListener("visibilitychange",()=>{t.close()})};document.addEventListener("DOMContentLoaded",()=>{u()});
import{r as o,S as a,a as r,A as s}from"./utils.DS2YS0tX.js";import{N as d,v as E}from"./messages.Qx8X6YMT.js";import{a0 as N}from"./exports.1ijyAKMZ.js";import"./validation.p-hUfG_o.js";const u=()=>{const e=N(o(a),r),t=new BroadcastChannel(d);t.onmessage=i=>{E(i).ifRight(n=>{e.textContent=`cart (${String(n.donnees.quantiteProduits)})`,e.setAttribute(s,String(n.donnees.quantiteProduits>0))})},document.addEventListener("visibilitychange",()=>{t.close()})};document.addEventListener("DOMContentLoaded",()=>{u()});
//# sourceMappingURL=scripts-bouton-panier.js.map

View file

@ -1,2 +1,2 @@
import{b as n,h as u,c as s,d as O}from"./utils.DNv5smZT.js";import{a0 as d}from"./exports.1ijyAKMZ.js";import{t as R}from"./index-c1cc4c86.BsIfgdq2.js";import"./belt_Option-91f3b350.y_XblYXp.js";const e={BOUTON_RETOUR_SOMMET:n("#bouton-retour-haut"),CORPS_HTML:n("body"),IMAGE_BOUTON:n("#bouton-retour-haut img")},o=2;let a=e.CORPS_HTML.getBoundingClientRect().height/window.innerHeight,i=window.scrollY,r=!1;const T=()=>window.scrollY,l=t=>{t?(e.BOUTON_RETOUR_SOMMET.setAttribute(s,""),e.IMAGE_BOUTON.removeAttribute(O)):(e.BOUTON_RETOUR_SOMMET.removeAttribute(s),e.IMAGE_BOUTON.setAttribute(O,"")),r=!1},_=()=>{l(i>window.innerHeight*o),new ResizeObserver(t=>{d(u(t),R(m=>{a=e.CORPS_HTML.getBoundingClientRect().height/window.innerHeight,i=T()}))}).observe(e.CORPS_HTML),window.addEventListener("scroll",()=>{i=T(),!(a<o)&&(r||(r=!0,requestAnimationFrame(()=>l(i>window.innerHeight*o))))})},E=()=>{e.BOUTON_RETOUR_SOMMET.addEventListener("click",t=>{t.preventDefault(),window.scrollTo({behavior:"smooth",top:0})})};document.addEventListener("DOMContentLoaded",()=>{E(),_()});
import{b as i,c as M,h as l,d as O,e as T,f as s}from"./utils.DS2YS0tX.js";import{a0 as u}from"./exports.1ijyAKMZ.js";import{t as R}from"./index-c1cc4c86.RjqwfILA.js";const e={BOUTON_MENU_MOBILE:i(M),BOUTON_RETOUR_SOMMET:i("#bouton-retour-haut"),CORPS_HTML:i("body"),IMAGE_BOUTON:i("#bouton-retour-haut img")},o=2;let E=e.CORPS_HTML.getBoundingClientRect().height/window.innerHeight,n=window.scrollY,r=!1;const _=()=>window.scrollY,a=t=>{t?(e.BOUTON_RETOUR_SOMMET.setAttribute(O,""),e.BOUTON_RETOUR_SOMMET.setAttribute(T,"99"),e.IMAGE_BOUTON.removeAttribute(s)):(e.BOUTON_RETOUR_SOMMET.removeAttribute(O),e.BOUTON_RETOUR_SOMMET.setAttribute(T,"-2"),e.IMAGE_BOUTON.setAttribute(s,"")),r=!1},U=()=>{window.addEventListener("scroll",()=>{n=_(),!(E<o)&&(r||(r=!0,requestAnimationFrame(()=>a(n>window.innerHeight*o))))}),new ResizeObserver(t=>{u(l(t),R(B=>{E=e.CORPS_HTML.getBoundingClientRect().height/window.innerHeight,n=_()}))}).observe(e.CORPS_HTML),a(n>window.innerHeight*o)},d=()=>{e.BOUTON_RETOUR_SOMMET.addEventListener("click",t=>{t.preventDefault(),window.scrollTo({behavior:"smooth",top:0}),e.BOUTON_MENU_MOBILE.focus({preventScroll:!0})})};document.addEventListener("DOMContentLoaded",()=>{d(),U()});
//# sourceMappingURL=scripts-bouton-retour-sommet.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{z as a}from"./index.CuMLbxmh.js";import{b as i,e as o,R as E,f as u,g as R}from"./utils.DNv5smZT.js";import"./exports.1ijyAKMZ.js";document.addEventListener("DOMContentLoaded",()=>{const e=i(u),t=o(R);E.forEachWithIndex([t.at(0),t.at(-1)],(n,r)=>{r&&new IntersectionObserver(E.forEach(s=>{s.boundingClientRect.top<=0||a([s.isIntersecting,n]).with([!0,0],()=>e.removeAttribute("data-entrees-presentes-debut")).with([!0,1],()=>e.removeAttribute("data-entrees-presentes-fin")).with([!1,0],()=>e.setAttribute("data-entrees-presentes-debut","")).with([!1,1],()=>e.setAttribute("data-entrees-presentes-fin","")).run()}),{root:null,threshold:.9}).observe(r)})});
import{z as i}from"./index.CuMLbxmh.js";import{b as a,g as o,R as E,i as u,j as R}from"./utils.DS2YS0tX.js";import"./exports.1ijyAKMZ.js";document.addEventListener("DOMContentLoaded",()=>{const e=a(u),t=o(R);E.forEachWithIndex([t.at(0),t.at(-1)],(n,r)=>{r&&new IntersectionObserver(E.forEach(s=>{s.boundingClientRect.top<=0||i([s.isIntersecting,n]).with([!0,0],()=>e.removeAttribute("data-entrees-presentes-debut")).with([!0,1],()=>e.removeAttribute("data-entrees-presentes-fin")).with([!1,0],()=>e.setAttribute("data-entrees-presentes-debut","")).with([!1,1],()=>e.setAttribute("data-entrees-presentes-fin","")).run()}),{root:null,threshold:.9}).observe(r)})});
//# sourceMappingURL=scripts-menu-categories.js.map

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,2 +1,2 @@
import{b as m,e as L,R as T,l as _,m as o,C as N,n as c,o as p,p as f,q as i}from"./utils.DNv5smZT.js";import{a0 as a}from"./exports.1ijyAKMZ.js";import{P as E}from"./index-c1cc4c86.BsIfgdq2.js";import"./belt_Option-91f3b350.y_XblYXp.js";const u=m(p),I=L(f),S=L(i),s=new Map;T.forEachWithIndex(I,(l,r)=>{a(r,E.flatMap(t=>t.getAttribute(_)),E.tap(t=>{s.set(t,[r,S[l]])}))});document.addEventListener("DOMContentLoaded",()=>{u.addEventListener("click",l=>{const r=l.target;a(r,E.fromPredicate(t=>t.className===N),E.mapNullable(t=>t.parentElement),E.flatMap(t=>t.getAttribute(_)),E.tap(t=>{a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.removeAttribute(o))))})),a(r,E.fromPredicate(t=>t.className===c),E.flatMap(t=>t.getAttribute(_)),E.tap(t=>{if(r.hasAttribute(o)){a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.removeAttribute(o))));return}a(Array.from(s.values()),T.flat,T.forEach(e=>e.removeAttribute(o))),a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.toggleAttribute(o))))}))})});
import{b as N,g as L,R as T,m as l,n as o,C as m,o as c,p as f,q as p,s as u}from"./utils.DS2YS0tX.js";import{a0 as a}from"./exports.1ijyAKMZ.js";import{P as E}from"./index-c1cc4c86.RjqwfILA.js";const I=N(f),i=L(p),S=L(u),s=new Map;T.forEachWithIndex(i,(_,r)=>{a(r,E.flatMap(t=>t.getAttribute(l)),E.tap(t=>{s.set(t,[r,S[_]])}))});document.addEventListener("DOMContentLoaded",()=>{I.addEventListener("click",_=>{const r=_.target;a(r,E.fromPredicate(t=>t.className===m),E.mapNullable(t=>t.parentElement),E.flatMap(t=>t.getAttribute(l)),E.tap(t=>{a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.removeAttribute(o))))})),a(r,E.fromPredicate(t=>t.className===c),E.flatMap(t=>t.getAttribute(l)),E.tap(t=>{if(r.hasAttribute(o)){a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.removeAttribute(o))));return}a(Array.from(s.values()),T.flat,T.forEach(e=>e.removeAttribute(o))),a(E.fromNullable(s.get(t)),E.tap(T.forEach(e=>e.toggleAttribute(o))))}))})});
//# sourceMappingURL=scripts-page-a-propos.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{b as i,e as S,s as l,t as g,R as N,u as s,d as m}from"./utils.DNv5smZT.js";import{e as O}from"./nombres.n4VPN7qr.js";import{a0 as G}from"./exports.1ijyAKMZ.js";import{P as L}from"./index-c1cc4c86.BsIfgdq2.js";import"./belt_Option-91f3b350.y_XblYXp.js";const c=()=>{const e={CONTENEUR_STORYTELLING:i(".storytelling__conteneur"),IMAGES_STORYTELLING:S(l),STORYTELLING:i(g)};let E=e.IMAGES_STORYTELLING.at(0)?.getBoundingClientRect().height??0,n=0;const r=(t,T)=>{t.toggleAttribute(s,T),t.toggleAttribute(m,T)},I=()=>{console.time(),E=G(N.getBy(e.IMAGES_STORYTELLING,t=>!t.hasAttribute(s)),L.map(t=>t.getBoundingClientRect().height),L.getWithDefault(0)),e.CONTENEUR_STORYTELLING.style.minHeight=`${String(E*e.IMAGES_STORYTELLING.length+61)}px`,e.CONTENEUR_STORYTELLING.style.maxHeight=`${String(E*e.IMAGES_STORYTELLING.length+61)}px`,console.timeEnd()},o=()=>{n=e.STORYTELLING.scrollTop,e.IMAGES_STORYTELLING.forEach((t,T)=>{const a=E*T,R=E*(T+1);r(t,!O(n,a,R))})};new ResizeObserver(()=>{I(),o()}).observe(e.STORYTELLING),e.STORYTELLING.addEventListener("scroll",()=>o())};document.addEventListener("DOMContentLoaded",()=>{c()});
import{b as o,g as S,t as g,u as l,R as N,v as i,f as O}from"./utils.DS2YS0tX.js";import{e as G}from"./nombres.n4VPN7qr.js";import{a0 as m}from"./exports.1ijyAKMZ.js";import{P as s}from"./index-c1cc4c86.RjqwfILA.js";const c=()=>{const e={CONTENEUR_STORYTELLING:o(".storytelling__conteneur"),IMAGES_STORYTELLING:S(g),STORYTELLING:o(l)};let E=e.IMAGES_STORYTELLING.at(0)?.getBoundingClientRect().height??0,n=0;const r=(t,T)=>{t.toggleAttribute(i,T),t.toggleAttribute(O,T)},I=()=>{E=m(N.getBy(e.IMAGES_STORYTELLING,t=>!t.hasAttribute(i)),s.map(t=>t.getBoundingClientRect().height),s.getWithDefault(0)),e.CONTENEUR_STORYTELLING.style.minHeight=`${String(E*e.IMAGES_STORYTELLING.length+61)}px`,e.CONTENEUR_STORYTELLING.style.maxHeight=`${String(E*e.IMAGES_STORYTELLING.length+61)}px`},L=()=>{n=e.STORYTELLING.scrollTop,e.IMAGES_STORYTELLING.forEach((t,T)=>{const a=E*T,R=E*(T+1);r(t,!G(n,a,R))})};new ResizeObserver(()=>{I(),L()}).observe(e.STORYTELLING),e.STORYTELLING.addEventListener("scroll",()=>L())};document.addEventListener("DOMContentLoaded",()=>{c()});
//# sourceMappingURL=scripts-page-accueil.js.map

View file

@ -1 +1 @@
{"version":3,"file":"scripts-page-accueil.js","sources":["../../src/scripts/scripts-page-accueil.ts"],"sourcesContent":["// Scripts pour la Page d'accueil\n\nimport { A, O, pipe } from \"@mobily/ts-belt\";\n\nimport {\n ATTRIBUT_ARIA_HIDDEN,\n ATTRIBUT_CACHE,\n SELECTEUR_CONTENEUR_STORYTELLING,\n SELECTEUR_IMAGES_STORYTELLING,\n} from \"./constantes/dom.ts\";\nimport { estEntreDeuxNombres } from \"./lib/nombres.ts\";\nimport { recupereEleOuLeve, recupereElesOuLeve } from \"./lib/utils.ts\";\n\nconst initialiseScrollStorytelling = (): void => {\n const E = {\n /** Le conteneur des images du storytelling. */\n CONTENEUR_STORYTELLING: recupereEleOuLeve<HTMLElement>(\".storytelling__conteneur\"),\n /** Les images du storytelling. */\n IMAGES_STORYTELLING: recupereElesOuLeve<HTMLDivElement>(SELECTEUR_IMAGES_STORYTELLING),\n /** Le bloc contenant le storytelling. */\n STORYTELLING: recupereEleOuLeve<HTMLElement>(SELECTEUR_CONTENEUR_STORYTELLING),\n };\n\n /** La hauteur d'une image du storytelling. */\n let hauteurImage = E.IMAGES_STORYTELLING.at(0)?.getBoundingClientRect().height ?? 0;\n /** La position du défilement (en pixels) du Conteneur des images du storytelling. */\n let positionDefilementConteneur = 0;\n\n /**\n * TODO\n * @param image\n * @param visible\n */\n const changeVisibiliteImage = (image: HTMLDivElement, visible: boolean) => {\n image.toggleAttribute(ATTRIBUT_CACHE, visible);\n image.toggleAttribute(ATTRIBUT_ARIA_HIDDEN, visible);\n };\n\n /**\n * TODO\n */\n const majDimensions = (): void => {\n console.time();\n hauteurImage = pipe(\n A.getBy(E.IMAGES_STORYTELLING, (i: HTMLDivElement) => !i.hasAttribute(ATTRIBUT_CACHE)),\n O.map((i: HTMLDivElement) => i.getBoundingClientRect().height),\n O.getWithDefault(0),\n );\n E.CONTENEUR_STORYTELLING.style.minHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;\n E.CONTENEUR_STORYTELLING.style.maxHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;\n console.timeEnd();\n };\n\n /**\n * TODO\n */\n const majImages = (): void => {\n // Met à jour la position du défilement dans le Conteneur\n positionDefilementConteneur = E.STORYTELLING.scrollTop;\n\n // Met à jour l'attribut de visibilité des images en fonction du défilement\n E.IMAGES_STORYTELLING.forEach((image: HTMLDivElement, index: number): void => {\n const debutYImage = hauteurImage * index;\n const finYImage = hauteurImage * (index + 1);\n\n changeVisibiliteImage(image, !estEntreDeuxNombres(positionDefilementConteneur, debutYImage, finYImage));\n });\n };\n\n // Initialise l'Observateur de Redimensionnement (ResizeObserver)\n new ResizeObserver((): void => {\n majDimensions();\n majImages();\n }).observe(E.STORYTELLING);\n\n // Initialise la mise à jour des images au défilement sur le Conteneur\n E.STORYTELLING.addEventListener(\"scroll\", (): void => majImages());\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseScrollStorytelling();\n});\n"],"names":["initialiseScrollStorytelling","E","recupereEleOuLeve","recupereElesOuLeve","SELECTEUR_IMAGES_STORYTELLING","SELECTEUR_CONTENEUR_STORYTELLING","hauteurImage","positionDefilementConteneur","changeVisibiliteImage","image","visible","ATTRIBUT_CACHE","ATTRIBUT_ARIA_HIDDEN","majDimensions","pipe","A","i","O","majImages","index","debutYImage","finYImage","estEntreDeuxNombres"],"mappings":"mQAaA,MAAMA,EAA+B,IAAY,CAC/C,MAAMC,EAAI,CAER,uBAAwBC,EAA+B,0BAA0B,EAEjF,oBAAqBC,EAAmCC,CAA6B,EAErF,aAAcF,EAA+BG,CAAgC,CAC/E,EAGI,IAAAC,EAAeL,EAAE,oBAAoB,GAAG,CAAC,GAAG,wBAAwB,QAAU,EAE9EM,EAA8B,EAO5B,MAAAC,EAAwB,CAACC,EAAuBC,IAAqB,CACnED,EAAA,gBAAgBE,EAAgBD,CAAO,EACvCD,EAAA,gBAAgBG,EAAsBF,CAAO,CACrD,EAKMG,EAAgB,IAAY,CAChC,QAAQ,KAAK,EACEP,EAAAQ,EACbC,EAAE,MAAMd,EAAE,oBAAsBe,GAAsB,CAACA,EAAE,aAAaL,CAAc,CAAC,EACrFM,EAAE,IAAKD,GAAsBA,EAAE,wBAAwB,MAAM,EAC7DC,EAAE,eAAe,CAAC,CACpB,EACEhB,EAAA,uBAAuB,MAAM,UAAY,GAAG,OAAOK,EAAeL,EAAE,oBAAoB,OAAS,EAAE,CAAC,KACpGA,EAAA,uBAAuB,MAAM,UAAY,GAAG,OAAOK,EAAeL,EAAE,oBAAoB,OAAS,EAAE,CAAC,KACtG,QAAQ,QAAQ,CAClB,EAKMiB,EAAY,IAAY,CAE5BX,EAA8BN,EAAE,aAAa,UAG7CA,EAAE,oBAAoB,QAAQ,CAACQ,EAAuBU,IAAwB,CAC5E,MAAMC,EAAcd,EAAea,EAC7BE,EAAYf,GAAgBa,EAAQ,GAE1CX,EAAsBC,EAAO,CAACa,EAAoBf,EAA6Ba,EAAaC,CAAS,CAAC,CAAA,CACvG,CACH,EAGA,IAAI,eAAe,IAAY,CACfR,EAAA,EACJK,EAAA,CAAA,CACX,EAAE,QAAQjB,EAAE,YAAY,EAGzBA,EAAE,aAAa,iBAAiB,SAAU,IAAYiB,GAAW,CACnE,EAEA,SAAS,iBAAiB,mBAAoB,IAAY,CAC3BlB,EAAA,CAC/B,CAAC"}
{"version":3,"file":"scripts-page-accueil.js","sources":["../../src/scripts/scripts-page-accueil.ts"],"sourcesContent":["// Scripts pour la Page d'accueil\n\nimport { A, O, pipe } from \"@mobily/ts-belt\";\n\nimport {\n ATTRIBUT_ARIA_HIDDEN,\n ATTRIBUT_CACHE,\n SELECTEUR_CONTENEUR_STORYTELLING,\n SELECTEUR_IMAGES_STORYTELLING,\n} from \"./constantes/dom.ts\";\nimport { estEntreDeuxNombres } from \"./lib/nombres.ts\";\nimport { recupereEleOuLeve, recupereElesOuLeve } from \"./lib/utils.ts\";\n\nconst initialiseScrollStorytelling = (): void => {\n const E = {\n /** Le conteneur des images du storytelling. */\n CONTENEUR_STORYTELLING: recupereEleOuLeve<HTMLElement>(\".storytelling__conteneur\"),\n /** Les images du storytelling. */\n IMAGES_STORYTELLING: recupereElesOuLeve<HTMLDivElement>(SELECTEUR_IMAGES_STORYTELLING),\n /** Le bloc contenant le storytelling. */\n STORYTELLING: recupereEleOuLeve<HTMLElement>(SELECTEUR_CONTENEUR_STORYTELLING),\n };\n\n /** La hauteur d'une image du storytelling. */\n let hauteurImage = E.IMAGES_STORYTELLING.at(0)?.getBoundingClientRect().height ?? 0;\n /** La position du défilement (en pixels) du Conteneur des images du storytelling. */\n let positionDefilementConteneur = 0;\n\n /**\n * TODO\n * @param image\n * @param visible\n */\n const changeVisibiliteImage = (image: HTMLDivElement, visible: boolean) => {\n image.toggleAttribute(ATTRIBUT_CACHE, visible);\n image.toggleAttribute(ATTRIBUT_ARIA_HIDDEN, visible);\n };\n\n /**\n * TODO\n */\n const majDimensions = (): void => {\n hauteurImage = pipe(\n A.getBy(E.IMAGES_STORYTELLING, (i: HTMLDivElement) => !i.hasAttribute(ATTRIBUT_CACHE)),\n O.map((i: HTMLDivElement) => i.getBoundingClientRect().height),\n O.getWithDefault(0),\n );\n E.CONTENEUR_STORYTELLING.style.minHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;\n E.CONTENEUR_STORYTELLING.style.maxHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;\n };\n\n /**\n * TODO\n */\n const majImages = (): void => {\n // Met à jour la position du défilement dans le Conteneur\n positionDefilementConteneur = E.STORYTELLING.scrollTop;\n\n // Met à jour l'attribut de visibilité des images en fonction du défilement\n E.IMAGES_STORYTELLING.forEach((image: HTMLDivElement, index: number): void => {\n const debutYImage = hauteurImage * index;\n const finYImage = hauteurImage * (index + 1);\n\n changeVisibiliteImage(image, !estEntreDeuxNombres(positionDefilementConteneur, debutYImage, finYImage));\n });\n };\n\n // Initialise l'Observateur de Redimensionnement (ResizeObserver)\n new ResizeObserver((): void => {\n majDimensions();\n majImages();\n }).observe(E.STORYTELLING);\n\n // Initialise la mise à jour des images au défilement sur le Conteneur\n E.STORYTELLING.addEventListener(\"scroll\", (): void => majImages());\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseScrollStorytelling();\n});\n"],"names":["initialiseScrollStorytelling","E","recupereEleOuLeve","recupereElesOuLeve","SELECTEUR_IMAGES_STORYTELLING","SELECTEUR_CONTENEUR_STORYTELLING","hauteurImage","positionDefilementConteneur","changeVisibiliteImage","image","visible","ATTRIBUT_CACHE","ATTRIBUT_ARIA_HIDDEN","majDimensions","pipe","A","i","O","majImages","index","debutYImage","finYImage","estEntreDeuxNombres"],"mappings":"wNAaA,MAAMA,EAA+B,IAAY,CAC/C,MAAMC,EAAI,CAER,uBAAwBC,EAA+B,0BAA0B,EAEjF,oBAAqBC,EAAmCC,CAA6B,EAErF,aAAcF,EAA+BG,CAAgC,CAC/E,EAGI,IAAAC,EAAeL,EAAE,oBAAoB,GAAG,CAAC,GAAG,wBAAwB,QAAU,EAE9EM,EAA8B,EAO5B,MAAAC,EAAwB,CAACC,EAAuBC,IAAqB,CACnED,EAAA,gBAAgBE,EAAgBD,CAAO,EACvCD,EAAA,gBAAgBG,EAAsBF,CAAO,CACrD,EAKMG,EAAgB,IAAY,CACjBP,EAAAQ,EACbC,EAAE,MAAMd,EAAE,oBAAsBe,GAAsB,CAACA,EAAE,aAAaL,CAAc,CAAC,EACrFM,EAAE,IAAKD,GAAsBA,EAAE,wBAAwB,MAAM,EAC7DC,EAAE,eAAe,CAAC,CACpB,EACEhB,EAAA,uBAAuB,MAAM,UAAY,GAAG,OAAOK,EAAeL,EAAE,oBAAoB,OAAS,EAAE,CAAC,KACpGA,EAAA,uBAAuB,MAAM,UAAY,GAAG,OAAOK,EAAeL,EAAE,oBAAoB,OAAS,EAAE,CAAC,IACxG,EAKMiB,EAAY,IAAY,CAE5BX,EAA8BN,EAAE,aAAa,UAG7CA,EAAE,oBAAoB,QAAQ,CAACQ,EAAuBU,IAAwB,CAC5E,MAAMC,EAAcd,EAAea,EAC7BE,EAAYf,GAAgBa,EAAQ,GAE1CX,EAAsBC,EAAO,CAACa,EAAoBf,EAA6Ba,EAAaC,CAAS,CAAC,CAAA,CACvG,CACH,EAGA,IAAI,eAAe,IAAY,CACfR,EAAA,EACJK,EAAA,CAAA,CACX,EAAE,QAAQjB,EAAE,YAAY,EAGzBA,EAAE,aAAa,iBAAiB,SAAU,IAAYiB,GAAW,CACnE,EAEA,SAAS,iBAAiB,mBAAoB,IAAY,CAC3BlB,EAAA,CAC/B,CAAC"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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,2 +1,2 @@
import{z as U}from"./index.CuMLbxmh.js";import{h as g,i as v}from"./api.DpNqIphF.js";import{r as S,aw as D,ax as P,b as E,J as p,ay as M,az as w,a as F,aA as H,aB as f,aC as y,aD as B,aE as G,aF as x,R as i,aG as J,e as j,aH as k,aI as _,aJ as m,F as O,T as l,z as W,aK as V,aL as X,al as q,ao as z}from"./utils.DNv5smZT.js";import{a as K,e as Q,b as $}from"./gardes.CgXTclcl.js";import{f as Y,c as Z}from"./messages.B4HRoo_h.js";import{t as ee}from"./reseau.BY8-4gXm.js";import{o as N,a as d,n as A,c as te,s as C,j as re}from"./validation.CuPxXgCV.js";import{a0 as n}from"./exports.1ijyAKMZ.js";import{l as se}from"./index-0eef19ec.BdWpJoEP.js";import"./belt_Option-91f3b350.y_XblYXp.js";const ae=N({attribute:C(),value:C()}),oe=N({id:d(A()),quantity:d(A()),variation:d(te(ae))}),L=_etats,ne=a=>{a.forEach(r=>{r[0].setAttribute(m,"false"),r[1].setAttribute(O,"true")})},c=n(S(D),F),R=S(P),Ee=E(H),ie=n(p(M),f),ce=n(p(w),f),ue=()=>{const a=E(y),r=E(B),o=E(G),t=E(x),e=i.flat([E(J),j(k)]),s=()=>Number(t.getAttribute(_));i.forEachWithIndex([e.at(0),e.at(-1)],(u,I)=>{I&&(new IntersectionObserver(i.forEach(T=>U([T.isIntersecting,u]).with([!0,0],()=>a.removeAttribute("data-images-presentes-debut")).with([!0,1],()=>a.removeAttribute("data-images-presentes-fin")).with([!1,0],()=>a.setAttribute("data-images-presentes-debut","")).with([!1,1],()=>a.setAttribute("data-images-presentes-fin","")).otherwise(()=>{})),{root:null,rootMargin:"100% 0% 100% 0%",threshold:.5}).observe(I),i.forEachWithIndex(e,(T,h)=>new IntersectionObserver(i.forEach(b=>{b.isIntersecting&&t.setAttribute(_,String(T))}),{root:null,rootMargin:"100% 0% 100% 0%",threshold:.5}).observe(h)),r.addEventListener("click",()=>e[s()-1]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})),o.addEventListener("click",()=>e[s()+1]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})))})},Te=()=>{const a=new Map;ie.forEach((r,o)=>{const t=r.getAttribute("id"),e=ce[o];if(!t)throw new Error("Le lien ne dispose pas d'ID !");if(!e)throw new Error("Le lien ne dispose pas de section correspondante !");a.set(t,[r,e]),r.addEventListener("click",s=>{s.preventDefault();const u=r.getAttribute(m)==="true";ne(n(a.values(),Array.from)),!u&&(r.setAttribute(m,"true"),e.removeAttribute(O))})}),R.ifRight(r=>r.addEventListener("change",o=>{const t=n(l.fromNullable(o.target),e=>e.filter(K));n(t,e=>e.map(s=>s.validity.valid),e=>e.ifJust(s=>c.toggleAttribute(W,!s))),n(t,e=>e.chain(s=>l.fromNullable(s.selectedOptions[0])),e=>e.chain(s=>l.fromNullable(s.getAttribute(V))),e=>e.ifJust(s=>{Ee.textContent=`${s}`}))})),c.addEventListener("click",r=>le())},le=()=>{c.textContent="Adding...";const a=R.map(o=>o.value).orDefault(String(L.idProduit)),r={id:Number(a),quantity:1};re(r,oe).map(o=>{fetch(g,{body:JSON.stringify(o),credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[v]:L.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(async t=>{Q(t)&&X("500 Server Error"),n(await t.json(),e=>ee(e,Z),q.getUnsafe("items_count"),se.tap(e=>{c.textContent="Added to cart!",Y({quantiteProduits:e})}))}).catch(t=>{$(t)?(z(t),console.error(t)):console.error("e n'est pas une Erreur ?!",t),c.textContent="Add to cart"})}).ifLeft(o=>console.error(o.issues))};document.addEventListener("DOMContentLoaded",()=>{Te(),ue()});
import{z as O,N as n}from"./index.CuMLbxmh.js";import{o as m,a as _,n as N,c as D,s as R,j as U,V as g}from"./validation.p-hUfG_o.js";import{h as P}from"./api.DpNqIphF.js";import{b as i,R as o,g as I,r as v,ar as M,as as F,at as B,au as w,av as H,aw as G,ax as y,ay as J,az as V,aA as x,aB as k,aC as l,aD as C,G as h,V as q,B as u,aE as W,D as S,E as L,F as d,a1 as X,I as c,ac as j,f as z}from"./utils.DS2YS0tX.js";import{E as A,l as $,e as Q,p as K,c as Y}from"./reseau.C8CWV2JS.js";import{a as Z}from"./gardes.CUgVnuaB.js";import{g as ee,d as te}from"./messages.Qx8X6YMT.js";import{a0 as p}from"./exports.1ijyAKMZ.js";import{t as re}from"./index-c1cc4c86.RjqwfILA.js";const Ee=m({attribute:R(),value:R()}),ae=m({id:_(N()),quantity:_(N()),variation:_(D(Ee))}),f=_etats,se=s=>j(s,t=>{t.at(0)?.setAttribute(z,"false"),t.at(1)?.setAttribute(h,"true")}),e={BOUTON_AJOUT_PANIER:i(F),CONTENEUR_FLECHES_DEFILEMENT:i(B),FLECHE_DEFILEMENT_DROITE:i(w),FLECHE_DEFILEMENT_GAUCHE:i(H),IMAGES:o.flat([i(G),I(y)]),LIENS_ONGLETS:I(J),PHOTOS_PRODUIT:i(V),PRIX_PRODUIT:i(x),SECTIONS_CONTENUS:I(k),SELECTEUR_VARIATION:v(M)},ie=()=>{const s=()=>Number(e.PHOTOS_PRODUIT.getAttribute(l));o.forEachWithIndex([e.IMAGES.at(0),e.IMAGES.at(-1)],(t,r)=>{r&&(new IntersectionObserver(o.forEach(a=>O([a.isIntersecting,t]).with([!0,0],()=>e.CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-debut")).with([!0,1],()=>e.CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-fin")).with([!1,0],()=>e.CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-debut","")).with([!1,1],()=>e.CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-fin","")).otherwise(()=>{})),{root:null,rootMargin:"100% 0% 100% 0%",threshold:.5}).observe(r),o.forEachWithIndex(e.IMAGES,(a,E)=>new IntersectionObserver(o.forEach(T=>{T.isIntersecting&&e.PHOTOS_PRODUIT.setAttribute(l,String(a))}),{root:null,rootMargin:"100% 0% 100% 0%",threshold:.5}).observe(E)),e.FLECHE_DEFILEMENT_GAUCHE.addEventListener("click",()=>e.IMAGES[s()-1]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})),e.FLECHE_DEFILEMENT_DROITE.addEventListener("click",()=>e.IMAGES[s()+1]?.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})))})},ne=()=>{const s=new Map;e.LIENS_ONGLETS.forEach((t,r)=>{const a=t.getAttribute("id"),E=e.SECTIONS_CONTENUS[r];if(!a)throw new Error("Le lien ne dispose pas d'ID !");if(!E)throw new Error("Le lien ne dispose pas de section correspondante !");s.set(a,[t,E]),t.addEventListener("click",T=>{T.preventDefault();const b=t.getAttribute(C)==="true";se(p(s.values(),Array.from)),!b&&(t.setAttribute(C,"true"),E.removeAttribute(h))})}),e.SELECTEUR_VARIATION.ifRight(t=>t.addEventListener("change",r=>{const a=q.fromNullable(r.target).filter(Z);a.map(E=>E.validity.valid).ifJust(E=>e.BOUTON_AJOUT_PANIER.toggleAttribute(u,!E)),a.chainNullable(E=>E.selectedOptions[0]).chainNullable(E=>E.getAttribute(W)).ifJust(E=>{e.PRIX_PRODUIT.textContent=`${E}`})})),e.BOUTON_AJOUT_PANIER.addEventListener("click",()=>oe())},oe=()=>{const s={id:e.SELECTEUR_VARIATION.map(t=>Number(t.value)).orDefault(f.idProduit),quantity:1};A.liftEither(U(s,ae)).ifRight(()=>{e.BOUTON_AJOUT_PANIER.setAttribute(u,""),e.BOUTON_AJOUT_PANIER.setAttribute(S,""),$(e.BOUTON_AJOUT_PANIER,500)}).chain(t=>Q(K({corps:JSON.stringify(t),nonce:f.nonce,route:P}))).chain(t=>A(async({throwE:r})=>O(await Y(t)).with({status:500},()=>r(new L("500 Server Error"))).with({status:400},()=>r(new d("400 Bad Request Error"))).with({status:201},a=>a.body).otherwise(a=>r(new Error(`Erreur inconnue ${String(a.status)}`))))).chain(t=>A.liftEither(U(t,te))).ifRight(t=>p(X(t,"items_count"),re(r=>{e.BOUTON_AJOUT_PANIER.textContent="Added to cart!",ee({quantiteProduits:r})}))).ifLeft(t=>{O(t).with(n.instanceOf(g),r=>{c(r),console.error(r.issues)}).with(n.instanceOf(L),n.instanceOf(d),r=>{c(r),console.error(r)}).with(n.instanceOf(DOMException),n.instanceOf(TypeError),n.instanceOf(Error),r=>{c(r),console.error(r)}).exhaustive(),e.BOUTON_AJOUT_PANIER.textContent="Add to cart"}).finally(()=>{e.BOUTON_AJOUT_PANIER.removeAttribute(S),e.BOUTON_AJOUT_PANIER.removeAttribute(u)}).run()};document.addEventListener("DOMContentLoaded",()=>{ne(),ie()});
//# sourceMappingURL=scripts-page-produit.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -69,7 +69,7 @@ button {
&.bouton-retour-haut {
position: fixed;
right: var(--espace-xl);
bottom: calc(var(--espace-xl) + var(--pied-de-page-hauteur));
bottom: calc(var(--espace-l) + var(--pied-de-page-hauteur));
transform: rotate(180deg);
padding: var(--espace-m);
visibility: hidden;

View file

@ -19,6 +19,7 @@ export const ATTRIBUT_LIVRAISON_VALIDEE = "data-livraison-validee";
export const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active";
export const ATTRIBUT_PAGE = "data-page";
export const ATTRIBUT_PRIX = "data-prix";
export const ATTRIBUT_TABINDEX = "tabindex";
// En-tête
export const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile";

View file

@ -53,7 +53,7 @@ const creeTransportFetch = (options: BrowserTransportOptions): Transport => {
/* Créé la configuration Sentry */
const client = new BrowserClient({
dsn: import.meta.env.VITE_GLITCHTIP_NSD,
environment: "development",
environment: "production",
integrations: [
breadcrumbsIntegration(),
dedupeIntegration(),
@ -63,6 +63,7 @@ const client = new BrowserClient({
httpContextIntegration(),
linkedErrorsIntegration(),
],
sendDefaultPii: true,
stackParser: defaultStackParser,
tracesSampleRate: 0.01,
transport: creeTransportFetch,

View file

@ -97,10 +97,7 @@ export const leveNonExistingKeyError = (message: string): never => {
* @param erreur
* @returns L'ID Sentry de l'évènement capturé.
*/
export const reporteErreur = <E extends Error>(erreur: E): string => {
console.error(erreur);
return captureException(erreur);
};
export const reporteErreur = <E extends Error>(erreur: E): string => captureException(erreur);
/**
* Reporte une Erreur, sous forme d'erreur console et au service GlitchTip, puis la lève sous forme

View file

@ -38,7 +38,7 @@ import {
} from "../constantes/messages-utilisateur";
import { lanceAnimationCycleLoading } from "../lib/animations";
import { eitherJsonParse, eitherSessionStorageGet } from "../lib/dom";
import { BadRequestError, leveErreur, NonExistingKeyError, ServerError } from "../lib/erreurs";
import { BadRequestError, leveErreur, NonExistingKeyError, reporteErreur, ServerError } from "../lib/erreurs";
import { ErreurAdresseInvalide } from "../lib/erreurs/adresses";
import { emetUniqueMessageCanal } from "../lib/messages";
import { diviseParCent, formateEnEuros } from "../lib/nombres";
@ -194,10 +194,12 @@ export const initialiseBoutonCalculLivraison = (): void => {
(erreur: BadRequestError | ErreurAdresseInvalide | FetchErrors | ServerError | ValiError<AnySchema>) => {
match(erreur)
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error(e.issues);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.with(P.instanceOf(ErreurAdresseInvalide), e => {
reporteErreur(e);
console.error(e, e.problemes);
match(e.problemes)
.when(p => pipe(dictValues(p), arrayFind(c => c === "The provided postcode is not valid")), () => {
@ -208,10 +210,12 @@ export const initialiseBoutonCalculLivraison = (): void => {
});
})
.with(P.instanceOf(ServerError), P.instanceOf(BadRequestError), e => {
reporteErreur(e);
console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.with(P.instanceOf(DOMException), P.instanceOf(TypeError), P.instanceOf(Error), e => {
reporteErreur(e);
console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU;
})
@ -261,8 +265,14 @@ export const initialiseBoutonCreationCommande = (): void => {
// Traite de manière différenciée les Erreurs
.ifLeft((erreur: NonExistingKeyError | SyntaxError | ValiError<AnySchema>) => {
match(erreur)
.with(P.instanceOf(ValiError), e => console.error(e.issues))
.with(P.instanceOf(SyntaxError), P.instanceOf(NonExistingKeyError), e => console.error(e))
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error(e.issues);
})
.with(P.instanceOf(SyntaxError), P.instanceOf(NonExistingKeyError), e => {
reporteErreur(e);
console.error(e);
})
.exhaustive();
// Nettoie un stockage de session erronné
@ -381,6 +391,7 @@ export const initialiseBoutonCreationCommande = (): void => {
.ifLeft((erreur: BadRequestError | DOMException | ServerError | TypeError | ValiError<AnySchema>) => {
match(erreur)
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error("ValiError", e.issues);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_CREATION_COMMANDE;
})
@ -390,11 +401,15 @@ export const initialiseBoutonCreationCommande = (): void => {
P.instanceOf(ServerError),
P.instanceOf(TypeError),
e => {
reporteErreur(e);
console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_CREATION_COMMANDE;
},
)
.otherwise(e => console.error("erreur inconnu", e));
.otherwise(e => {
reporteErreur(e);
console.error("erreur inconnu", e);
});
// Désactive l'animation de chargement et rend le Bouton de nouveau cliquable
E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT);

View file

@ -31,7 +31,7 @@ import {
import { NOM_CANAL_REVALIDATION_LIVRAISON } from "../constantes/messages";
import { lanceAnimationCycleLoading } from "../lib/animations";
import { accorderCibleASelecteur } from "../lib/dom";
import { ServerError } from "../lib/erreurs";
import { reporteErreur, ServerError } from "../lib/erreurs";
import { ErreurCodePromoInvalide } from "../lib/erreurs/codes-promo";
import { estReponse500 } from "../lib/gardes";
import { emetUniqueMessageCanal, reponseEstCodeErreurWC } from "../lib/messages";
@ -149,19 +149,25 @@ export const initialiseElementsCodePromo = (): void => {
// Traite les Erreurs et affiche un Message à l'Utilisateur
match(erreur)
.with(P.instanceOf(ValiError), e => console.error("ValiError", e.issues))
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error("ValiError", e.issues);
})
.with(P.instanceOf(ErreurCodePromoInvalide), e => {
E.MESSAGE_CODE_PROMO.textContent = "This promo code does not exist.";
reporteErreur(e);
console.error(e);
})
.with(P.instanceOf(ServerError), e => {
E.MESSAGE_CODE_PROMO.textContent =
"Sorry, something went wrong! Please refresh the page and try again.";
reporteErreur(e);
console.error(e);
})
.with(P.instanceOf(TypeError), e => {
E.MESSAGE_CODE_PROMO.textContent =
"Sorry, something went wrong! Please refresh the page and try again.";
reporteErreur(e);
console.error(e);
})
.exhaustive();
@ -223,9 +229,18 @@ export const initialiseElementsCodePromo = (): void => {
})
.ifLeft(erreur =>
match(erreur)
.with(P.instanceOf(ValiError), e => console.error("retour ajout code promo", e.issues))
.with(P.instanceOf(ServerError), e => console.error("retour ajout code promo", e))
.with(P.instanceOf(TypeError), e => console.error("retour ajout code promo", e))
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error("retour ajout code promo", e.issues);
})
.with(P.instanceOf(ServerError), e => {
reporteErreur(e);
console.error("retour ajout code promo", e);
})
.with(P.instanceOf(TypeError), e => {
reporteErreur(e);
console.error("retour ajout code promo", e);
})
.exhaustive()
)
.finally(() => {

View file

@ -147,6 +147,7 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réactive les Boutons
// pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(true));
})
// TODO: ifLeft ?
.run();
});
})
@ -200,6 +201,7 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réactive les Boutons
// pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(true));
})
// TODO: ifLeft ?
.run();
});
})
@ -255,6 +257,7 @@ export const initialiseActionsEntreesPanier = (): void => {
// Réactive les Boutons
// pipe(entrees, arrayMap(recupereElementsEntreePanier), majActivationBoutons(true));
})
// TODO: ifLeft ?
.run();
});
})

View file

@ -4,7 +4,12 @@ import { pipe } from "@mobily/ts-belt";
import { head as arrayHead } from "@mobily/ts-belt/Array";
import { tap as optionTap } from "@mobily/ts-belt/Option";
import { ATTRIBUT_ACTIF, ATTRIBUT_ARIA_HIDDEN } from "./constantes/dom";
import {
ATTRIBUT_ACTIF,
ATTRIBUT_ARIA_HIDDEN,
ATTRIBUT_TABINDEX,
SELECTEUR_BOUTON_MENU_MOBILE,
} from "./constantes/dom";
import { recupereEleOuLeve } from "./lib/utils";
/**
@ -17,61 +22,91 @@ import { recupereEleOuLeve } from "./lib/utils";
*/
const E = {
BOUTON_MENU_MOBILE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_BOUTON_MENU_MOBILE),
BOUTON_RETOUR_SOMMET: recupereEleOuLeve<HTMLButtonElement>("#bouton-retour-haut"),
CORPS_HTML: recupereEleOuLeve<HTMLBodyElement>("body"),
IMAGE_BOUTON: recupereEleOuLeve<HTMLImageElement>("#bouton-retour-haut img"),
};
const RATIO_MINIMUM_FENETRE_PAR_ECRAN = 2;
/** Le ratio minimum hauteur de page/hauteur de la fenêtre à atteindre pour que le Bouton soit nécessaire. */
const RATIO_MINIMUM_PAGE_PAR_FENETRE = 2;
/** Le ratio actuel hauteur de page/hauteur de la fenêtre. */
let ratioActuel = E.CORPS_HTML.getBoundingClientRect().height / window.innerHeight;
/** La position actuelle du défilement vertical dans la page. */
let defilementY = window.scrollY;
/** Indique qu'une étape de rafraîchissement via `requestAnimationFrame` a déjà été demandée. */
let etapePlanifiee = false;
/**
* Retourne la position du défilement vertical dans la page.
*
* @returns Un nombre en pixels.
*/
const majDefilementY = (): number => window.scrollY;
/**
* @param estVisible
*/
const majVisibiliteBouton = (estVisible: boolean): void => {
if (estVisible) {
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_ACTIF, "");
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_TABINDEX, "99");
E.IMAGE_BOUTON.removeAttribute(ATTRIBUT_ARIA_HIDDEN);
} else {
E.BOUTON_RETOUR_SOMMET.removeAttribute(ATTRIBUT_ACTIF);
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_TABINDEX, "-2");
E.IMAGE_BOUTON.setAttribute(ATTRIBUT_ARIA_HIDDEN, "");
}
etapePlanifiee = false;
};
/**
* Initialise le cycle de mises à jour du Bouton en fonction de la position du défilement dans la page et le recalcul
* de ces données au redimensionnement de la fenêtre.
*
* @returns void
*/
const initialiseObservationFenetre = (): void => {
majVisibiliteBouton(defilementY > window.innerHeight * RATIO_MINIMUM_FENETRE_PAR_ECRAN);
window.addEventListener("scroll", (): void => {
// Met à jour la valeur du défilement vertical dans la page
defilementY = majDefilementY();
// Vérifie que le Ratio soit le bon
if (ratioActuel < RATIO_MINIMUM_PAGE_PAR_FENETRE) return;
// Attend la prochaine étape
if (etapePlanifiee) return;
new ResizeObserver(entrees => {
etapePlanifiee = true;
requestAnimationFrame((): void =>
majVisibiliteBouton(defilementY > (window.innerHeight * RATIO_MINIMUM_PAGE_PAR_FENETRE))
);
});
new ResizeObserver((entrees: Array<ResizeObserverEntry>): void => {
pipe(
arrayHead(entrees),
optionTap(_ => {
optionTap((_): void => {
ratioActuel = E.CORPS_HTML.getBoundingClientRect().height / window.innerHeight;
defilementY = majDefilementY();
}),
);
}).observe(E.CORPS_HTML);
window.addEventListener("scroll", () => {
// Met à jour la valeur du défilement
defilementY = majDefilementY();
// Vérifie que le Ratio est le bon
if (ratioActuel < RATIO_MINIMUM_FENETRE_PAR_ECRAN) return;
// Attend la prochaine étape
if (etapePlanifiee) return;
etapePlanifiee = true;
requestAnimationFrame(() =>
majVisibiliteBouton(defilementY > (window.innerHeight * RATIO_MINIMUM_FENETRE_PAR_ECRAN))
);
});
// Déclenche la première mise à jour
majVisibiliteBouton(defilementY > window.innerHeight * RATIO_MINIMUM_PAGE_PAR_FENETRE);
};
/**
* Navigue au sommet de la page et focus sur le premier élément de la page qui peut le recevoir.
*
* @returns void
*/
const initialiseBoutonRetourSommet = (): void => {
E.BOUTON_RETOUR_SOMMET.addEventListener("click", (evenement: Event) => {
E.BOUTON_RETOUR_SOMMET.addEventListener("click", (evenement: Event): void => {
evenement.preventDefault();
window.scrollTo({ behavior: "smooth", top: 0 });
E.BOUTON_MENU_MOBILE.focus({ preventScroll: true });
});
};

View file

@ -40,7 +40,6 @@ const initialiseScrollStorytelling = (): void => {
* TODO
*/
const majDimensions = (): void => {
console.time();
hauteurImage = pipe(
A.getBy(E.IMAGES_STORYTELLING, (i: HTMLDivElement) => !i.hasAttribute(ATTRIBUT_CACHE)),
O.map((i: HTMLDivElement) => i.getBoundingClientRect().height),
@ -48,7 +47,6 @@ const initialiseScrollStorytelling = (): void => {
);
E.CONTENEUR_STORYTELLING.style.minHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;
E.CONTENEUR_STORYTELLING.style.maxHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;
console.timeEnd();
};
/**

View file

@ -24,7 +24,7 @@ import {
} from "./constantes/dom.ts";
import { lanceAnimationCycleLoading } from "./lib/animations.ts";
import { html } from "./lib/dom.ts";
import { BadRequestError, ServerError } from "./lib/erreurs.ts";
import { BadRequestError, reporteErreur, ServerError } from "./lib/erreurs.ts";
import { creeReponseSimplifiee, getBackendAvecParametresUrl } from "./lib/reseau.ts";
import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts";
import { recupereEleOuLeve } from "./lib/utils.ts";
@ -145,8 +145,14 @@ const initialisePageBoutique = (): void => {
// 7. Traite les Erreurs et affiche un Message à l'Utilisateur
.ifLeft((erreur: APIProductsErrors) => {
match(erreur)
.with(P.instanceOf(ValiError), e => console.error("ValiError", e.issues))
.otherwise(e => console.error("Erreur", e));
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error("ValiError", e.issues);
})
.otherwise(e => {
reporteErreur(e);
console.error("Erreur", e);
});
E.BOUTON_PLUS_DE_PRODUITS.textContent = "Error, try again?";
})

View file

@ -1,15 +1,22 @@
// Scripts pour la Page Produit
import { A, D, F, pipe } from "@mobily/ts-belt";
import { type Either, Maybe } from "purify-ts";
import { match } from "ts-pattern";
import { A, pipe } from "@mobily/ts-belt";
import { forEach as arrayForEach } from "@mobily/ts-belt/Array";
import { get as dictGet } from "@mobily/ts-belt/Dict";
import { tap as optionTap } from "@mobily/ts-belt/Option";
import { EitherAsync, Maybe } from "purify-ts";
import { match, P } from "ts-pattern";
import { type AnySchema, ValiError } from "valibot";
import type { WCStoreCart } from "./lib/types/api/cart";
import type { WCStoreCartAddItemArgs } from "./lib/types/api/cart-add-item.ts";
import type { FetchErrors } from "./lib/types/reseau";
import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "./constantes/api.ts";
import { ROUTE_API_AJOUTE_ARTICLE_PANIER } from "./constantes/api.ts";
import {
ATTRIBUT_ARIA_HIDDEN,
ATTRIBUT_ARIA_SELECTED,
ATTRIBUT_CHARGEMENT,
ATTRIBUT_DESACTIVE,
ATTRIBUT_HIDDEN,
ATTRIBUT_INDEX_IMAGE_ACTIVE,
@ -26,19 +33,14 @@ import {
SELECTEUR_SECTIONS_CONTENUS,
SELECTEUR_SELECTEUR_QUANTITE,
} from "./constantes/dom";
import { recupereElementOuLeve, recupereElementsOuLeve } from "./lib/dom.ts";
import { leveServerError, reporteErreur } from "./lib/erreurs.ts";
import { estError, estHTMLSelectElement, estReponse500 } from "./lib/gardes.ts";
import { lanceAnimationCycleLoading } from "./lib/animations.ts";
import { BadRequestError, reporteErreur, ServerError } from "./lib/erreurs.ts";
import { estHTMLSelectElement } from "./lib/gardes.ts";
import { emetMessageMajBoutonPanier } from "./lib/messages.ts";
import { traiteReponseBackendWCSelonCodesHTTP } from "./lib/reseau.ts";
import { creeReponseSimplifiee, eitherAsyncFetch, postBackend } from "./lib/reseau.ts";
import { WCStoreCartAddItemArgsSchema } from "./lib/schemas/api/cart-add-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/api/cart.ts";
import {
recupereElementDocumentEither,
recupereElementsDocumentEither,
recupereEleOuLeve,
recupereElesOuLeve,
} from "./lib/utils.ts";
import { recupereElementDocumentEither, recupereEleOuLeve, recupereElesOuLeve } from "./lib/utils.ts";
import { eitherParse } from "./lib/validation.ts";
type EnsembleLienContenu = [HTMLAnchorElement, HTMLElement];
@ -55,97 +57,81 @@ type EtatsPage = {
const ETATS_PAGE: EtatsPage = _etats;
/**
* Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit, en ajustant les attributs correspondants.
* Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit en ajustant les attributs
* correspondants.
*/
const deplieToutesSections = (ensembleLiensContenus: Array<EnsembleLienContenu>): void => {
ensembleLiensContenus.forEach(ensemble => {
ensemble[0].setAttribute(ATTRIBUT_ARIA_SELECTED, "false");
ensemble[1].setAttribute(ATTRIBUT_HIDDEN, "true");
const deplieToutesSections = (ensembleLiensContenus: Array<EnsembleLienContenu>): void =>
arrayForEach(ensembleLiensContenus, (ensemble: EnsembleLienContenu): void => {
ensemble.at(0)?.setAttribute(ATTRIBUT_ARIA_HIDDEN, "false");
ensemble.at(1)?.setAttribute(ATTRIBUT_HIDDEN, "true");
});
};
// Éléments d'intérêt
/** Le Bouton permettant l'ajout d'un Produit dans le Panier. */
const BOUTON_AJOUT_PANIER: HTMLButtonElement = pipe(
recupereElementDocumentEither<HTMLButtonElement>(SELECTEUR_BOUTON_AJOUT_PANIER),
recupereElementOuLeve,
);
/** Le Sélecteur de Variation de Produit. */
const SELECTEUR_VARIATION: Either<SyntaxError, HTMLSelectElement> = recupereElementDocumentEither<HTMLSelectElement>(
SELECTEUR_SELECTEUR_QUANTITE,
);
const PRIX_PRODUIT: HTMLParagraphElement = recupereEleOuLeve<HTMLParagraphElement>(
SELECTEUR_PRIX_PRODUIT,
);
/** */
const LIENS_ONGLETS: Array<HTMLAnchorElement> = pipe(
recupereElementsDocumentEither<HTMLAnchorElement>(SELECTEUR_LIENS_ONGLETS),
recupereElementsOuLeve,
);
/** */
const SECTIONS_CONTENUS: Array<HTMLElement> = pipe(
recupereElementsDocumentEither<HTMLElement>(SELECTEUR_SECTIONS_CONTENUS),
recupereElementsOuLeve,
);
const initialiseFlechesDefilementImages = (): void => {
const CONTENEUR_FLECHES_DEFILEMENT = recupereEleOuLeve<HTMLDivElement>(
SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT,
);
const FLECHE_DEFILEMENT_GAUCHE = recupereEleOuLeve<HTMLButtonElement>(
SELECTEUR_FLECHE_DEFILEMENT_GAUCHE,
);
const FLECHE_DEFILEMENT_DROITE = recupereEleOuLeve<HTMLButtonElement>(
SELECTEUR_FLECHE_DEFILEMENT_DROITE,
);
const PHOTOS_PRODUIT = recupereEleOuLeve<HTMLElement>(SELECTEUR_PHOTOS_PRODUIT);
const IMAGES = A.flat([
const E = {
BOUTON_AJOUT_PANIER: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_BOUTON_AJOUT_PANIER),
CONTENEUR_FLECHES_DEFILEMENT: recupereEleOuLeve<HTMLDivElement>(SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT),
FLECHE_DEFILEMENT_DROITE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_FLECHE_DEFILEMENT_DROITE),
FLECHE_DEFILEMENT_GAUCHE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_FLECHE_DEFILEMENT_GAUCHE),
IMAGES: A.flat([
recupereEleOuLeve<HTMLImageElement>(SELECTEUR_IMAGE_COLONNE_GAUCHE),
recupereElesOuLeve<HTMLImageElement>(SELECTEUR_IMAGES_COLONNE_DROITE),
]);
]),
LIENS_ONGLETS: recupereElesOuLeve<HTMLAnchorElement>(SELECTEUR_LIENS_ONGLETS),
PHOTOS_PRODUIT: recupereEleOuLeve<HTMLElement>(SELECTEUR_PHOTOS_PRODUIT),
PRIX_PRODUIT: recupereEleOuLeve<HTMLParagraphElement>(SELECTEUR_PRIX_PRODUIT),
SECTIONS_CONTENUS: recupereElesOuLeve<HTMLElement>(SELECTEUR_SECTIONS_CONTENUS),
SELECTEUR_VARIATION: recupereElementDocumentEither<HTMLSelectElement>(SELECTEUR_SELECTEUR_QUANTITE),
};
const recupereIndexImageCourante = (): number => Number(PHOTOS_PRODUIT.getAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE));
const initialiseFlechesDefilementImages = (): void => {
const recupereIndexImageCourante = (): number => Number(E.PHOTOS_PRODUIT.getAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE));
// Affiche et cache en fonction de la position de défilement
A.forEachWithIndex([IMAGES.at(0), IMAGES.at(-1)], (index, image) => {
A.forEachWithIndex([E.IMAGES.at(0), E.IMAGES.at(-1)], (index, image) => {
if (!image) return;
// Change les attributs gérant l'affichage des flèches de défilement
// Change les attributs gérants l'affichage des flèches de défilement
new IntersectionObserver(
A.forEach(entree =>
match([entree.isIntersecting, index])
.with([true, 0], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-debut"))
.with([true, 1], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-fin"))
.with([false, 0], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-debut", ""))
.with([false, 1], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-fin", ""))
.with([true, 0], () => E.CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-debut"))
.with([true, 1], () => E.CONTENEUR_FLECHES_DEFILEMENT.removeAttribute("data-images-presentes-fin"))
.with([false, 0], () => E.CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-debut", ""))
.with([false, 1], () => E.CONTENEUR_FLECHES_DEFILEMENT.setAttribute("data-images-presentes-fin", ""))
.otherwise(() => void 0)
),
{ root: null, rootMargin: "100% 0% 100% 0%", threshold: 0.5 },
).observe(image);
// Change l'index de l'Image active en fonction du défilement
A.forEachWithIndex(IMAGES, (index, image) =>
A.forEachWithIndex(E.IMAGES, (index, image) =>
new IntersectionObserver(
A.forEach(entree => {
if (!entree.isIntersecting) return;
PHOTOS_PRODUIT.setAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE, String(index));
E.PHOTOS_PRODUIT.setAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE, String(index));
}),
{ root: null, rootMargin: "100% 0% 100% 0%", threshold: 0.5 },
).observe(image));
// Défile au clic sur les flèches
FLECHE_DEFILEMENT_GAUCHE.addEventListener("click", () =>
IMAGES[recupereIndexImageCourante() - 1]?.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center",
}));
FLECHE_DEFILEMENT_DROITE.addEventListener("click", () =>
IMAGES[recupereIndexImageCourante() + 1]?.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center",
}));
E.FLECHE_DEFILEMENT_GAUCHE.addEventListener(
"click",
() =>
E.IMAGES[recupereIndexImageCourante() - 1]?.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center",
}),
);
E.FLECHE_DEFILEMENT_DROITE.addEventListener(
"click",
() =>
E.IMAGES[recupereIndexImageCourante() + 1]?.scrollIntoView({
behavior: "smooth",
block: "nearest",
inline: "center",
}),
);
});
};
@ -153,23 +139,26 @@ const gereBoiteInformationsProduit = (): void => {
const onglets = new Map<string, EnsembleLienContenu>();
// Créé la Map avec les ensembles Lien-Contenu
LIENS_ONGLETS.forEach((lien, index) => {
E.LIENS_ONGLETS.forEach((lien, index): void => {
const idOnglet: null | string = lien.getAttribute("id");
const sectionCorrespondante: HTMLElement | undefined = SECTIONS_CONTENUS[index];
const sectionCorrespondante: HTMLElement | undefined = E.SECTIONS_CONTENUS[index];
if (!idOnglet) throw new Error("Le lien ne dispose pas d'ID !");
if (!sectionCorrespondante) throw new Error("Le lien ne dispose pas de section correspondante !");
onglets.set(idOnglet, [lien, sectionCorrespondante]);
lien.addEventListener("click", e => {
lien.addEventListener("click", (evenement: Event): void => {
// Empêche la pollution de l'historique de navigation
e.preventDefault();
evenement.preventDefault();
// Sauvegarde l'état d'ouverture de la section avant de toutes les fermer
const estAncienOngletCourant: boolean = lien.getAttribute(ATTRIBUT_ARIA_SELECTED) === "true";
deplieToutesSections(pipe(onglets.values(), Array.from<EnsembleLienContenu>));
// Ne fais rien de plus si l'onglet sélectionné était le courant
if (estAncienOngletCourant) return;
// Ouvre le nouvel onglet sélectionné
lien.setAttribute(ATTRIBUT_ARIA_SELECTED, "true");
sectionCorrespondante.removeAttribute(ATTRIBUT_HIDDEN);
@ -177,108 +166,117 @@ const gereBoiteInformationsProduit = (): void => {
});
// Ajoute des Écouteurs d'Événements
SELECTEUR_VARIATION.ifRight(selecteur =>
selecteur.addEventListener("change", evenement => {
const cibleSelecteur = pipe(
Maybe.fromNullable(evenement.target),
cibleEvenement => cibleEvenement.filter(estHTMLSelectElement),
);
E.SELECTEUR_VARIATION.ifRight(selecteur =>
selecteur.addEventListener("change", (evenement: Event): void => {
const cibleSelecteur: Maybe<HTMLSelectElement> = Maybe
.fromNullable(evenement.target)
.filter(estHTMLSelectElement);
// Active le Bouton si le Sélecteur est valide
pipe(
cibleSelecteur,
element => element.map(v => v.validity.valid),
validite => validite.ifJust((v: boolean) => BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v)),
);
cibleSelecteur
.map(v => v.validity.valid)
.ifJust((v: boolean) => E.BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v));
// Met à jour le prix affiché pour la Variation
pipe(
cibleSelecteur,
selecteur => selecteur.chain(s => Maybe.fromNullable(s.selectedOptions[0])),
option => option.chain(e => Maybe.fromNullable(e.getAttribute(ATTRIBUT_PRIX))),
prix =>
prix.ifJust(p => {
PRIX_PRODUIT.textContent = `${p}`;
}),
);
cibleSelecteur
.chainNullable(s => s.selectedOptions[0])
.chainNullable(e => e.getAttribute(ATTRIBUT_PRIX))
.ifJust(p => {
E.PRIX_PRODUIT.textContent = `${p}`;
});
})
);
BOUTON_AJOUT_PANIER.addEventListener("click", _ => ajouteProduitAuPanier());
E.BOUTON_AJOUT_PANIER.addEventListener("click", (): void => ajouteProduitAuPanier());
};
const ajouteProduitAuPanier = () => {
// Déclenche l'etat de chargement
BOUTON_AJOUT_PANIER.textContent = "Adding...";
const ajouteProduitAuPanier = (): void => {
// Construis les arguments de la requête au backend
const idProduit: string = SELECTEUR_VARIATION
.map(selecteur => selecteur.value)
.orDefault(String(ETATS_PAGE.idProduit));
const args: WCStoreCartAddItemArgs = {
id: Number(idProduit),
const argsRequete: WCStoreCartAddItemArgs = {
id: E.SELECTEUR_VARIATION
.map((selecteur: HTMLSelectElement): number => Number(selecteur.value))
// Récupère l'ID du Produit de la Page pour les Produits simples
.orDefault(ETATS_PAGE.idProduit),
quantity: 1,
};
// Exécute la requête
eitherParse<typeof WCStoreCartAddItemArgsSchema>(args, WCStoreCartAddItemArgsSchema)
.map((args: WCStoreCartAddItemArgs) => {
fetch(ROUTE_API_AJOUTE_ARTICLE_PANIER, {
body: JSON.stringify(args),
credentials: "same-origin",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
[ENTETE_WC_NONCE]: ETATS_PAGE.nonce,
},
method: "POST",
mode: "same-origin",
signal: AbortSignal.timeout(5000),
})
.then(async (reponse: Response) => {
// Traite le cas d'erreur 500
if (estReponse500(reponse)) leveServerError("500 Server Error");
// Réalise la Requête et traite sa Réponse
void EitherAsync
// 1. Valide les arguments de la Requête
.liftEither(eitherParse(argsRequete, WCStoreCartAddItemArgsSchema))
// 2. Exécute un Effet pour empêcher les requêtes concurrentes et lancer une animation de chargement
.ifRight(() => {
// Désactive le Bouton pour empêcher des requêtes concurrentes
E.BOUTON_AJOUT_PANIER.setAttribute(ATTRIBUT_DESACTIVE, "");
E.BOUTON_AJOUT_PANIER.setAttribute(ATTRIBUT_CHARGEMENT, "");
pipe(
// Récupère la Réponse
await reponse.json(),
// Traite tous les codes HTTPs possibles
(corpsReponse: unknown) =>
traiteReponseBackendWCSelonCodesHTTP<WCStoreCart, typeof WCStoreCartSchema>(
corpsReponse,
WCStoreCartSchema,
),
// Récupère le nombre de Produits dans la Panier
D.getUnsafe("items_count"),
// Déclenche les effets pour la mise à jour de l'IU
F.tap((nombreArticlesPanier: number) => {
BOUTON_AJOUT_PANIER.textContent = "Added to cart!";
emetMessageMajBoutonPanier({ quantiteProduits: nombreArticlesPanier });
// TODO: Prévoir un cas où ce Timeout est annulé quand l'Utilisateur agit avant sur le Sélecteur
// setTimeout(() => {
// SELECTEUR_VARIATION.ifRight(selecteur => {
// selecteur.value = selecteur.options.item(0)?.value ?? "--";
// });
// BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, true);
// BOUTON_AJOUT_PANIER.textContent = "Add to cart";
// }, 3000);
}),
);
})
.catch((e: unknown) => {
if (estError(e)) {
// Lance un cycle d'animation sur le texte de chargement
lanceAnimationCycleLoading(E.BOUTON_AJOUT_PANIER, 500);
})
// 3. Exécute la requête via fetch sous forme d'EitherAsync
.chain((args: WCStoreCartAddItemArgs) =>
eitherAsyncFetch(
postBackend({
corps: JSON.stringify(args),
nonce: ETATS_PAGE.nonce,
route: ROUTE_API_AJOUTE_ARTICLE_PANIER,
}),
)
)
// 4. Traite les cas d'Erreurs et récupère le Corps de la Réponse
.chain((reponse: Response) =>
EitherAsync<BadRequestError | ServerError, unknown>(async ({ throwE }) =>
// Simplifie les données à matcher
match(await creeReponseSimplifiee(reponse))
.with({ status: 500 }, () => throwE(new ServerError("500 Server Error")))
.with({ status: 400 }, () => throwE(new BadRequestError("400 Bad Request Error")))
.with({ status: 201 }, r => r.body)
.otherwise(erreur => throwE(new Error(`Erreur inconnue ${String(erreur.status)}`)))
)
)
// 5. Vérifie le Schéma de la Réponse
.chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema)))
// 6. Exécute un Effet pour la mise à jour du DOM avec les Résultats
.ifRight((panier: WCStoreCart) =>
pipe(
dictGet(panier, "items_count"),
optionTap((totalArticles: number) => {
E.BOUTON_AJOUT_PANIER.textContent = "Added to cart!";
emetMessageMajBoutonPanier({ quantiteProduits: totalArticles });
}),
)
)
.ifLeft(
(erreur: BadRequestError | FetchErrors | ServerError | ValiError<AnySchema>) => {
match(erreur)
.with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error(e.issues);
// E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.with(P.instanceOf(ServerError), P.instanceOf(BadRequestError), e => {
reporteErreur(e);
console.error(e);
} else {
console.error("e n'est pas une Erreur ?!", e);
}
BOUTON_AJOUT_PANIER.textContent = "Add to cart";
});
// E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
})
.with(P.instanceOf(DOMException), P.instanceOf(TypeError), P.instanceOf(Error), e => {
reporteErreur(e);
console.error(e);
// E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU;
})
.exhaustive();
E.BOUTON_AJOUT_PANIER.textContent = "Add to cart";
},
)
.finally((): void => {
// Désactive l'animation de chargement et rend le Bouton de nouveau cliquable
E.BOUTON_AJOUT_PANIER.removeAttribute(ATTRIBUT_CHARGEMENT);
E.BOUTON_AJOUT_PANIER.removeAttribute(ATTRIBUT_DESACTIVE);
})
.ifLeft(e => console.error(e.issues));
.run();
};
document.addEventListener("DOMContentLoaded", () => {
document.addEventListener("DOMContentLoaded", (): void => {
gereBoiteInformationsProduit();
initialiseFlechesDefilementImages();
});