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", "ETATS",
"etendu", "etendu",
"exts", "exts",
"Fenetre",
"FENETRE",
"formatte", "formatte",
"generique", "generique",
"geometricprecision", "geometricprecision",
@ -44,12 +46,14 @@
"multiformats", "multiformats",
"paypal", "paypal",
"phpstan", "phpstan",
"Planifiee",
"prenom", "prenom",
"presentes", "presentes",
"problemes", "problemes",
"Proprietes", "Proprietes",
"rafraichissement", "rafraichissement",
"rapprochee", "rapprochee",
"recalcul",
"reponse", "reponse",
"requete", "requete",
"resultat", "resultat",

View file

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

89
composer.lock generated
View file

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

102
pnpm-lock.yaml generated
View file

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

View file

@ -233,7 +233,7 @@ button.bouton-blanc-sur-noir {
button.bouton-retour-haut { button.bouton-retour-haut {
position: fixed; position: fixed;
right: var(--espace-xl); 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); transform: rotate(180deg);
padding: var(--espace-m); padding: var(--espace-m);
visibility: hidden; 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": { "_api.DpNqIphF.js": {
"file": "api.DpNqIphF.js", "file": "api.DpNqIphF.js",
"name": "api", "name": "api",
"integrity": "sha512-mTfL4gtvoz3qjZQc7YT1SR3vveP++WDx2k4ZRvGymQqyphpGVy449QeScFaoHKn1foAIA6tVv3zyLPRRxNe8DA==" "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": { "_exports.1ijyAKMZ.js": {
"file": "exports.1ijyAKMZ.js", "file": "exports.1ijyAKMZ.js",
"name": "exports", "name": "exports",
"integrity": "sha512-rJhZSofSl3JPZZ+GhoqNey/Yq1PI4SLzLm9zb6x2wNb+XrqHY//eaKKfWFpTDTAq3kb5GA83kQAQCbTIT87dqw==" "integrity": "sha512-rJhZSofSl3JPZZ+GhoqNey/Yq1PI4SLzLm9zb6x2wNb+XrqHY//eaKKfWFpTDTAq3kb5GA83kQAQCbTIT87dqw=="
}, },
"_gardes.CgXTclcl.js": { "_gardes.CUgVnuaB.js": {
"file": "gardes.CgXTclcl.js", "file": "gardes.CUgVnuaB.js",
"name": "gardes", "name": "gardes",
"integrity": "sha512-OBCB0p698NhCHDMxxmkgijBmjufwF2NDjZl1j1SlohZYzT/fRqoUURBwr97o1d/d9lx3V86U6dYtn5O5vHFIdQ==" "integrity": "sha512-vm0IriyudxmLFDDV6rB6o7rCqTsT2I7Rupjru5IX6WuTx8WZ+Pvm8Xnml4qUvhIAcDjM1NnOohGItitNxLKYHA=="
}, },
"_index-0eef19ec.BdWpJoEP.js": { "_index-c1cc4c86.RjqwfILA.js": {
"file": "index-0eef19ec.BdWpJoEP.js", "file": "index-c1cc4c86.RjqwfILA.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",
"name": "index-c1cc4c86", "name": "index-c1cc4c86",
"imports": [ "imports": [
"_belt_Option-91f3b350.y_XblYXp.js", "_utils.DS2YS0tX.js"
"_utils.DNv5smZT.js"
], ],
"integrity": "sha512-AR5N1q+q6bqLw0ABJvuY/Q5pPJv/Kt8VRNzU64eiAGoqVQLLNUFaXYytAFZAi/O3qGbveSm6vhV9TbIG08lCwg==" "integrity": "sha512-H92M5EOab0KcEZ7HG5eU3A04CJhqcemVErVxHIP9cFW4hFUMiL3qB+lv4cQQ7AszeOfbMINXqggZvaG8wfIZfA=="
}, },
"_index.CuMLbxmh.js": { "_index.CuMLbxmh.js": {
"file": "index.CuMLbxmh.js", "file": "index.CuMLbxmh.js",
"name": "index", "name": "index",
"integrity": "sha512-u/eN65V2Mf+6bp8PJqdo4/z5+Ht+17xIrQG7BPsZWCM8BNgBh9Sllb+qTa1gAqj+f8zUsADoUA93twZvBTU6nQ==" "integrity": "sha512-u/eN65V2Mf+6bp8PJqdo4/z5+Ht+17xIrQG7BPsZWCM8BNgBh9Sllb+qTa1gAqj+f8zUsADoUA93twZvBTU6nQ=="
}, },
"_messages.B4HRoo_h.js": { "_messages.Qx8X6YMT.js": {
"file": "messages.B4HRoo_h.js", "file": "messages.Qx8X6YMT.js",
"name": "messages", "name": "messages",
"imports": [ "imports": [
"_validation.CuPxXgCV.js", "_validation.p-hUfG_o.js",
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js" "_exports.1ijyAKMZ.js"
], ],
"integrity": "sha512-6Z51Hgtxxrk+R2ym+m5pryKII+Okf0KF1lfw1fnfI5JQpMOtYNXcfN3u0I2+yKrTn9PQu6G8XPLwiXdlG0BFdQ==" "integrity": "sha512-PGSWoFfZPADzB4i4pFN468IMt8tYXQrFXOL8sPN5QSBLEu7F4jEFJZ1Ym5iSpomPaXLLIIg2HmXT50yBq8SiHA=="
}, },
"_nombres.n4VPN7qr.js": { "_nombres.n4VPN7qr.js": {
"file": "nombres.n4VPN7qr.js", "file": "nombres.n4VPN7qr.js",
@ -71,33 +45,30 @@
], ],
"integrity": "sha512-tplE1x3QotJwjR/88Gked0Naxkl+PwUtPNjSDoWwIyl/3Y5jyCSbcBSAvcPNG5K0CyJRnozj5aUiVXazKm50XA==" "integrity": "sha512-tplE1x3QotJwjR/88Gked0Naxkl+PwUtPNjSDoWwIyl/3Y5jyCSbcBSAvcPNG5K0CyJRnozj5aUiVXazKm50XA=="
}, },
"_reseau.BY8-4gXm.js": { "_reseau.C8CWV2JS.js": {
"file": "reseau.BY8-4gXm.js", "file": "reseau.C8CWV2JS.js",
"name": "reseau", "name": "reseau",
"imports": [ "imports": [
"_index.CuMLbxmh.js", "_utils.DS2YS0tX.js",
"_validation.CuPxXgCV.js", "_api.DpNqIphF.js"
"_api.DpNqIphF.js",
"_utils.DNv5smZT.js",
"_exports.1ijyAKMZ.js"
], ],
"integrity": "sha512-CovkZ+/wMng2pkuwwix7gEHlZWoGStc/77MrDGhRTZdUtfrdwTkeisXNdtvrb0gM5HnjAlFm8JLlfhI4ov3fog==" "integrity": "sha512-HUpopU/Kk2R5l1fNpuKaUBAXYyG1/ofIRXmEfXHTElg7E8vbyWAde8b1ZLR4t6iKwl3mhraHzRlPbcjkS3RQEw=="
}, },
"_utils.DNv5smZT.js": { "_utils.DS2YS0tX.js": {
"file": "utils.DNv5smZT.js", "file": "utils.DS2YS0tX.js",
"name": "utils", "name": "utils",
"imports": [ "imports": [
"_exports.1ijyAKMZ.js" "_exports.1ijyAKMZ.js"
], ],
"integrity": "sha512-sfRBh+WliazJoVRpuqpOcgYR5UMBsUKexeLsOR88eVsmWFpagj9iMCAerlFRz171Id2ikIVK/Y9kUjHmEFCuVw==" "integrity": "sha512-MpJC/uObUIE48VQyU7cfHHe1oTqniZuIThTp/gXSNBQuWjwwIe5FbCJBeR0+6Ab/oL9nHgMP9lkSb//iVjPPew=="
}, },
"_validation.CuPxXgCV.js": { "_validation.p-hUfG_o.js": {
"file": "validation.CuPxXgCV.js", "file": "validation.p-hUfG_o.js",
"name": "validation", "name": "validation",
"imports": [ "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": { "web/app/themes/haiku-atelier-2024/src/scripts/gaffe.ts": {
"file": "gaffe.js", "file": "gaffe.js",
@ -108,7 +79,7 @@
"_api.DpNqIphF.js", "_api.DpNqIphF.js",
"_exports.1ijyAKMZ.js" "_exports.1ijyAKMZ.js"
], ],
"integrity": "sha512-Ytv7YxquAHWEukHDAUnuQvhyeqoxasaesRX6YRDBi0LTmbmPd3PxbcaLAIQ9J0FsFnywyRr8dyfO9abtB7fX3g==" "integrity": "sha512-4MYUCOMO0X3HFwN7ubugRTcF0GkMRxsLS0ziTYQewm523z3vWPPAXs9hhGJHjt2jhZY8m1wyadKCJCvBHnVqCA=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": {
"file": "scripts-bouton-panier.js", "file": "scripts-bouton-panier.js",
@ -116,12 +87,12 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_messages.B4HRoo_h.js", "_messages.Qx8X6YMT.js",
"_exports.1ijyAKMZ.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": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-retour-sommet.ts": {
"file": "scripts-bouton-retour-sommet.js", "file": "scripts-bouton-retour-sommet.js",
@ -129,12 +100,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-retour-sommet.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-retour-sommet.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js", "_index-c1cc4c86.RjqwfILA.js"
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-wHWc6eAG1Mx+7lvIcks07qKx1Do70/prEa62AGOad5JO2zCP33O7PhiPzcq79zceO9el+fDEz5LiMpsDqvAgww==" "integrity": "sha512-eSgUhUMFGH3+lb8VHA7SMxEKH1hennA3ioZtwQRgam4A0PkArixOH6dWVnssBK5m0JS6SI5MSdYw7bbsKO3Iig=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-categories.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-categories.ts": {
"file": "scripts-menu-categories.js", "file": "scripts-menu-categories.js",
@ -143,10 +113,10 @@
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_index.CuMLbxmh.js", "_index.CuMLbxmh.js",
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.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": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts": {
"file": "scripts-menu-mobile.js", "file": "scripts-menu-mobile.js",
@ -154,12 +124,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js", "_index-c1cc4c86.RjqwfILA.js"
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-VnI22OX11MgovPxoms9yzXyOe4ua58dYH+uLXKI2U9TE0gR2fiwUwxlaR5RaU3IdqEo5//89fZSLVxnMke9rDw==" "integrity": "sha512-I+HieuVa3p0OLDdzNJhRu12fNnKtH0JVInJT+zheNGEFRl03ckB0O261xXeF4hzoGFMRq0r3kMwQ0BiJcaMBvg=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": {
"file": "scripts-page-a-propos.js", "file": "scripts-page-a-propos.js",
@ -167,12 +136,11 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js", "_index-c1cc4c86.RjqwfILA.js"
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-eAiZkJwn+Tf5URID69tQVpymDTFHIIiI656wWpbJ+ddfR1mpxVblxIwBQTqScop2bnJlc76rttZpStjKOADbRw==" "integrity": "sha512-wkbRCz77c1NXq/bAIzaGkNsSfKqN+gQxpA8t/VEQCfmQNHJsScjdodSuOefw9WhQQwQpE5CY6QauG7MDOLtRug=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts": {
"file": "scripts-page-accueil.js", "file": "scripts-page-accueil.js",
@ -180,13 +148,12 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_nombres.n4VPN7qr.js", "_nombres.n4VPN7qr.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js", "_index-c1cc4c86.RjqwfILA.js"
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-9JpaEKsYNltIO6Fwf84bqS4QdE25tRczV09TcKnGB3Kw9O80ATwElB51dNTxwP6XwJB0OZoQrMRDziHh4zh0yw==" "integrity": "sha512-GF+2quJeXyU5difx44vjv4/eLm7EGD6RS1jTzj68+HzLf0i3kHcFMxCwYLM5I7Eu0FvDq/DNRTHdH86aRKJQww=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts": {
"file": "scripts-page-boutique.js", "file": "scripts-page-boutique.js",
@ -195,16 +162,13 @@
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_index.CuMLbxmh.js", "_index.CuMLbxmh.js",
"_validation.CuPxXgCV.js", "_validation.p-hUfG_o.js",
"_api.DpNqIphF.js", "_api.DpNqIphF.js",
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_animations.Qm6pdIPC.js", "_reseau.C8CWV2JS.js",
"_reseau.BY8-4gXm.js", "_exports.1ijyAKMZ.js"
"_exports.1ijyAKMZ.js",
"_index-0eef19ec.BdWpJoEP.js",
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-3kF55bNdRSwZDTQHBm7jb6EO4RNQSPV/JHAvyGTyZSNtuPvnXk414E8ECpLeOLzH+afwpkTtgI68pWjoKYCagw==" "integrity": "sha512-hkKU+xO2o23KphBXVN7Im7knCzLn4VpgazebmRRJSclm4x1ZX4Q4NwK2K5JpHjzIEyMbAg4UiR8tLkH8EU3kew=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
"file": "scripts-page-panier.js", "file": "scripts-page-panier.js",
@ -212,20 +176,18 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts", "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_messages.B4HRoo_h.js", "_messages.Qx8X6YMT.js",
"_nombres.n4VPN7qr.js", "_nombres.n4VPN7qr.js",
"_index.CuMLbxmh.js", "_index.CuMLbxmh.js",
"_validation.CuPxXgCV.js", "_validation.p-hUfG_o.js",
"_api.DpNqIphF.js", "_api.DpNqIphF.js",
"_animations.Qm6pdIPC.js", "_reseau.C8CWV2JS.js",
"_reseau.BY8-4gXm.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-c1cc4c86.BsIfgdq2.js", "_index-c1cc4c86.RjqwfILA.js",
"_gardes.CgXTclcl.js", "_gardes.CUgVnuaB.js"
"_belt_Option-91f3b350.y_XblYXp.js"
], ],
"integrity": "sha512-7oZPpY06yidFju+WmSgSNKZeUUgoowheMZkiDF0AMIw6EnJF2uQIR2yWsPhgEPE5QHwqcPDMpfB00N4KIYh4hA==" "integrity": "sha512-xWRO6G9WQM4CwzVGBh9FYmHX+fslOq25ELZZZtSgm3Q6wEfCk4uages0uJ2enzKi47OadCASXPx9jNOdWn/fMA=="
}, },
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": { "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
"file": "scripts-page-produit.js", "file": "scripts-page-produit.js",
@ -234,16 +196,15 @@
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_index.CuMLbxmh.js", "_index.CuMLbxmh.js",
"_validation.p-hUfG_o.js",
"_api.DpNqIphF.js", "_api.DpNqIphF.js",
"_utils.DNv5smZT.js", "_utils.DS2YS0tX.js",
"_gardes.CgXTclcl.js", "_reseau.C8CWV2JS.js",
"_messages.B4HRoo_h.js", "_gardes.CUgVnuaB.js",
"_reseau.BY8-4gXm.js", "_messages.Qx8X6YMT.js",
"_validation.CuPxXgCV.js",
"_exports.1ijyAKMZ.js", "_exports.1ijyAKMZ.js",
"_index-0eef19ec.BdWpJoEP.js", "_index-c1cc4c86.RjqwfILA.js"
"_belt_Option-91f3b350.y_XblYXp.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 //# 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 //# 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 //# 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 //# 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 //# 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 //# 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 { &.bouton-retour-haut {
position: fixed; position: fixed;
right: var(--espace-xl); 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); transform: rotate(180deg);
padding: var(--espace-m); padding: var(--espace-m);
visibility: hidden; 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_MENU_MOBILE_ACTIVE = "data-menu-mobile-active";
export const ATTRIBUT_PAGE = "data-page"; export const ATTRIBUT_PAGE = "data-page";
export const ATTRIBUT_PRIX = "data-prix"; export const ATTRIBUT_PRIX = "data-prix";
export const ATTRIBUT_TABINDEX = "tabindex";
// En-tête // En-tête
export const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile"; export const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile";

View file

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

View file

@ -97,10 +97,7 @@ export const leveNonExistingKeyError = (message: string): never => {
* @param erreur * @param erreur
* @returns L'ID Sentry de l'évènement capturé. * @returns L'ID Sentry de l'évènement capturé.
*/ */
export const reporteErreur = <E extends Error>(erreur: E): string => { export const reporteErreur = <E extends Error>(erreur: E): string => captureException(erreur);
console.error(erreur);
return captureException(erreur);
};
/** /**
* Reporte une Erreur, sous forme d'erreur console et au service GlitchTip, puis la lève sous forme * 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"; } from "../constantes/messages-utilisateur";
import { lanceAnimationCycleLoading } from "../lib/animations"; import { lanceAnimationCycleLoading } from "../lib/animations";
import { eitherJsonParse, eitherSessionStorageGet } from "../lib/dom"; 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 { ErreurAdresseInvalide } from "../lib/erreurs/adresses";
import { emetUniqueMessageCanal } from "../lib/messages"; import { emetUniqueMessageCanal } from "../lib/messages";
import { diviseParCent, formateEnEuros } from "../lib/nombres"; import { diviseParCent, formateEnEuros } from "../lib/nombres";
@ -194,10 +194,12 @@ export const initialiseBoutonCalculLivraison = (): void => {
(erreur: BadRequestError | ErreurAdresseInvalide | FetchErrors | ServerError | ValiError<AnySchema>) => { (erreur: BadRequestError | ErreurAdresseInvalide | FetchErrors | ServerError | ValiError<AnySchema>) => {
match(erreur) match(erreur)
.with(P.instanceOf(ValiError), e => { .with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error(e.issues); console.error(e.issues);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
}) })
.with(P.instanceOf(ErreurAdresseInvalide), e => { .with(P.instanceOf(ErreurAdresseInvalide), e => {
reporteErreur(e);
console.error(e, e.problemes); console.error(e, e.problemes);
match(e.problemes) match(e.problemes)
.when(p => pipe(dictValues(p), arrayFind(c => c === "The provided postcode is not valid")), () => { .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 => { .with(P.instanceOf(ServerError), P.instanceOf(BadRequestError), e => {
reporteErreur(e);
console.error(e); console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;
}) })
.with(P.instanceOf(DOMException), P.instanceOf(TypeError), P.instanceOf(Error), e => { .with(P.instanceOf(DOMException), P.instanceOf(TypeError), P.instanceOf(Error), e => {
reporteErreur(e);
console.error(e); console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU; E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_RESEAU;
}) })
@ -261,8 +265,14 @@ export const initialiseBoutonCreationCommande = (): void => {
// Traite de manière différenciée les Erreurs // Traite de manière différenciée les Erreurs
.ifLeft((erreur: NonExistingKeyError | SyntaxError | ValiError<AnySchema>) => { .ifLeft((erreur: NonExistingKeyError | SyntaxError | ValiError<AnySchema>) => {
match(erreur) match(erreur)
.with(P.instanceOf(ValiError), e => console.error(e.issues)) .with(P.instanceOf(ValiError), e => {
.with(P.instanceOf(SyntaxError), P.instanceOf(NonExistingKeyError), e => console.error(e)) reporteErreur(e);
console.error(e.issues);
})
.with(P.instanceOf(SyntaxError), P.instanceOf(NonExistingKeyError), e => {
reporteErreur(e);
console.error(e);
})
.exhaustive(); .exhaustive();
// Nettoie un stockage de session erronné // Nettoie un stockage de session erronné
@ -381,6 +391,7 @@ export const initialiseBoutonCreationCommande = (): void => {
.ifLeft((erreur: BadRequestError | DOMException | ServerError | TypeError | ValiError<AnySchema>) => { .ifLeft((erreur: BadRequestError | DOMException | ServerError | TypeError | ValiError<AnySchema>) => {
match(erreur) match(erreur)
.with(P.instanceOf(ValiError), e => { .with(P.instanceOf(ValiError), e => {
reporteErreur(e);
console.error("ValiError", e.issues); console.error("ValiError", e.issues);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_CREATION_COMMANDE; E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_CREATION_COMMANDE;
}) })
@ -390,11 +401,15 @@ export const initialiseBoutonCreationCommande = (): void => {
P.instanceOf(ServerError), P.instanceOf(ServerError),
P.instanceOf(TypeError), P.instanceOf(TypeError),
e => { e => {
reporteErreur(e);
console.error(e); console.error(e);
E.MESSAGE_ADRESSES.textContent = ERREUR_GENERIQUE_CREATION_COMMANDE; 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 // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable
E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT); E.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT);

View file

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

View file

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

View file

@ -4,7 +4,12 @@ import { pipe } from "@mobily/ts-belt";
import { head as arrayHead } from "@mobily/ts-belt/Array"; import { head as arrayHead } from "@mobily/ts-belt/Array";
import { tap as optionTap } from "@mobily/ts-belt/Option"; 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"; import { recupereEleOuLeve } from "./lib/utils";
/** /**
@ -17,61 +22,91 @@ import { recupereEleOuLeve } from "./lib/utils";
*/ */
const E = { const E = {
BOUTON_MENU_MOBILE: recupereEleOuLeve<HTMLButtonElement>(SELECTEUR_BOUTON_MENU_MOBILE),
BOUTON_RETOUR_SOMMET: recupereEleOuLeve<HTMLButtonElement>("#bouton-retour-haut"), BOUTON_RETOUR_SOMMET: recupereEleOuLeve<HTMLButtonElement>("#bouton-retour-haut"),
CORPS_HTML: recupereEleOuLeve<HTMLBodyElement>("body"), CORPS_HTML: recupereEleOuLeve<HTMLBodyElement>("body"),
IMAGE_BOUTON: recupereEleOuLeve<HTMLImageElement>("#bouton-retour-haut img"), 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; let ratioActuel = E.CORPS_HTML.getBoundingClientRect().height / window.innerHeight;
/** La position actuelle du défilement vertical dans la page. */
let defilementY = window.scrollY; let defilementY = window.scrollY;
/** Indique qu'une étape de rafraîchissement via `requestAnimationFrame` a déjà été demandée. */
let etapePlanifiee = false; let etapePlanifiee = false;
/**
* Retourne la position du défilement vertical dans la page.
*
* @returns Un nombre en pixels.
*/
const majDefilementY = (): number => window.scrollY; const majDefilementY = (): number => window.scrollY;
/**
* @param estVisible
*/
const majVisibiliteBouton = (estVisible: boolean): void => { const majVisibiliteBouton = (estVisible: boolean): void => {
if (estVisible) { if (estVisible) {
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_ACTIF, ""); E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_ACTIF, "");
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_TABINDEX, "99");
E.IMAGE_BOUTON.removeAttribute(ATTRIBUT_ARIA_HIDDEN); E.IMAGE_BOUTON.removeAttribute(ATTRIBUT_ARIA_HIDDEN);
} else { } else {
E.BOUTON_RETOUR_SOMMET.removeAttribute(ATTRIBUT_ACTIF); E.BOUTON_RETOUR_SOMMET.removeAttribute(ATTRIBUT_ACTIF);
E.BOUTON_RETOUR_SOMMET.setAttribute(ATTRIBUT_TABINDEX, "-2");
E.IMAGE_BOUTON.setAttribute(ATTRIBUT_ARIA_HIDDEN, ""); E.IMAGE_BOUTON.setAttribute(ATTRIBUT_ARIA_HIDDEN, "");
} }
etapePlanifiee = false; 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 => { 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( pipe(
arrayHead(entrees), arrayHead(entrees),
optionTap(_ => { optionTap((_): void => {
ratioActuel = E.CORPS_HTML.getBoundingClientRect().height / window.innerHeight; ratioActuel = E.CORPS_HTML.getBoundingClientRect().height / window.innerHeight;
defilementY = majDefilementY(); defilementY = majDefilementY();
}), }),
); );
}).observe(E.CORPS_HTML); }).observe(E.CORPS_HTML);
window.addEventListener("scroll", () => { // Déclenche la première mise à jour
// Met à jour la valeur du défilement majVisibiliteBouton(defilementY > window.innerHeight * RATIO_MINIMUM_PAGE_PAR_FENETRE);
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))
);
});
}; };
/**
* 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 => { const initialiseBoutonRetourSommet = (): void => {
E.BOUTON_RETOUR_SOMMET.addEventListener("click", (evenement: Event) => { E.BOUTON_RETOUR_SOMMET.addEventListener("click", (evenement: Event): void => {
evenement.preventDefault(); evenement.preventDefault();
window.scrollTo({ behavior: "smooth", top: 0 }); window.scrollTo({ behavior: "smooth", top: 0 });
E.BOUTON_MENU_MOBILE.focus({ preventScroll: true });
}); });
}; };

View file

@ -40,7 +40,6 @@ const initialiseScrollStorytelling = (): void => {
* TODO * TODO
*/ */
const majDimensions = (): void => { const majDimensions = (): void => {
console.time();
hauteurImage = pipe( hauteurImage = pipe(
A.getBy(E.IMAGES_STORYTELLING, (i: HTMLDivElement) => !i.hasAttribute(ATTRIBUT_CACHE)), A.getBy(E.IMAGES_STORYTELLING, (i: HTMLDivElement) => !i.hasAttribute(ATTRIBUT_CACHE)),
O.map((i: HTMLDivElement) => i.getBoundingClientRect().height), 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.minHeight = `${String(hauteurImage * E.IMAGES_STORYTELLING.length + 61)}px`;
E.CONTENEUR_STORYTELLING.style.maxHeight = `${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"; } from "./constantes/dom.ts";
import { lanceAnimationCycleLoading } from "./lib/animations.ts"; import { lanceAnimationCycleLoading } from "./lib/animations.ts";
import { html } from "./lib/dom.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 { creeReponseSimplifiee, getBackendAvecParametresUrl } from "./lib/reseau.ts";
import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts"; import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts";
import { recupereEleOuLeve } from "./lib/utils.ts"; import { recupereEleOuLeve } from "./lib/utils.ts";
@ -145,8 +145,14 @@ const initialisePageBoutique = (): void => {
// 7. Traite les Erreurs et affiche un Message à l'Utilisateur // 7. Traite les Erreurs et affiche un Message à l'Utilisateur
.ifLeft((erreur: APIProductsErrors) => { .ifLeft((erreur: APIProductsErrors) => {
match(erreur) match(erreur)
.with(P.instanceOf(ValiError), e => console.error("ValiError", e.issues)) .with(P.instanceOf(ValiError), e => {
.otherwise(e => console.error("Erreur", 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?"; E.BOUTON_PLUS_DE_PRODUITS.textContent = "Error, try again?";
}) })

View file

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