Compare commits

...

2 commits

Author SHA1 Message Date
e75258efe0 2026-05-05 2026-05-05 19:56:26 +02:00
6102b77ac7 2026-05-04 2026-05-04 18:02:54 +02:00
67 changed files with 40871 additions and 2667 deletions

1
.gitignore vendored
View file

@ -7,6 +7,7 @@ web/app/upgrade
web/app/cache/*
web/app/languages/
web/app/object-cache.php
web/app/themes/haiku-atelier-2024/assets/css/**/*
web/app/themes/haiku-atelier-2024/assets/js/*
# WordPress

View file

@ -16,6 +16,14 @@
"!vtsls",
"..."
],
"languages": {
"PHP": {
"language_servers": [
"phpactor",
"phpantom_lsp"
]
}
},
"lsp": {
"css-variables": {
"settings": {

View file

@ -5,7 +5,12 @@ settings:
excludeLinksFromLockfile: false
time:
globals@17.6.0: 2026-05-01T16:37:48.055Z
'@typescript/native-preview-darwin-arm64@7.0.0-dev.20260504.1': 2026-05-04T08:07:16.408Z
'@typescript/native-preview-linux-arm64@7.0.0-dev.20260504.1': 2026-05-04T08:07:08.493Z
'@typescript/native-preview-linux-x64@7.0.0-dev.20260504.1': 2026-05-04T08:07:00.673Z
'@typescript/native-preview-win32-arm64@7.0.0-dev.20260504.1': 2026-05-04T08:06:56.870Z
'@typescript/native-preview-win32-x64@7.0.0-dev.20260504.1': 2026-05-04T08:06:52.760Z
'@typescript/native-preview@7.0.0-dev.20260504.1': 2026-05-04T08:07:19.165Z
importers:
@ -21,8 +26,8 @@ importers:
specifier: ^8.1.5
version: 8.1.5
effect:
specifier: ^4.0.0-beta.59
version: 4.0.0-beta.59
specifier: ^4.0.0-beta.60
version: 4.0.0-beta.60
html-template-tag:
specifier: ^5.0.0
version: 5.0.0
@ -34,13 +39,13 @@ importers:
version: 4.0.4
postcss:
specifier: ^8.4.21
version: 8.5.12
version: 8.5.13
purify-ts:
specifier: 2.1.2
version: 2.1.2
stylelint-order:
specifier: '>=6'
version: 8.1.1(stylelint@17.9.1)
version: 8.1.1(stylelint@17.10.0)
terser:
specifier: ^5.16.0
version: 5.46.2
@ -61,13 +66,13 @@ importers:
specifier: ^0.5.2
version: 0.5.2
'@gcch/configuration-eslint':
specifier: git+https://git.gcch.fr/gcch/configuration-eslint#888eb4aa54
specifier: git+https://git.gcch.fr/gcch/configuration-eslint
version: https://git.gcch.fr/gcch/configuration-eslint#888eb4aa54e5bfd6251566d7469ee99204c19f45
'@gcch/configuration-oxlint':
specifier: git+https://git.gcch.fr/gcch/configuration-oxlint#83547fc1ebfd
specifier: git+https://git.gcch.fr/gcch/configuration-oxlint
version: https://git.gcch.fr/gcch/configuration-oxlint#83547fc1ebfd6cb402e3c7f074b3e267632ebf4a
'@gcch/configuration-prettier':
specifier: git+https://git.gcch.fr/gcch/configuration-prettier#d267d6dc5e
specifier: git+https://git.gcch.fr/gcch/configuration-prettier
version: https://git.gcch.fr/gcch/configuration-prettier#d267d6dc5ee8f14378180d71f651009bf7aa3acc
'@playwright/test':
specifier: ^1.59.1
@ -82,8 +87,8 @@ importers:
specifier: ^25.6.0
version: 25.6.0
'@typescript/native-preview':
specifier: 7.0.0-dev.20260503.1
version: 7.0.0-dev.20260503.1
specifier: 7.0.0-dev.20260504.1
version: 7.0.0-dev.20260504.1
'@vitejs/plugin-legacy':
specifier: ^8.0.1
version: 8.0.1(terser@5.46.2)(vite@8.0.10(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.99.0)(terser@5.46.2)(yaml@2.8.3))
@ -115,8 +120,8 @@ importers:
specifier: ^6.5.0
version: 6.5.0(picomatch@4.0.4)
globals:
specifier: ^17.6
version: 17.6.0
specifier: '17'
version: 17.5.0
jiti:
specifier: ^2.6.1
version: 2.6.1
@ -163,23 +168,23 @@ importers:
specifier: ^1.99.0
version: 1.99.0
stylelint:
specifier: ^17.9.1
version: 17.9.1
specifier: ^17.10.0
version: 17.10.0
stylelint-config-clean-order:
specifier: ^8.0.1
version: 8.0.1(stylelint@17.9.1)(stylelint-order@8.1.1(stylelint@17.9.1))
version: 8.0.1(stylelint@17.10.0)(stylelint-order@8.1.1(stylelint@17.10.0))
stylelint-config-sass-guidelines:
specifier: ^13.0.0
version: 13.0.0(postcss@8.5.12)(stylelint@17.9.1)
version: 13.0.0(postcss@8.5.13)(stylelint@17.10.0)
stylelint-config-standard-scss:
specifier: ^17.0.0
version: 17.0.0(postcss@8.5.12)(stylelint@17.9.1)
version: 17.0.0(postcss@8.5.13)(stylelint@17.10.0)
stylelint-declaration-block-no-ignored-properties:
specifier: ^3.0.0
version: 3.0.0(stylelint@17.9.1)
version: 3.0.0(stylelint@17.10.0)
stylelint-plugin-logical-css:
specifier: ^2.1.0
version: 2.1.0(stylelint@17.9.1)
version: 2.1.0(stylelint@17.10.0)
typescript:
specifier: ^6.0.3
version: 6.0.3
@ -1207,16 +1212,48 @@ packages:
typescript: '>=4.5.2'
aliasOf: '@better-typescript-lib/webworker'
'@typescript/native-preview-linux-x64@7.0.0-dev.20260503.1':
resolution: {integrity: sha512-M64z7LwpqNfOXYCBKmD/ObwyxYOobUk4tDv0ECNLit7pDER1sswNZjJGjgRYjQsKokmydy6p3FqtJ1uUPUP/sw==}
'@typescript/native-preview-darwin-arm64@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-+Qs1Q7Qxfp11n/hU3pweFU+EQ37FnDsdWOOxb7/vCy8QGBysrLUUYRhQ+GSW3s663oMtN6+9Kf82hk3ZT+kXlg==}
engines: {node: '>=16.20.0'}
os:
- darwin
cpu:
- arm64
'@typescript/native-preview-linux-arm64@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-y1Qai5l55Sl+/3B0hyQtvynq//C22BKFH3CfU35fbLYUo4P/ISUycyAbcA+PAPazpDFO3E56I96QUQrbJL2VVA==}
engines: {node: '>=16.20.0'}
os:
- linux
cpu:
- arm64
'@typescript/native-preview-linux-x64@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-ngN3Ie3Vin6pFtqeNywxm86RTxgI0Fo0GZyJ1PxokLES8J3xfMPtMYfv85c/+5uz5+7T+m4LRLyY5IoLY4gtuw==}
engines: {node: '>=16.20.0'}
os:
- linux
cpu:
- x64
'@typescript/native-preview@7.0.0-dev.20260503.1':
resolution: {integrity: sha512-gDro38CPFiBUGbaFGNt+ufOsEd1OrZrfrOPxsLSfBcvvoGaqAxV++ul/BHTOShoEkIYHiFsoDX2az1IPCDV2jQ==}
'@typescript/native-preview-win32-arm64@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-/GZDJN/CsLbqIe7EdWDkXhNX9C41VjemBeUN6+9ckvEFLH8XyKTmXPYikNOn0N819M1KSeNZltplyUslfROOdw==}
engines: {node: '>=16.20.0'}
os:
- win32
cpu:
- arm64
'@typescript/native-preview-win32-x64@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-EYQBdVZq4xIzhTtKxw6wvee9238hEb7XrPG413AEZBD3kcR3qqvPULXsPzQyEpneCReATSaihscP/LfhMQYUmA==}
engines: {node: '>=16.20.0'}
os:
- win32
cpu:
- x64
'@typescript/native-preview@7.0.0-dev.20260504.1':
resolution: {integrity: sha512-bHFGxyIU83qjj6ywn3817A+Ug2ZID0GiBA5WFdbc/T7EjcrKnUUylexq0fU81N/mTbfw3FyP6ZCEdO2Ntcl/VQ==}
engines: {node: '>=16.20.0'}
hasBin: true
@ -1551,8 +1588,8 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
effect@4.0.0-beta.59:
resolution: {integrity: sha512-xyUDLeHSe8d6lWGOvR6Fgn2HL6gYeTZ/S4Jzk9uc4ZUxMPPsNZlNXrvk0C7/utQFzeX7uAWcVnG2BjbA0SRoAA==}
effect@4.0.0-beta.60:
resolution: {integrity: sha512-OkrCKT+aBFIti4ryuxKfIozNx2SMxmFZ8uWB53gGzdjQzaJ7RVf0s6nJQ4JubJM//R24DtSYNOdmPRSK+qoRww==}
electron-to-chromium@1.5.344:
resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==}
@ -1875,10 +1912,6 @@ packages:
resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==}
engines: {node: '>=18'}
globals@17.6.0:
resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==}
engines: {node: '>=18'}
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
@ -2561,6 +2594,10 @@ packages:
resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.13:
resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@ -2933,8 +2970,8 @@ packages:
peerDependencies:
stylelint: ^16.8.2 || ^17.0.0
stylelint@17.9.1:
resolution: {integrity: sha512-THTmnAPJTrg/JhkTWZlSyrO+HUYMx6ELthIHeMyD2WOKqXIJUFQv2Yxn91bvUrZdbBJaW2dUuQdPST2wcQ6C3g==}
stylelint@17.10.0:
resolution: {integrity: sha512-cI7I6HHEYOHHVNVci+s92WlA3QfmNhjwFdgCgYV3TLEysilOjk+B3EFxMED1xY9GYB0Kre3OD+mSLj19VLTIvA==}
engines: {node: '>=20.19.0'}
hasBin: true
@ -3907,7 +3944,7 @@ snapshots:
eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0(jiti@2.6.1))
eslint-plugin-sonarjs: 4.0.3(eslint@10.3.0(jiti@2.6.1))
eslint-plugin-unicorn: 64.0.0(eslint@10.3.0(jiti@2.6.1))
globals: 17.6.0
globals: 17.5.0
typescript-eslint: 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)
'@gcch/configuration-oxlint@https://git.gcch.fr/gcch/configuration-oxlint#83547fc1ebfd6cb402e3c7f074b3e267632ebf4a':
@ -3916,7 +3953,7 @@ snapshots:
eslint-plugin-functional: 9.0.4(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)
eslint-plugin-jsx-a11y: 6.10.2(eslint@10.3.0(jiti@2.6.1))
eslint-plugin-perfectionist: 5.9.0(eslint@10.3.0(jiti@2.6.1))
globals: 17.6.0
globals: 17.5.0
oxlint: 1.62.0(oxlint-tsgolint@0.22.1)
oxlint-tsgolint: 0.22.1
@ -4060,7 +4097,7 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
'@stylistic/stylelint-plugin@5.1.0(stylelint@17.9.1)':
'@stylistic/stylelint-plugin@5.1.0(stylelint@17.10.0)':
dependencies:
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
'@csstools/css-tokenizer': 4.0.0
@ -4069,7 +4106,7 @@ snapshots:
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
style-search: 0.1.0
stylelint: 17.9.1
stylelint: 17.10.0
'@types/bun@1.3.13':
dependencies:
@ -4246,11 +4283,23 @@ snapshots:
dependencies:
typescript: 6.0.3
'@typescript/native-preview-linux-x64@7.0.0-dev.20260503.1': {}
'@typescript/native-preview-darwin-arm64@7.0.0-dev.20260504.1': {}
'@typescript/native-preview@7.0.0-dev.20260503.1':
'@typescript/native-preview-linux-arm64@7.0.0-dev.20260504.1': {}
'@typescript/native-preview-linux-x64@7.0.0-dev.20260504.1': {}
'@typescript/native-preview-win32-arm64@7.0.0-dev.20260504.1': {}
'@typescript/native-preview-win32-x64@7.0.0-dev.20260504.1': {}
'@typescript/native-preview@7.0.0-dev.20260504.1':
optionalDependencies:
'@typescript/native-preview-linux-x64': 7.0.0-dev.20260503.1
'@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260504.1
'@typescript/native-preview-linux-arm64': 7.0.0-dev.20260504.1
'@typescript/native-preview-linux-x64': 7.0.0-dev.20260504.1
'@typescript/native-preview-win32-arm64': 7.0.0-dev.20260504.1
'@typescript/native-preview-win32-x64': 7.0.0-dev.20260504.1
? '@vitejs/plugin-legacy@8.0.1(terser@5.46.2)(vite@8.0.10(@types/node@25.6.0)(jiti@2.6.1)(sass-embedded@1.99.0)(terser@5.46.2)(yaml@2.8.3))'
: dependencies:
@ -4612,7 +4661,7 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
effect@4.0.0-beta.59:
effect@4.0.0-beta.60:
dependencies:
'@standard-schema/spec': 1.1.0
fast-check: 4.7.0
@ -5069,8 +5118,6 @@ snapshots:
globals@17.5.0: {}
globals@17.6.0: {}
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
@ -5741,13 +5788,13 @@ snapshots:
postcss-resolve-nested-selector@0.1.6: {}
postcss-safe-parser@7.0.1(postcss@8.5.12):
postcss-safe-parser@7.0.1(postcss@8.5.13):
dependencies:
postcss: 8.5.12
postcss: 8.5.13
postcss-scss@4.0.9(postcss@8.5.12):
postcss-scss@4.0.9(postcss@8.5.13):
dependencies:
postcss: 8.5.12
postcss: 8.5.13
postcss-selector-parser@7.1.1:
dependencies:
@ -5766,6 +5813,12 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
postcss@8.5.13:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
prettier-plugin-curly@0.4.1(prettier@3.8.3):
@ -6095,58 +6148,58 @@ snapshots:
style-search@0.1.0: {}
stylelint-config-clean-order@8.0.1(stylelint@17.9.1)(stylelint-order@8.1.1(stylelint@17.9.1)):
stylelint-config-clean-order@8.0.1(stylelint@17.10.0)(stylelint-order@8.1.1(stylelint@17.10.0)):
dependencies:
stylelint: 17.9.1
stylelint-order: 8.1.1(stylelint@17.9.1)
stylelint: 17.10.0
stylelint-order: 8.1.1(stylelint@17.10.0)
stylelint-config-recommended-scss@17.0.1(postcss@8.5.12)(stylelint@17.9.1):
stylelint-config-recommended-scss@17.0.1(postcss@8.5.13)(stylelint@17.10.0):
dependencies:
postcss: 8.5.12
postcss-scss: 4.0.9(postcss@8.5.12)
stylelint: 17.9.1
stylelint-config-recommended: 18.0.0(stylelint@17.9.1)
stylelint-scss: 7.0.0(stylelint@17.9.1)
postcss: 8.5.13
postcss-scss: 4.0.9(postcss@8.5.13)
stylelint: 17.10.0
stylelint-config-recommended: 18.0.0(stylelint@17.10.0)
stylelint-scss: 7.0.0(stylelint@17.10.0)
stylelint-config-recommended@18.0.0(stylelint@17.9.1):
stylelint-config-recommended@18.0.0(stylelint@17.10.0):
dependencies:
stylelint: 17.9.1
stylelint: 17.10.0
stylelint-config-sass-guidelines@13.0.0(postcss@8.5.12)(stylelint@17.9.1):
stylelint-config-sass-guidelines@13.0.0(postcss@8.5.13)(stylelint@17.10.0):
dependencies:
'@stylistic/stylelint-plugin': 5.1.0(stylelint@17.9.1)
postcss: 8.5.12
postcss-scss: 4.0.9(postcss@8.5.12)
stylelint: 17.9.1
stylelint-scss: 7.0.0(stylelint@17.9.1)
'@stylistic/stylelint-plugin': 5.1.0(stylelint@17.10.0)
postcss: 8.5.13
postcss-scss: 4.0.9(postcss@8.5.13)
stylelint: 17.10.0
stylelint-scss: 7.0.0(stylelint@17.10.0)
stylelint-config-standard-scss@17.0.0(postcss@8.5.12)(stylelint@17.9.1):
stylelint-config-standard-scss@17.0.0(postcss@8.5.13)(stylelint@17.10.0):
dependencies:
postcss: 8.5.12
stylelint: 17.9.1
stylelint-config-recommended-scss: 17.0.1(postcss@8.5.12)(stylelint@17.9.1)
stylelint-config-standard: 40.0.0(stylelint@17.9.1)
postcss: 8.5.13
stylelint: 17.10.0
stylelint-config-recommended-scss: 17.0.1(postcss@8.5.13)(stylelint@17.10.0)
stylelint-config-standard: 40.0.0(stylelint@17.10.0)
stylelint-config-standard@40.0.0(stylelint@17.9.1):
stylelint-config-standard@40.0.0(stylelint@17.10.0):
dependencies:
stylelint: 17.9.1
stylelint-config-recommended: 18.0.0(stylelint@17.9.1)
stylelint: 17.10.0
stylelint-config-recommended: 18.0.0(stylelint@17.10.0)
stylelint-declaration-block-no-ignored-properties@3.0.0(stylelint@17.9.1):
stylelint-declaration-block-no-ignored-properties@3.0.0(stylelint@17.10.0):
dependencies:
stylelint: 17.9.1
stylelint: 17.10.0
stylelint-order@8.1.1(stylelint@17.9.1):
stylelint-order@8.1.1(stylelint@17.10.0):
dependencies:
postcss: 8.5.12
postcss-sorting: 10.0.0(postcss@8.5.12)
stylelint: 17.9.1
stylelint: 17.10.0
stylelint-plugin-logical-css@2.1.0(stylelint@17.9.1):
stylelint-plugin-logical-css@2.1.0(stylelint@17.10.0):
dependencies:
stylelint: 17.9.1
stylelint: 17.10.0
stylelint-scss@7.0.0(stylelint@17.9.1):
stylelint-scss@7.0.0(stylelint@17.10.0):
dependencies:
css-tree: 3.2.1
is-plain-object: 5.0.0
@ -6156,9 +6209,9 @@ snapshots:
postcss-resolve-nested-selector: 0.1.6
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
stylelint: 17.9.1
stylelint: 17.10.0
stylelint@17.9.1:
stylelint@17.10.0:
dependencies:
'@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
@ -6187,8 +6240,8 @@ snapshots:
micromatch: 4.0.8
normalize-path: 3.0.0
picocolors: 1.1.1
postcss: 8.5.12
postcss-safe-parser: 7.0.1(postcss@8.5.12)
postcss: 8.5.13
postcss-safe-parser: 7.0.1(postcss@8.5.13)
postcss-selector-parser: 7.1.1
postcss-value-parser: 4.2.0
string-width: 8.2.1
@ -6381,7 +6434,7 @@ snapshots:
jiti: 2.6.1
lightningcss: 1.32.0
picomatch: 4.0.4
postcss: 8.5.12
postcss: 8.5.13
rolldown: 1.0.0-rc.17
sass-embedded: 1.99.0
terser: 5.46.2

View file

@ -8,7 +8,6 @@ declare(strict_types=1);
use Roots\WPConfig\Config;
use function base64_encode;
use function Env\env;
Config::define('SAVEQUERIES', true);

View file

@ -8,7 +8,6 @@ declare(strict_types=1);
use Roots\WPConfig\Config;
use function base64_encode;
use function Env\env;
Config::define('WP_DEBUG', true);

View file

@ -8,7 +8,6 @@ declare(strict_types=1);
use Roots\WPConfig\Config;
use function base64_encode;
use function Env\env;
Config::define('DISALLOW_INDEXING', true);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

9
docs/QUERIES.md Normal file
View file

@ -0,0 +1,9 @@
# Requête
## Nettoyer les photos fantômes
Cette commande nettoie les photos « fantômes » : les attachements toujours présents dans la base de données alors que l'image a été supprimée. Des carrés gris remplacement alors les photos dans l'administration du Produit.
```shell
wp db --allow-root query "DELETE FROM haikuwp_postmeta WHERE meta_value NOT IN (SELECT ID FROM haikuwp_posts) AND meta_key LIKE '%photos_colonne%'"
```

269
mise.lock Normal file
View file

@ -0,0 +1,269 @@
# @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html
[[tools."aqua:blopker/codebook"]]
version = "0.3.39"
backend = "aqua:blopker/codebook"
[tools."aqua:blopker/codebook"."platforms.linux-arm64"]
checksum = "sha256:38302c6e719ce67083e9229c373943ebe45aa359a7a2cfb06e48221c33b59516"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-unknown-linux-musl.tar.gz"
[tools."aqua:blopker/codebook"."platforms.linux-arm64-musl"]
checksum = "sha256:38302c6e719ce67083e9229c373943ebe45aa359a7a2cfb06e48221c33b59516"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-unknown-linux-musl.tar.gz"
[tools."aqua:blopker/codebook"."platforms.linux-x64"]
checksum = "sha256:fdb419ed332aacba5757a3b34ec2a8cba3a94b50134ab34a8dc1af8106101dc5"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-unknown-linux-musl.tar.gz"
[tools."aqua:blopker/codebook"."platforms.linux-x64-musl"]
checksum = "sha256:fdb419ed332aacba5757a3b34ec2a8cba3a94b50134ab34a8dc1af8106101dc5"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-unknown-linux-musl.tar.gz"
[tools."aqua:blopker/codebook"."platforms.macos-arm64"]
checksum = "sha256:c3f8f36a4747542ece10c65cd8dd724aa0dbd31c08a1fd03fb53813eff87b8ce"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-aarch64-apple-darwin.tar.gz"
[tools."aqua:blopker/codebook"."platforms.macos-x64"]
checksum = "sha256:b3392e8eb080f3e6e083ada59bafcc6e50681d99b0cbd4f420ab4c7123d08baa"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-apple-darwin.tar.gz"
[tools."aqua:blopker/codebook"."platforms.windows-x64"]
checksum = "sha256:dc6c89bdd9e20c00de10d8eb68ffc0e581831eae5a62c9e4efd25905eba78413"
url = "https://github.com/blopker/codebook/releases/download/v0.3.39/codebook-lsp-x86_64-pc-windows-msvc.zip"
[[tools."aqua:numtide/treefmt"]]
version = "2.5.0"
backend = "aqua:numtide/treefmt"
[tools."aqua:numtide/treefmt"."platforms.linux-arm64"]
checksum = "sha256:fce47c6fc8cb6a87461b1309fc6d3102eade64b6fe0c9b86678b4eed9eb00e57"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_arm64.tar.gz"
[tools."aqua:numtide/treefmt"."platforms.linux-arm64-musl"]
checksum = "sha256:fce47c6fc8cb6a87461b1309fc6d3102eade64b6fe0c9b86678b4eed9eb00e57"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_arm64.tar.gz"
[tools."aqua:numtide/treefmt"."platforms.linux-x64"]
checksum = "sha256:95f707bf9666d08b50888b116768fd77f042ad5af92aa3b795f063160e72758f"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_amd64.tar.gz"
[tools."aqua:numtide/treefmt"."platforms.linux-x64-musl"]
checksum = "sha256:95f707bf9666d08b50888b116768fd77f042ad5af92aa3b795f063160e72758f"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_linux_amd64.tar.gz"
[tools."aqua:numtide/treefmt"."platforms.macos-arm64"]
checksum = "sha256:a3cdfa8e92eb7c302bb851f73800187e75d5789f2a75835b403b158d77b2c376"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_darwin_arm64.tar.gz"
[tools."aqua:numtide/treefmt"."platforms.macos-x64"]
checksum = "sha256:21388b1f7d6c2f572e1ce9231f7dfc08f80a062438908791ab078c1d76b10a49"
url = "https://github.com/numtide/treefmt/releases/download/v2.5.0/treefmt_2.5.0_darwin_amd64.tar.gz"
[[tools.aube]]
version = "1.8.0"
backend = "github:endevco/aube"
[tools.aube."platforms.linux-arm64"]
checksum = "sha256:622c470feba3270e2290d4f2ffb7fcde0e391dd34bd352d24e5b7fd36ddbbbb5"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-aarch64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411310208"
provenance = "github-attestations"
[tools.aube."platforms.linux-arm64-musl"]
checksum = "sha256:7b1b946986f71a625d48b6c602696d859e4f683bf35f29e2cc1096fedacce6a2"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-aarch64-unknown-linux-musl.tar.gz"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411310268"
provenance = "github-attestations"
[tools.aube."platforms.linux-x64"]
checksum = "sha256:298ff8f1a1820a68a369d03c3dfa46aca8ccbceb1a4facd97329b10a03322abb"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-x86_64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411329171"
provenance = "github-attestations"
[tools.aube."platforms.linux-x64-musl"]
checksum = "sha256:332379d6b167c83b7ab7d5a393e55f9dcea5185d3819ee5211739a6d81dba328"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-x86_64-unknown-linux-musl.tar.gz"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411310212"
provenance = "github-attestations"
[tools.aube."platforms.macos-arm64"]
checksum = "sha256:9f1aaf17fe031a8356a41388cec852aef3a82b741b25b14b40a2c403500d1201"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-aarch64-apple-darwin.tar.gz"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411311071"
provenance = "github-attestations"
[tools.aube."platforms.windows-x64"]
checksum = "sha256:9d49bec5dbd480980fa835ad6abdb5d02c561dabc1424b80e71e69411bbb7bef"
url = "https://github.com/endevco/aube/releases/download/v1.8.0/aube-v1.8.0-x86_64-pc-windows-msvc.zip"
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/411318019"
provenance = "github-attestations"
[[tools."github:AJenbo/phpantom_lsp"]]
version = "0.7.0"
backend = "github:AJenbo/phpantom_lsp"
[tools."github:AJenbo/phpantom_lsp"."platforms.linux-arm64"]
checksum = "sha256:8a307b76c3743089fe3830ffc83040a03c3ce41399774731f51d3e754a492cf1"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-aarch64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327569"
[tools."github:AJenbo/phpantom_lsp"."platforms.linux-arm64-musl"]
checksum = "sha256:8a307b76c3743089fe3830ffc83040a03c3ce41399774731f51d3e754a492cf1"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-aarch64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327569"
[tools."github:AJenbo/phpantom_lsp"."platforms.linux-x64"]
checksum = "sha256:a593da7e62adcef3ec63ca273f855ae269d55f2eed1f5d01ea0e3347f1597a5c"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-x86_64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327589"
[tools."github:AJenbo/phpantom_lsp"."platforms.linux-x64-musl"]
checksum = "sha256:a593da7e62adcef3ec63ca273f855ae269d55f2eed1f5d01ea0e3347f1597a5c"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-x86_64-unknown-linux-gnu.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327589"
[tools."github:AJenbo/phpantom_lsp"."platforms.macos-arm64"]
checksum = "sha256:f70e3ecf174df0776fd9f0f98447dc2d735018603b71e1620929dc92967b9aa0"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-aarch64-apple-darwin.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327560"
[tools."github:AJenbo/phpantom_lsp"."platforms.macos-x64"]
checksum = "sha256:c4c4da8db230c8f0bf0e489d149f1ace04062a169a61ca23b33674de0c69e3f6"
url = "https://github.com/AJenbo/phpantom_lsp/releases/download/0.7.0/phpantom_lsp-x86_64-apple-darwin.tar.gz"
url_api = "https://api.github.com/repos/AJenbo/phpantom_lsp/releases/assets/391327579"
[[tools.just]]
version = "1.50.0"
backend = "aqua:casey/just"
[tools.just."platforms.linux-arm64"]
checksum = "sha256:3beb4967ce05883cf09ac12d6d128166eb4c6d0b03eff74b61018a6880655d7d"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-unknown-linux-musl.tar.gz"
[tools.just."platforms.linux-arm64-musl"]
checksum = "sha256:3beb4967ce05883cf09ac12d6d128166eb4c6d0b03eff74b61018a6880655d7d"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-unknown-linux-musl.tar.gz"
[tools.just."platforms.linux-x64"]
checksum = "sha256:27e011cd6328fadd632e59233d2cf5f18460b8a8c4269acd324c1a8669f34db0"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-unknown-linux-musl.tar.gz"
[tools.just."platforms.linux-x64-musl"]
checksum = "sha256:27e011cd6328fadd632e59233d2cf5f18460b8a8c4269acd324c1a8669f34db0"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-unknown-linux-musl.tar.gz"
[tools.just."platforms.macos-arm64"]
checksum = "sha256:891262207663bff1aa422dbe799a76deae4064eaa445f14eb28aef7a388222cd"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-aarch64-apple-darwin.tar.gz"
[tools.just."platforms.macos-x64"]
checksum = "sha256:e4fa28fe63381ca32fad101e86d4a1da7cd2d34d1b080985a37ec9dc951922fe"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-apple-darwin.tar.gz"
[tools.just."platforms.windows-x64"]
checksum = "sha256:5dc713f049e174e22de41fd06292a26c9b90f2d37c1be9390d2082fe6928b376"
url = "https://github.com/casey/just/releases/download/1.50.0/just-1.50.0-x86_64-pc-windows-msvc.zip"
[[tools.mago]]
version = "1.25.2"
backend = "aqua:carthage-software/mago"
[tools.mago."platforms.linux-arm64"]
checksum = "sha256:48abe89725c8d39e2e9f3683720899f992812639e5bb174ba9ed4df27eb95c49"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.mago."platforms.linux-arm64-musl"]
checksum = "sha256:48abe89725c8d39e2e9f3683720899f992812639e5bb174ba9ed4df27eb95c49"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.mago."platforms.linux-x64"]
checksum = "sha256:b21aac6fe69467bfe87633614b0962eb3b699194f66d50b84fc35a8263ccbcf2"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-unknown-linux-musl.tar.gz"
[tools.mago."platforms.linux-x64-musl"]
checksum = "sha256:b21aac6fe69467bfe87633614b0962eb3b699194f66d50b84fc35a8263ccbcf2"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-unknown-linux-musl.tar.gz"
provenance = "github-attestations"
[tools.mago."platforms.macos-arm64"]
checksum = "sha256:d831c4c75a2d32f0df61a950229fb97e27e1d36b6cf83208f90102255be4d348"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-aarch64-apple-darwin.tar.gz"
provenance = "github-attestations"
[tools.mago."platforms.macos-x64"]
checksum = "sha256:30e7722047b7d977985cd85c931d5f2cfb0f2ab31590c81ed945b9a2fda54f6a"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-apple-darwin.tar.gz"
provenance = "github-attestations"
[tools.mago."platforms.windows-x64"]
checksum = "sha256:d755fd8ed31826def064231d5cc21ab330e0f44da3563ce49d0e3720ce31de34"
url = "https://github.com/carthage-software/mago/releases/download/1.25.2/mago-1.25.2-x86_64-pc-windows-msvc.zip"
provenance = "github-attestations"
[[tools.node]]
version = "25.9.0"
backend = "core:node"
[tools.node."platforms.linux-arm64"]
checksum = "sha256:8fb4283301b8c720fc9f18bffff0f659e72cc14d0cf207a3bb411808aaa73a57"
url = "https://nodejs.org/dist/v25.9.0/node-v25.9.0-linux-arm64.tar.gz"
[tools.node."platforms.linux-arm64-musl"]
checksum = "sha256:97f6fe125faa51f84a7bb600d0cd7aefcfaaa0e75a5f49a7c61c3df91d12d535"
url = "https://unofficial-builds.nodejs.org/download/release/v25.9.0/node-v25.9.0-linux-arm64-musl.tar.gz"
[tools.node."platforms.linux-x64"]
checksum = "sha256:134e55b2408448a219760fe04dc44d6851f9de8a79549021ffd870e9082d9e7b"
url = "https://nodejs.org/dist/v25.9.0/node-v25.9.0-linux-x64.tar.gz"
[tools.node."platforms.linux-x64-musl"]
checksum = "sha256:1ac44af012be6bc17f1e3723edbf12897c0baeae5d1dc75b9f97d71413e4c8f5"
url = "https://unofficial-builds.nodejs.org/download/release/v25.9.0/node-v25.9.0-linux-x64-musl.tar.gz"
[tools.node."platforms.macos-arm64"]
checksum = "sha256:e479f3c469d3d9303a44f00a8ea37a3788395d171bb8059c48a4bbbd2e371b59"
url = "https://nodejs.org/dist/v25.9.0/node-v25.9.0-darwin-arm64.tar.gz"
[tools.node."platforms.macos-x64"]
checksum = "sha256:7d737b53ce191142bfa1c17cfa5b070d96e84eebf76b8dd06d84981cbdc3f7e3"
url = "https://nodejs.org/dist/v25.9.0/node-v25.9.0-darwin-x64.tar.gz"
[tools.node."platforms.windows-x64"]
checksum = "sha256:929552b8305effac843ba7b4270c437aefb702fc3fbd73fcd1bffd35d4ac284e"
url = "https://nodejs.org/dist/v25.9.0/node-v25.9.0-win-x64.zip"
[[tools.watchexec]]
version = "2.5.1"
backend = "aqua:watchexec/watchexec"
[tools.watchexec."platforms.linux-arm64"]
checksum = "sha256:c073887583d502fa0b393a8b847bb4460a111b3b0a199d1f70dafd5d89e71a2f"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-unknown-linux-musl.tar.xz"
[tools.watchexec."platforms.linux-arm64-musl"]
checksum = "sha256:c073887583d502fa0b393a8b847bb4460a111b3b0a199d1f70dafd5d89e71a2f"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-unknown-linux-musl.tar.xz"
[tools.watchexec."platforms.linux-x64"]
checksum = "sha256:9efabd08de720c1ee7e57b487fe11904f0966828e76146e2b5ea5deee90626be"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-unknown-linux-musl.tar.xz"
[tools.watchexec."platforms.linux-x64-musl"]
checksum = "sha256:9efabd08de720c1ee7e57b487fe11904f0966828e76146e2b5ea5deee90626be"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-unknown-linux-musl.tar.xz"
[tools.watchexec."platforms.macos-arm64"]
checksum = "sha256:c5e405dd1109940b2510398d2182990c1be59063b94e11d7ace9c7b435cb1df1"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-aarch64-apple-darwin.tar.xz"
[tools.watchexec."platforms.macos-x64"]
checksum = "sha256:bb74bf33286ff7f31dd8e763e017fbc0418360d88baefd35bc57d662d28394e2"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-apple-darwin.tar.xz"
[tools.watchexec."platforms.windows-x64"]
checksum = "sha256:aa448c2704ca1a37ce0f1fc75381d9a411946dd293cf6236293f549426a577f7"
url = "https://github.com/watchexec/watchexec/releases/download/v2.5.1/watchexec-2.5.1-x86_64-pc-windows-msvc.zip"

View file

@ -1,2 +1,45 @@
[tools]
aube = "latest"
just = "latest"
mago = "latest"
node = "latest"
watchexec = "latest"
"aqua:numtide/treefmt" = "latest"
"github:AJenbo/phpantom_lsp" = "latest"
"aqua:blopker/codebook" = "latest"
[tasks.format]
alias = "f"
description = "Formate le code avec treefmt en utilisant la configuration globale"
run = "treefmt --config-file ~/.config/treefmt/treefmt.toml ."
tools."aqua:numtide/treefmt" = "latest"
sources = [
"*.{json,md,toml}",
"cfg/*.ts",
"web/app/themes/haiku-atelier-2024/src/**/*.ts"
]
[tasks.watch-format]
alias = "wf"
description = "Formate le code avec treefmt en utilisant la configuration globale"
run = "watchexec -w web/app/themes/haiku-atelier-2024/src/ mise run format"
sources = ["*.{json,md,toml}", "cfg/*.ts", "web/app/themes/haiku-atelier-2024/src/**/*.ts"]
[tasks.build-css]
description = "Compile le CSS depuis les fichiers SCSS"
outputs = ["web/app/themes/haiku-atelier-2024/assets/css/**/*.css"]
run = [
"aube x sass --update web/app/themes/haiku-atelier-2024/src/sass:web/app/themes/haiku-atelier-2024/assets/css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/main.min.css -- web/app/themes/haiku-atelier-2024/assets/css/main.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-accueil.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-accueil.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-boutique.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-boutique.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-a-propos.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-a-propos.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-modele-simple.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-modele-simple.css",
"aube x lightningcss --browserslist --bundle --minify --output-file web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css -- web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css",
]
sources = ["web/app/themes/haiku-atelier-2024/src/sass/**/*.scss"]
[tasks.test-shop]
description = "Lance les tests d'intégration pour la page Boutique"
run = "aube x playwright test --config cfg/playwright.config.ts tests/playwright/shop.spec.ts"

View file

@ -15,7 +15,7 @@
"@mobily/ts-belt": "v4.0.0-rc.5",
"@sentry/browser": "^10.51.0",
"a11y-dialog": "^8.1.5",
"effect": "^4.0.0-beta.59",
"effect": "^4.0.0-beta.60",
"html-template-tag": "^5.0.0",
"lit-html": "^3.3.2",
"purify-ts": "2.1.2",
@ -25,14 +25,14 @@
"devDependencies": {
"@effect/language-service": "^0.85.1",
"@effect/tsgo": "^0.5.2",
"@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint#888eb4aa54",
"@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint#83547fc1ebfd",
"@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier#d267d6dc5e",
"@gcch/configuration-eslint": "git+https://git.gcch.fr/gcch/configuration-eslint",
"@gcch/configuration-oxlint": "git+https://git.gcch.fr/gcch/configuration-oxlint",
"@gcch/configuration-prettier": "git+https://git.gcch.fr/gcch/configuration-prettier",
"@playwright/test": "^1.59.1",
"@sentry/core": "^10.51.0",
"@types/bun": "^1.3.13",
"@types/node": "^25.6.0",
"@typescript/native-preview": "7.0.0-dev.20260503.1",
"@typescript/native-preview": "7.0.0-dev.20260504.1",
"@vitejs/plugin-legacy": "^8.0.1",
"better-typescript-lib": "^2.12.0",
"browserslist": "^4.28.2",
@ -43,7 +43,7 @@
"eslint-plugin-oxlint": "^1.62.0",
"eslint-plugin-perfectionist": "^5.9.0",
"fdir": "^6.5.0",
"globals": "^17.6",
"globals": "17",
"jiti": "^2.6.1",
"knip": "^6.11.0",
"lightningcss": "^1.32.0",
@ -59,7 +59,7 @@
"prettier-plugin-sh": "^0.18.1",
"prettier-plugin-sort-json": "^4.2.0",
"sass-embedded": "^1.99.0",
"stylelint": "^17.9.1",
"stylelint": "^17.10.0",
"stylelint-config-clean-order": "^8.0.1",
"stylelint-config-sass-guidelines": "^13.0.0",
"stylelint-config-standard-scss": "^17.0.0",

View file

@ -1,50 +1,40 @@
/** @effect-diagnostics asyncFunction:skip-file */
import type { APIRequestContext, Locator, Page, Response } from "@playwright/test";
import { expect, test } from "@playwright/test";
import { ManagedRuntime } from "effect";
import { APIClient } from "../../web/app/themes/haiku-atelier-2024/src/scripts-effect/lib/api.ts";
import type { WCV3Products } from "../../web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products";
import type { BackendHeaders } from "./utils.ts";
import { getBackendHeadersFromHtml } from "./utils.ts";
test.describe.configure({ mode: "parallel", timeout: 60_000 });
/** _Runtime_ pour effectuer les appels API. */
const TestRuntime = ManagedRuntime.make(APIClient.Live);
test("is on the first page of the Shop", async ({ page }): Promise<void> => {
const FIRST_PAGE_NUMBER = "1";
await page.goto("https://haikuatelier.gcch.local/shop/");
const productsGrid: Locator = page.locator(".grille-produits");
await expect(productsGrid, "La grille des Produits est visible.").toBeVisible();
expect(await productsGrid.getAttribute("data-page"), "Le numéro de page initial est correct.").toBe(
FIRST_PAGE_NUMBER,
);
});
test("can scroll to the end of the grid", async ({ page }): Promise<void> => {
await scrollToGridsEnd(page);
});
test("can access all Products' pages", async ({ page, request }): Promise<void> => {
await page["goto"]("https://haikuatelier.gcch.local/shop/");
const links = await getAllProductsLinks(page, request);
for (const link of links) {
// Vérifie que le lien de la page retourne OK.
const req = await request.get(link);
await expect(req, "The Product's page is accessible").toBeOK();
}
});
const getAllProductsLinks = async (page: Page, request: APIRequestContext): Promise<Array<string>> => {
const backendHeaders: BackendHeaders = await getBackendHeadersFromHtml(page);
const response = await request.get("/wp-json/wc/v3/products?page=1&per_page=100&status=publish", {
headers: { Authorization: `Basic ${backendHeaders.authString}`, Nonce: backendHeaders.nonce },
});
const json = (await response.json()) as WCV3Products;
return json.map(p => p.permalink);
};
const scrollToGridsEnd = async (page: Page): Promise<void> => {
await page["goto"]("https://haikuatelier.gcch.local/shop/");
await page.goto("https://haikuatelier.gcch.local/shop/");
let hasMoreProducts = true;
let currentPageNumber = "1";
const productsGrid: Locator = page.locator(".grille-produits");
await expect(productsGrid, "The Product's grid is visible").toBeVisible();
expect(await productsGrid.getAttribute("data-page"), "The initial page number attribute is correct").toBe(
currentPageNumber,
);
await expect(productsGrid, "La grille des Produits est visible.").toBeVisible();
const showMoreButton: Locator = page.getByRole("button", { name: "Show more" });
await expect(showMoreButton, "The 'Show more' button is visible").toBeVisible();
await expect(showMoreButton, "Le bouton « Show more » est visible.").toBeVisible();
while (hasMoreProducts) {
const newProductsResponse: Promise<Response> = page.waitForResponse(new RegExp(".*wp-json/wc/v3/products.*"));
@ -57,7 +47,7 @@ const scrollToGridsEnd = async (page: Page): Promise<void> => {
await gridWithNewPageNumber.waitFor();
// Redondance pour expliciter la raison de l'assertion.
expect(await productsGrid.getAttribute("data-page"), "The page number attribute is incremented").toBe(
expect(await productsGrid.getAttribute("data-page"), "Le numéro de page a été incrémenté.").toBe(
newPageNumber,
);
currentPageNumber = newPageNumber;
@ -67,4 +57,44 @@ const scrollToGridsEnd = async (page: Page): Promise<void> => {
hasMoreProducts = false;
}
}
});
test("can access all Products' pages", async ({ page, request }): Promise<void> => {
await page.goto("https://haikuatelier.gcch.local/shop/");
const links = await getAllProductsLinks(page, request);
for (const link of links) {
// Vérifie que le lien de la page retourne OK.
const req = await request.get(link);
await expect(req, "La page du Produit est accessible.").toBeOK();
}
});
test("has no Product with broken images", async ({ page }): Promise<void> => {
await page.goto("https://haikuatelier.gcch.local/shop/");
await loadMoreProducts(page);
const brokenImages = await page.locator("a:has(img[src=''])").all();
const links = await Promise.all(brokenImages.map(locator => locator.getAttribute("href")));
console.info("Liens des Produits avec images cassées :", links);
expect(links.length, "Il n'y pas d'images cassées.").toEqual(0);
});
const getAllProductsLinks = async (page: Page, request: APIRequestContext): Promise<Array<string>> => {
const backendHeaders: BackendHeaders = await getBackendHeadersFromHtml(page);
const response = await request.get("/wp-json/wc/v3/products?page=1&per_page=100&status=publish", {
headers: { Authorization: `Basic ${backendHeaders.authString}`, Nonce: backendHeaders.nonce },
});
const json = (await response.json()) as WCV3Products;
return json.map(p => p.permalink);
};
const loadMoreProducts = async (page: Page): Promise<void> => {
const showMoreButton: Locator = page.getByRole("button", { name: "Show more" });
const newProductsResponse: Promise<Response> = page.waitForResponse(new RegExp(".*wp-json/wc/v3/products.*"));
await showMoreButton.click();
await newProductsResponse;
};

View file

@ -39,7 +39,7 @@
{
"diagnosticSeverity": {
"anyUnknownInErrorContext": "error",
"asyncFunction": "warning",
"asyncFunction": "off",
"catchAllToMapError": "error",
"catchUnfailableEffect": "error",
"classSelfMismatch": "error",

File diff suppressed because it is too large Load diff

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 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-404.scss"],"names":[],"mappings":"AAEA;EAEE;EAGA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;IACE;IACA","file":"page-404.css"}

View file

@ -1,121 +0,0 @@
@charset "UTF-8";
#page-a-propos {
--hauteur-conteneur: var(--contenu-page-hauteur-minimale-sans-categories);
--page-marges-bloc-debut: var(--en-tete-hauteur);
--conteneur-marges-internes-ligne: var(--espace-xl);
overflow: hidden;
display: flex;
flex-flow: column nowrap;
min-block-size: var(--hauteur-conteneur);
max-block-size: var(--hauteur-conteneur);
margin-top: var(--page-marges-bloc-debut);
}
#page-a-propos .storytelling {
overflow-y: scroll;
overscroll-behavior: none;
min-block-size: inherit;
max-block-size: inherit;
}
#page-a-propos .storytelling__conteneur {
overscroll-behavior: inherit;
display: flex;
flex-flow: column nowrap;
place-items: center;
min-block-size: calc(var(--hauteur-conteneur) * 13);
padding: 0 var(--conteneur-marges-internes-ligne);
}
#page-a-propos .storytelling__animation {
--hauteur-animation: 90px;
--taille-police: calc(var(--espace-xl) * 2.5);
pointer-events: none;
position: absolute;
z-index: 3;
top: 0;
right: 0;
left: 0;
overflow: hidden;
display: grid;
place-content: center;
place-items: center;
block-size: 100%;
margin: auto;
visibility: visible;
opacity: 100%;
mask-image: linear-gradient(
var(--mask-direction, to right),
hsla(0, 0%, 0%, 0),
hsl(0, 0%, 0%) 20%,
hsl(0, 0%, 0%) 80%,
hsla(0, 0%, 0%, 0)
);
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
}
#page-a-propos .storytelling__animation[hidden] {
display: grid !important;
visibility: hidden;
opacity: 0%;
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
}
#page-a-propos .storytelling__animation.no-js {
visibility: hidden;
opacity: 0%;
transition: 1s opacity ease-in-out, 1s visibility ease-in-out;
}
#page-a-propos .storytelling__animation .animation-conteneur {
overflow: visible;
width: 120vw;
block-size: var(--hauteur-animation);
}
#page-a-propos .storytelling__animation .animation-texte {
overflow: visible;
font-size: var(--taille-police);
font-weight: 600;
text-shadow: 4px 4px 0 var(--couleur-blanc);
text-transform: uppercase;
letter-spacing: var(--espacement-inter-lettres-rapproche-s);
}
#page-a-propos .storytelling__image {
position: sticky;
top: 0;
align-content: center;
inline-size: max-content;
max-inline-size: 100%;
min-block-size: var(--hauteur-conteneur);
max-block-size: var(--hauteur-conteneur);
}
#page-a-propos .storytelling__image[data-caché] {
display: none !important;
}
#page-a-propos .storytelling__image picture {
max-block-size: inherit;
}
#page-a-propos .storytelling__image img {
scale: 0.95;
max-block-size: inherit;
margin: auto;
object-fit: contain;
background: transparent;
}
@media (scripting: none) {
#page-a-propos .storytelling__animation {
visibility: hidden;
}
}
@media (width <= 700px) {
#page-a-propos {
--conteneur-marges-internes-ligne: var(--espace-l);
}
}
@media (width <= 500px) {
#page-a-propos {
--conteneur-marges-internes-ligne: var(--espace-m);
}
}
@supports (-moz-appearance: none) {
#page-a-propos .storytelling__animation {
--taille-police: calc(var(--espace-xl) * 2.2);
}
}
/* # sourceMappingURL=page-a-propos.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-a-propos.scss"],"names":[],"mappings":";AAEA;EAEE;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAOA;;AAEA;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;;AAGF;EACE;EAIA;EACA;;AAGF;EACE;EAGA;EACA;EAGA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAMN;EACE;IACE;;;AAIJ;EAjIF;IAkII;;;AAGF;EArIF;IAsII;;;;AAKJ;EACE;IACE","file":"page-a-propos.css"}

View file

@ -1 +0,0 @@
#page-a-propos{--hauteur-conteneur:var(--contenu-page-hauteur-minimale-sans-categories);--page-marges-bloc-debut:var(--en-tete-hauteur);--conteneur-marges-internes-ligne:var(--espace-xl);min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);margin-top:var(--page-marges-bloc-debut);flex-flow:column;display:flex;overflow:hidden}#page-a-propos .storytelling{overscroll-behavior:none;min-block-size:inherit;max-block-size:inherit;overflow-y:scroll}#page-a-propos .storytelling__conteneur{overscroll-behavior:inherit;min-block-size:calc(var(--hauteur-conteneur) * 13);padding:0 var(--conteneur-marges-internes-ligne);flex-flow:column;place-items:center;display:flex}#page-a-propos .storytelling__animation{--hauteur-animation:90px;--taille-police:calc(var(--espace-xl) * 2.5);pointer-events:none;z-index:3;visibility:visible;opacity:1;block-size:100%;mask-image:linear-gradient(var(--mask-direction,to right), #0000, #000 20%, #000 80%, #0000);place-content:center;place-items:center;margin:auto;transition:opacity 1s ease-in-out,visibility 1s ease-in-out;display:grid;position:absolute;top:0;left:0;right:0;overflow:hidden}#page-a-propos .storytelling__animation[hidden]{visibility:hidden;opacity:0;transition:opacity 1s ease-in-out,visibility 1s ease-in-out;display:grid!important}#page-a-propos .storytelling__animation.no-js{visibility:hidden;opacity:0;transition:opacity 1s ease-in-out,visibility 1s ease-in-out}#page-a-propos .storytelling__animation .animation-conteneur{width:120vw;block-size:var(--hauteur-animation);overflow:visible}#page-a-propos .storytelling__animation .animation-texte{font-size:var(--taille-police);text-shadow:4px 4px 0 var(--couleur-blanc);text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:600;overflow:visible}#page-a-propos .storytelling__image{inline-size:max-content;max-inline-size:100%;min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);align-content:center;position:sticky;top:0}#page-a-propos .storytelling__image[data-caché]{display:none!important}#page-a-propos .storytelling__image picture{max-block-size:inherit}#page-a-propos .storytelling__image img{max-block-size:inherit;object-fit:contain;background:0 0;margin:auto;scale:.95}@media (scripting:none){#page-a-propos .storytelling__animation{visibility:hidden}}@media (width<=700px){#page-a-propos{--conteneur-marges-internes-ligne:var(--espace-l)}}@media (width<=500px){#page-a-propos{--conteneur-marges-internes-ligne:var(--espace-m)}}@supports ((-moz-appearance:none)){#page-a-propos .storytelling__animation{--taille-police:calc(var(--espace-xl) * 2.2)}}

View file

@ -1,10 +0,0 @@
#page-accueil {
--hauteur-conteneur: calc(100svh - var(--pied-de-page-hauteur));
overflow: hidden;
display: flex;
flex-flow: column nowrap;
min-block-size: var(--hauteur-conteneur);
max-block-size: var(--hauteur-conteneur);
}
/* # sourceMappingURL=page-accueil.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-accueil.scss"],"names":[],"mappings":"AAEA;EAEE;EAEA;EACA;EACA;EACA;EACA","file":"page-accueil.css"}

View file

@ -1 +0,0 @@
#page-accueil{--hauteur-conteneur:calc(100svh - var(--pied-de-page-hauteur));min-block-size:var(--hauteur-conteneur);max-block-size:var(--hauteur-conteneur);flex-flow:column;display:flex;overflow:hidden}

View file

@ -1,10 +0,0 @@
#page-boutique .actions {
align-content: center;
width: 100%;
text-align: center;
}
#page-boutique .actions button {
padding: var(--espace-xl) 0;
}
/* # sourceMappingURL=page-boutique.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-boutique.scss"],"names":[],"mappings":"AAGE;EACE;EACA;EACA;;AAEA;EACE","file":"page-boutique.css"}

View file

@ -1 +0,0 @@
#page-boutique .actions{text-align:center;align-content:center;width:100%}#page-boutique .actions button{padding:var(--espace-xl) 0}

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,473 +0,0 @@
@charset "UTF-8";
#panneau-panier {
border-right: 1px solid var(--couleur-noir);
}
#panneau-panier > div {
place-content: center;
}
#panneau-panier .panneau__grille-produits {
display: flex;
flex-flow: column nowrap;
}
#panneau-panier .panneau__grille-produits__produit {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr;
border-bottom: 1px solid var(--couleur-noir);
}
#panneau-panier .panneau__grille-produits__produit__illustratif {
border-right: 1px solid var(--couleur-noir);
}
#panneau-panier .panneau__grille-produits__produit__illustratif picture {
overflow: hidden;
height: 100%;
}
#panneau-panier .panneau__grille-produits__produit__illustratif img {
aspect-ratio: 1;
height: auto;
}
#panneau-panier .panneau__grille-produits .detail-produit {
display: flex;
flex-flow: column nowrap;
place-content: center;
width: fit-content;
margin: auto;
padding: 0 var(--espace-xl);
font-style: italic;
}
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix {
display: flex;
flex-flow: row nowrap;
column-gap: var(--espace-l);
justify-content: space-between;
font-size: var(--espace-l);
line-height: var(--hauteur-ligne-moitie);
}
#panneau-panier .panneau__grille-produits .detail-produit__nom-prix span {
min-width: 4rem;
font-weight: 600;
font-style: initial;
text-align: right;
}
#panneau-panier .panneau__grille-produits .detail-produit__description {
margin-bottom: var(--espace-l);
text-transform: lowercase;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions {
display: grid;
grid-template-columns: 0.25fr auto 0.25fr;
grid-template-rows: 1fr 1fr;
font-weight: 500;
font-style: initial;
/* Bouton d'addition de quantité */
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type {
grid-column: 1;
min-width: 3rem;
max-width: 3rem;
border: 1px solid var(--couleur-noir);
border-bottom: initial;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions {
/*
* 1. Cache les flèches d'augmentation/diminution sur Firefox.
* 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari.
*/
}
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type="number"] {
grid-column: 2;
width: 100%;
border: initial;
border-top: 1px solid var(--couleur-noir);
text-align: center;
appearance: textfield; /* 1 */
}
#panneau-panier
.panneau__grille-produits
.detail-produit__actions
input[type="number"]::-webkit-outer-spin-button,
#panneau-panier
.panneau__grille-produits
.detail-produit__actions
input[type="number"]::-webkit-inner-spin-button {
margin: 0; /* 2 */
appearance: none; /* 2 */
}
#panneau-panier .panneau__grille-produits .detail-produit__actions {
/* Bouton de suppression de quantité */
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2) {
grid-column: 3;
min-width: 3rem;
max-width: 3rem;
border: 1px solid var(--couleur-noir);
border-bottom: initial;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions {
/* Bouton de suppression du Produit du Panier */
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type {
grid-column: span 3;
grid-row: 2;
padding: var(--espace-xs);
border: 1px solid var(--couleur-noir);
text-transform: lowercase;
}
#panneau-panier .panneau__instructions-code-promo {
width: 100%;
padding: var(--espace-l) var(--espace-xl);
border-bottom: 1px solid var(--couleur-noir);
text-align: center;
/*
* 1. Nécessaire pour ne pas qu'un espace vertical non souhaité apparaisse.
* 2. Applique une marge entre les instructions et le code promo de notre choix.
*/
}
#panneau-panier .panneau__instructions-code-promo__instructions {
resize: vertical;
display: block; /* 1 */
width: 100%;
margin: auto; /* 1 */
margin-bottom: var(--espace-s); /* 2 */
padding: var(--espace-s);
border: 1px solid transparent;
font-size: 0.8rem;
font-weight: 450;
background: initial;
}
#panneau-panier .panneau__instructions-code-promo__code-promo {
display: flex;
flex-flow: row wrap;
place-content: center;
width: fit-content;
margin: auto;
/*
* 1. Longueur minimale pour le Bouton n'ait pas à changer de taille quel que soit son texte
*/
}
#panneau-panier .panneau__instructions-code-promo__code-promo button {
min-width: 9rem; /* 1 */
padding: var(--espace-xs) var(--espace-xl);
border: 1px solid var(--couleur-noir);
border-left: initial;
text-transform: lowercase;
}
#panneau-panier .panneau__instructions-code-promo__code-promo__message {
flex-basis: 100%;
margin-top: var(--espace-m);
}
#panneau-panier .panneau__sous-totaux {
width: min(40rem, 100%);
margin: auto;
padding: var(--espace-l) var(--espace-xl);
text-align: center;
}
#panneau-panier .panneau__sous-totaux__ligne {
display: flex;
flex-flow: row nowrap;
justify-content: space-between;
font-style: italic;
}
#panneau-panier .panneau__sous-totaux__ligne strong {
text-align: right;
text-transform: lowercase;
}
#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type {
text-align: right;
}
#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span {
color: var(--couleur-gris-fonce);
}
#panneau-panier .panneau__sous-totaux__choix-methode-livraison {
flex-flow: row wrap;
gap: var(--espace-xs) var(--espace-m);
justify-content: center;
font-size: 0.9rem;
letter-spacing: inherit;
}
#panneau-panier .panneau__sous-totaux__choix-methode-livraison > label:first-of-type {
cursor: revert;
flex-basis: 100%;
margin-bottom: var(--espace-xs);
color: var(--couleur-gris-fonce);
text-align: center;
text-transform: lowercase;
}
#panneau-panier .panneau__sous-totaux__choix-methode-livraison div {
display: flex;
flex-flow: row nowrap;
column-gap: 1ch;
place-items: center;
}
#panneau-panier .panneau__sous-totaux__conditions-livraison {
margin-top: var(--espace-l);
font-size: 0.8rem;
font-weight: 450;
color: var(--couleur-gris-fonce);
letter-spacing: var(--espacement-inter-lettres-etendu-s);
}
#panneau-panier .panneau__pied-de-page {
align-content: center;
padding: var(--espace-l) 0;
font-size: 1.25rem;
font-style: italic;
color: var(--couleur-blanc);
text-align: center;
text-transform: uppercase;
letter-spacing: 2px;
background: var(--couleur-noir);
}
#panneau-panier .panneau__pied-de-page span {
margin-left: var(--espace-l);
font-style: initial;
}
@media (width <= 500px) {
#panneau-panier .panneau__grille-produits__produit__illustratif img {
height: 100%;
}
#panneau-panier .panneau__grille-produits .detail-produit {
padding: var(--espace-l);
}
#panneau-panier .panneau__grille-produits .detail-produit .detail-produit__nom-prix {
column-gap: var(--espace-l);
}
#panneau-panier .panneau__instructions-code-promo {
padding: var(--espace-xl) var(--espace-l);
}
#panneau-panier
.panneau__instructions-code-promo
.panneau__instructions-code-promo__code-promo
input,
#panneau-panier
.panneau__instructions-code-promo
.panneau__instructions-code-promo__code-promo
button {
flex: 1;
}
#panneau-panier .panneau__sous-totaux {
padding: var(--espace-xl) var(--espace-l);
}
}
#panneau-informations-client {
position: sticky;
top: var(--en-tete-hauteur);
right: 0;
height: fit-content;
}
#panneau-informations-client > * {
align-content: center;
text-align: center;
}
#panneau-informations-client .panneau__paypal-express {
--hauteur-images-bouton: 18px;
--hauteur-bouton: calc(var(--hauteur-images-bouton) * 2);
--longueur-bouton: 250px;
--espacement-inter-images: var(--espace-xs);
padding: var(--espace-xl);
border-bottom: 1px solid var(--couleur-noir);
}
#panneau-informations-client .panneau__paypal-express p {
margin-bottom: var(--espace-s);
font-style: italic;
}
#panneau-informations-client .panneau__paypal-express button {
display: flex;
column-gap: var(--espacement-inter-images);
place-content: center;
place-items: center;
width: var(--longueur-bouton);
height: var(--hauteur-bouton);
margin: auto;
background: var(--couleur-noir);
}
#panneau-informations-client .panneau__paypal-express button img {
height: var(--hauteur-images-bouton);
background: inherit;
}
#panneau-informations-client .panneau__paypal-express button img:first-of-type {
margin-top: -1px;
}
#panneau-informations-client .panneau__formulaires {
padding: var(--espace-xl) 0;
}
#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses {
position: relative;
display: flex;
flex-flow: row nowrap;
column-gap: 1ch;
place-items: center;
width: fit-content;
margin: auto;
margin-bottom: var(--espace-m);
font-size: 0.8rem;
font-style: italic;
}
#panneau-informations-client
.panneau__formulaires
.panneau__formulaires__separation-adresses
label {
text-transform: lowercase;
}
#panneau-informations-client
.panneau__formulaires
.panneau__formulaires__paiement
.formulaire__paiement__attente-renseignement-formulaires {
align-content: center;
width: 100%;
padding: 0;
font-size: 0.8rem;
font-weight: 450;
color: var(--couleur-gris-fonce);
text-align: center;
}
#panneau-informations-client
.panneau__formulaires
.panneau__formulaires__paiement
.formulaire__paiement__attente-renseignement-formulaires
p + p {
margin-top: 1lh;
}
#panneau-informations-client .panneau__formulaires .panneau__formulaires__message {
margin: var(--espace-xl) 0;
font-weight: 500;
font-style: italic;
}
#panneau-informations-client .formulaire {
margin: auto;
padding: 0 var(--espace-xl);
}
#panneau-informations-client .formulaire + .formulaire {
margin-top: var(--espace-xl);
}
#panneau-informations-client .formulaire .formulaire__titre {
margin-bottom: var(--espace-m);
font-size: 1.25rem;
font-weight: 600;
font-style: italic;
letter-spacing: 1px;
}
#panneau-informations-client .formulaire .formulaire__champs {
width: fit-content;
margin: auto;
text-align: left;
}
#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ {
display: flex;
flex-flow: row nowrap;
column-gap: var(--espace-xl);
place-items: center;
justify-content: space-between;
}
#panneau-informations-client
.formulaire
.formulaire__champs
.formulaire__champs__champ
+ .formulaire__champs__champ {
margin-top: var(--espace-l);
}
#panneau-informations-client .formulaire label {
width: min(7rem, 100%);
font-weight: 400;
text-transform: lowercase;
}
#panneau-informations-client .formulaire label:has(+ :is(input:required, select:required)) {
font-weight: 600;
}
#panneau-informations-client .formulaire input, #panneau-informations-client .formulaire select {
width: min(15rem, 100%);
}
#panneau-informations-client .panneau__pied-de-page {
align-content: center;
font-size: 1.25rem;
font-style: italic;
color: var(--couleur-blanc);
text-align: center;
text-transform: uppercase;
letter-spacing: 2px;
border-block: 1px solid var(--couleur-noir);
border-block-end: 0;
background: var(--arriere-plan-points);
}
#panneau-informations-client .panneau__pied-de-page:has(button[disabled]) {
background: var(--couleur-gris-fond);
}
#panneau-informations-client .panneau__pied-de-page button {
padding: var(--espace-l) 0;
}
@media (hover: hover) {
#panneau-informations-client .panneau__pied-de-page button:not([disabled]):hover {
font-weight: 600;
color: var(--couleur-blanc);
background: var(--couleur-gris-fonce-fond);
}
}
@media (width <= 500px) {
#panneau-informations-client .panneau__formulaires {
padding: var(--espace-xl) 0;
}
}
/*
* 1. Applique une marge supérieure égale à la hauteur de l'en-tête pour qu'elle puisse s'afficher
* correctement.
*/
#page-panier {
/* Dimensions */
--menu-section-hauteur: var(--menu-categories-produits-hauteur);
/* Marges */
--menu-section-marges-bloc-debut: var(--en-tete-hauteur); /* 1 */
position: relative;
display: flex;
flex-flow: row wrap;
min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));
margin-top: var(--menu-section-marges-bloc-debut);
}
#page-panier .panneau {
flex: 1 1 30rem;
border-top: 1px solid var(--couleur-noir);
border-bottom: 1px solid var(--couleur-noir);
}
#page-panier .panneau__en-tete {
position: sticky;
z-index: 2;
top: var(--menu-section-marges-bloc-debut);
display: block;
align-content: center;
min-height: var(--menu-categories-produits-hauteur);
max-height: var(--menu-categories-produits-hauteur);
color: var(--couleur-gris);
text-align: center;
background: var(--couleur-noir);
}
#page-panier .panneau__en-tete h2 {
font-weight: 450;
font-style: italic;
color: var(--couleur-gris);
text-transform: uppercase;
letter-spacing: 1px;
background: var(--couleur-noir);
}
#page-panier .panier-vide {
display: none;
flex-basis: 100%;
align-content: center;
min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));
text-align: center;
}
#page-panier .panier-vide p {
font-size: 1.25rem;
}
#page-panier .panier-vide a {
display: inline-block;
margin-top: var(--espace-m);
font-size: initial;
}
#page-panier[data-contient-articles="false"] .panneau {
display: none;
}
#page-panier[data-contient-articles="false"] .panier-vide {
display: block;
}
/* # sourceMappingURL=page-panier.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAbJ;AAgBE;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AA9BN;AAkCE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAxCJ;AA2CE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAGF;IACE;;EAEA;IACE;;EAIJ;IACE;;EAGE;IACE;;EAKN;IACE;;;;ACpRN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAMR;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAGF;EACE;;AAGE;EACE;IACE;IACA;IACA;;;AAOV;EACE;IACE;;;;AClLN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"}

File diff suppressed because one or more lines are too long

View file

@ -1,109 +0,0 @@
#page-succes-commande {
--page-hauteur-minimale: calc(
100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px
);
--page-marges-bloc-debut: var(--en-tete-hauteur);
display: flex;
flex-flow: column nowrap;
margin-top: var(--page-marges-bloc-debut);
margin-bottom: var(--espace-xl);
border-bottom: 1px solid var(--couleur-noir);
}
#page-succes-commande .contenu {
display: flex;
flex-flow: column nowrap;
place-items: center;
width: min(50rem, 100%);
min-height: var(--page-hauteur-minimale);
margin: auto;
border: 1px solid var(--couleur-noir);
border-bottom: initial;
font-weight: 500;
font-style: italic;
}
#page-succes-commande .contenu__en-tete {
width: 100%;
padding: var(--espace-m) var(--espace-xl);
color: var(--couleur-blanc);
background: var(--couleur-noir);
}
#page-succes-commande .contenu__en-tete h2 {
width: fit-content;
margin: auto;
text-transform: uppercase;
letter-spacing: var(--espacement-inter-lettres-etendu-l);
}
#page-succes-commande .contenu__textuel {
display: flex;
flex: 1;
flex-flow: column nowrap;
place-content: center;
max-width: 34rem;
height: 100%;
padding: var(--espace-xl);
font-style: normal;
}
#page-succes-commande .contenu__textuel p + p {
margin-top: var(--espace-m);
}
#page-succes-commande .contenu__rappel-commande {
display: flex;
flex-flow: column nowrap;
border-top: 1px solid var(--couleur-noir);
}
#page-succes-commande .contenu__rappel-commande__produit {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr;
border-bottom: 1px solid var(--couleur-noir);
}
#page-succes-commande .contenu__rappel-commande__produit:only-child,
#page-succes-commande .contenu__rappel-commande__produit:last-of-type {
border-bottom: initial;
}
#page-succes-commande .contenu__rappel-commande__produit__illustratif {
border-right: 1px solid var(--couleur-noir);
}
#page-succes-commande .contenu__rappel-commande__produit__illustratif picture {
overflow: hidden;
}
#page-succes-commande .contenu__rappel-commande__produit__illustratif img {
aspect-ratio: 1;
height: auto;
}
#page-succes-commande .contenu__rappel-commande .detail-produit {
display: flex;
flex-flow: column nowrap;
place-content: center;
width: 100%;
padding: 0 var(--espace-xl);
font-style: italic;
}
#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix {
display: flex;
flex-flow: row nowrap;
column-gap: var(--espace-xl);
justify-content: space-between;
margin-bottom: var(--espace-xs);
font-size: var(--espace-l);
line-height: var(--hauteur-ligne-moitie);
}
#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span {
min-width: 4rem;
font-weight: 600;
font-style: initial;
text-align: right;
}
#page-succes-commande .contenu__rappel-commande .detail-produit__description {
margin-bottom: var(--espace-l);
line-height: var(--hauteur-ligne-moitie);
text-transform: lowercase;
}
@media (width <= 50rem) {
#page-succes-commande .contenu {
border-right: initial;
border-left: initial;
}
}
/* # sourceMappingURL=page-succes-commande.css.map */

View file

@ -1 +0,0 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-succes-commande.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAMR;EACE;IACE;IACA","file":"page-succes-commande.css"}

View file

@ -1 +0,0 @@
#page-succes-commande{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}#page-succes-commande .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:500;display:flex}#page-succes-commande .contenu__en-tete{width:100%;padding:var(--espace-m) var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}#page-succes-commande .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}#page-succes-commande .contenu__textuel{max-width:34rem;height:100%;padding:var(--espace-xl);flex-flow:column;flex:1;place-content:center;font-style:normal;display:flex}#page-succes-commande .contenu__textuel p+p{margin-top:var(--espace-m)}#page-succes-commande .contenu__rappel-commande{border-top:1px solid var(--couleur-noir);flex-flow:column;display:flex}#page-succes-commande .contenu__rappel-commande__produit{border-bottom:1px solid var(--couleur-noir);grid-template-rows:1fr;grid-template-columns:1fr 1fr;display:grid}#page-succes-commande .contenu__rappel-commande__produit:only-child,#page-succes-commande .contenu__rappel-commande__produit:last-of-type{border-bottom:initial}#page-succes-commande .contenu__rappel-commande__produit__illustratif{border-right:1px solid var(--couleur-noir)}#page-succes-commande .contenu__rappel-commande__produit__illustratif picture{overflow:hidden}#page-succes-commande .contenu__rappel-commande__produit__illustratif img{aspect-ratio:1;height:auto}#page-succes-commande .contenu__rappel-commande .detail-produit{width:100%;padding:0 var(--espace-xl);flex-flow:column;place-content:center;font-style:italic;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix{column-gap:var(--espace-xl);margin-bottom:var(--espace-xs);font-size:var(--espace-l);line-height:var(--hauteur-ligne-moitie);flex-flow:row;justify-content:space-between;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span{min-width:4rem;font-weight:600;font-style:initial;text-align:right}#page-succes-commande .contenu__rappel-commande .detail-produit__description{margin-bottom:var(--espace-l);line-height:var(--hauteur-ligne-moitie);text-transform:lowercase}@media (width<=50rem){#page-succes-commande .contenu{border-right:initial;border-left:initial}}

View file

@ -17,6 +17,7 @@ use Psl\Option\Option;
use stdClass;
use Timber\Timber;
use WC_Product;
use WP_Term;
use function add_action;
use function assert;
@ -40,6 +41,11 @@ if ($raw_product === null || $raw_product === false) {
// Assemble les données d'intérêt pour la page au sein d'une Classe.
$product = Product::from_wc_product($raw_product);
// echo("<pre>");
// print_r($raw_product->get_data());
// echo("</pre>");
// exit;
/** @var int $maximum_price Le prix de la Variation la plus chère */
$maximum_price = collect($product->variations)->max('price');
@ -64,8 +70,8 @@ $product_tags = $raw_product->get_tag_ids()
id : $id,
taxonomy: 'product_tag',
)))
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|> (static fn(/** @var list<Option<WC_Term>> */ $tags) => Arr::map($tags, static fn($tag) => $tag->unwrap()));
|> (static fn(/** @var list<Option<WP_Term>> */ $tags) => Arr::reject($tags, static fn($tag) => $tag->isNone()))
|> (static fn(/** @var list<Option<WP_Term>> */ $tags) => Arr::map($tags, static fn($tag) => $tag->unwrap()));
$tags = get_terms(['taxonomy' => 'product_tag', 'hide_empty' => true]);
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.

View file

@ -115,7 +115,7 @@
}
}
/* * Bouton du compte de Produits dans le Panier. */
/* Bouton du compte de Produits dans le Panier. */
.compte-panier {
display: flex;
flex-flow: row nowrap;
@ -123,13 +123,7 @@
place-items: center;
text-align: center;
&[disabled] {
background: var(--arriere-plan-points);
a:hover, a:active, a:focus-within {
border: 1px solid var(--couleur-noir);
}
}
/* TODO: Utiliser un background sur .compte-panier pour varier l'apparence du bouton */
a {
padding-block: var(--espace-2xs);
@ -141,14 +135,19 @@
background: var(--couleur-gris-fond);
}
&:hover, &:focus-within {
&:focus-visible, &:focus-within {
background: var(--arriere-plan-points);
outline-color: var(--couleur-noir);
}
&:active {
color: var(--couleur-blanc);
background: var(--couleur-gris-fonce-fond);
background: var(--arriere-plan-points);
}
&:active {
color: var(--couleur-noir);
background: var(--arriere-plan-points);
@media (hover: hover) {
&:hover {
background: var(--arriere-plan-points);
}
}
}
}

View file

@ -9,7 +9,7 @@ const ProductPageRuntime = ManagedRuntime.make(
pipe(
ProductPageDOM.Live,
Layer.provideMerge(ProductPageMessages.Live),
Layer.provide(ProductPageElements.Live),
Layer.provideMerge(ProductPageElements.Live),
Layer.provide(APIClient.Live),
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error)),
),

View file

@ -5,13 +5,7 @@ import { Array as FxArray, Context, Effect, HashMap, Layer, Option, pipe } from
import type { DetailEnsemble } from "./types.d.ts";
import { getAllSelectorFromDocument, getFirstSelectorFromDocument } from "../../scripts-effect/lib/dom.ts";
import {
ATTRIBUT_ARIA_CONTROLS,
DOM_BOUTON_AJOUT_PANIER,
DOM_BOUTONS_ACCORDEON,
DOM_CONTENUS_ACCORDEON,
DOM_PRIX_PRODUIT,
} from "../constantes/dom.ts";
import { ATTRIBUT_ARIA_CONTROLS, DOM_BOUTON_AJOUT_PANIER, DOM_BOUTONS_ACCORDEON, DOM_CONTENUS_ACCORDEON, DOM_PRIX_PRODUIT } from "../constantes/dom.ts";
import { IncoherentDOMError } from "./errors.ts";
class ProductPageElements
@ -25,6 +19,8 @@ class ProductPageElements
const PageStatesRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#page-states");
const ContextRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#product-json");
const ProductPrice = yield* getFirstSelectorFromDocument<HTMLParagraphElement>(DOM_PRIX_PRODUIT);
const VariationChoiceForm = yield* getFirstSelectorFromDocument<HTMLFormElement>("#variation-choice");
@ -51,6 +47,7 @@ class ProductPageElements
return {
AddToCartButton,
ContextRawJson,
Details,
DetailsButtons,
DetailsContents,

View file

@ -1,6 +1,6 @@
// Scripts pour la Page Produit
import { Cause, Console, Effect } from "effect";
import { Cause, Console, Effect, pipe } from "effect";
import ProductPageRuntime from "./page-produit/runtime.ts";
import ProductPageDOM from "./page-produit/service-dom.ts";
import ProductPageMessages from "./page-produit/service-messages.ts";
@ -10,26 +10,22 @@ document.addEventListener("DOMContentLoaded", (): void => {
const DOM = yield* ProductPageDOM;
const Messages = yield* ProductPageMessages;
const effects = Effect.all(
[
// yield* Effect.forkChild(Effect.gen(function*() {
// yield* Effect.log(JSON.parse(Elements.ContextRawJson.textContent));
// }));
yield* pipe(
Effect.all([
DOM.initAddToCartButtonInitialState(),
DOM.initAddToCartButtonUpdates(),
DOM.initAddToCartButtonClicks(),
DOM.initDetailInteractions(),
DOM.initPriceUpdatesOnVariationChange(),
Messages.initAddToCartButtonUpdates(),
],
{
concurrency: "unbounded",
},
], { concurrency: "unbounded" }),
Effect.tapCause(cause => Console.error(Cause.pretty(cause))),
);
yield* effects.pipe(Effect.tapCause(cause => Console.error(Cause.pretty(cause))));
}).pipe(ProductPageRuntime.runFork);
document.querySelector("#cart-error button").addEventListener("click", (): void => {
document.querySelector("#cart-error").close();
});
});
// const ajouteProduitAuPanier = (event: MouseEvent): void => {

View file

@ -1,10 +1,14 @@
<header id="en-tete">
<div class="logo">
<img
alt="Haiku Atelier's Logo" decoding="async"
height="77" loading="eager"
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg" width="307"
/>
<a
aria-label="Go to the Shop" href="/shop"
title="Go to the Shop"
>
<img
alt="Haiku Atelier's Logo" height="77"
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg" width="307"
/>
</a>
</div>
{# TODO: Utiliser un Menu WordPress ? #}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 398 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,001 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 KiB

Binary file not shown.