2026-05-06
- corvée(gitignore) exclus les fichiers CSS compilés
1
.gitignore
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,19 +1,11 @@
|
|||
# :schema: https://github.com/AJenbo/phpantom_lsp/raw/main/config-schema.json
|
||||
#:schema https://github.com/AJenbo/phpantom_lsp/raw/main/config-schema.json
|
||||
|
||||
[php]
|
||||
# Override the detected PHP version (default: inferred from composer.json, or 8.5).
|
||||
# version = "8.5"
|
||||
#
|
||||
|
||||
[diagnostics]
|
||||
extra-arguments = true
|
||||
# Report member access on subjects whose type could not be resolved.
|
||||
# Useful for discovering gaps in type coverage. Off by default.
|
||||
unresolved-member-access = false
|
||||
|
||||
[indexing]
|
||||
# How PHPantom discovers classes across the workspace.
|
||||
# "composer" (default) - use Composer classmap, self-scan on fallback
|
||||
# "self" - always self-scan, ignore Composer classmap
|
||||
# "none" - no proactive scanning, Composer classmap only
|
||||
strategy = "composer"
|
||||
|
|
|
|||
|
|
@ -9,13 +9,21 @@
|
|||
"!oxc",
|
||||
"!oxfmt",
|
||||
"!oxlint",
|
||||
"!phptools",
|
||||
"!phpantom_lsp",
|
||||
"!prettier",
|
||||
"!tailwindcss-language-server",
|
||||
"!tsgo",
|
||||
"!vtsls",
|
||||
"..."
|
||||
],
|
||||
"languages": {
|
||||
"PHP": {
|
||||
"language_servers": [
|
||||
"phpactor",
|
||||
"phptools"
|
||||
]
|
||||
}
|
||||
},
|
||||
"lsp": {
|
||||
"css-variables": {
|
||||
"settings": {
|
||||
|
|
|
|||
530
aube-lock.yaml
|
|
@ -2,5 +2,4 @@ jailBuilds: false
|
|||
nodeLinker: isolated
|
||||
packageManagerStrict: true
|
||||
packageManagerStrictVersion: true
|
||||
trustPolicy: off
|
||||
useBetaCli: true
|
||||
|
|
|
|||
27
compose.yaml
|
|
@ -96,5 +96,32 @@ services:
|
|||
volumes:
|
||||
- "./containers/conf/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro"
|
||||
- "./:/var/www/wordpress:rw"
|
||||
jaeger:
|
||||
container_name: "haikuatelier.fr-jaeger"
|
||||
environment:
|
||||
- "COLLECTOR_OTLP_ENABLED=true"
|
||||
healthcheck:
|
||||
interval: "5s"
|
||||
retries: 3
|
||||
start_period: "5s"
|
||||
test:
|
||||
- "CMD"
|
||||
- "wget"
|
||||
- "--spider"
|
||||
- "http://localhost:16686"
|
||||
timeout: "2s"
|
||||
image: "cr.jaegertracing.io/jaegertracing/jaeger:latest"
|
||||
networks:
|
||||
- "haiku-network"
|
||||
ports:
|
||||
- "4317:4317"
|
||||
- "4318:4318"
|
||||
- "5778:5778"
|
||||
- "6831:6831/udp"
|
||||
- "6832:6832/udp"
|
||||
- "14250:14250"
|
||||
- "14268:14268"
|
||||
- "14269:14269"
|
||||
- "16686:16686"
|
||||
volumes:
|
||||
db-data: null
|
||||
|
|
|
|||
159
composer.lock
generated
|
|
@ -585,16 +585,16 @@
|
|||
},
|
||||
{
|
||||
"name": "illuminate/collections",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/collections.git",
|
||||
"reference": "36cfc25fc23ca18714fc8ee6abc947ee99c18462"
|
||||
"reference": "17b082d0c66fb030f22d5bdd62ba652c045ff522"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/collections/zipball/36cfc25fc23ca18714fc8ee6abc947ee99c18462",
|
||||
"reference": "36cfc25fc23ca18714fc8ee6abc947ee99c18462",
|
||||
"url": "https://api.github.com/repos/illuminate/collections/zipball/17b082d0c66fb030f22d5bdd62ba652c045ff522",
|
||||
"reference": "17b082d0c66fb030f22d5bdd62ba652c045ff522",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -603,7 +603,8 @@
|
|||
"illuminate/macroable": "^13.0",
|
||||
"php": "^8.3",
|
||||
"symfony/polyfill-php84": "^1.33",
|
||||
"symfony/polyfill-php85": "^1.33"
|
||||
"symfony/polyfill-php85": "^1.33",
|
||||
"symfony/polyfill-php86": "^1.36"
|
||||
},
|
||||
"suggest": {
|
||||
"illuminate/http": "Required to convert collections to API resources (^13.0).",
|
||||
|
|
@ -640,11 +641,11 @@
|
|||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2026-04-27T18:16:57+00:00"
|
||||
"time": "2026-04-28T17:17:15+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/conditionable",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/conditionable.git",
|
||||
|
|
@ -690,16 +691,16 @@
|
|||
},
|
||||
{
|
||||
"name": "illuminate/contracts",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/contracts.git",
|
||||
"reference": "a5f08426a807faac42616f733113ba263779f2dd"
|
||||
"reference": "ce6f5561f88743639c76835ad82cfe39b468bdc8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/a5f08426a807faac42616f733113ba263779f2dd",
|
||||
"reference": "a5f08426a807faac42616f733113ba263779f2dd",
|
||||
"url": "https://api.github.com/repos/illuminate/contracts/zipball/ce6f5561f88743639c76835ad82cfe39b468bdc8",
|
||||
"reference": "ce6f5561f88743639c76835ad82cfe39b468bdc8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -734,20 +735,20 @@
|
|||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2026-04-24T14:55:56+00:00"
|
||||
"time": "2026-04-28T17:16:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/macroable",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/macroable.git",
|
||||
"reference": "f108cb3a8680f26e23c6ce7367c64525412d85b0"
|
||||
"reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/macroable/zipball/f108cb3a8680f26e23c6ce7367c64525412d85b0",
|
||||
"reference": "f108cb3a8680f26e23c6ce7367c64525412d85b0",
|
||||
"url": "https://api.github.com/repos/illuminate/macroable/zipball/59b5b5f3cf290a91db8cf6cd3d35ff56978bc057",
|
||||
"reference": "59b5b5f3cf290a91db8cf6cd3d35ff56978bc057",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -780,11 +781,11 @@
|
|||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2026-03-28T19:16:13+00:00"
|
||||
"time": "2026-04-29T09:35:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "illuminate/reflection",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/reflection.git",
|
||||
|
|
@ -835,16 +836,16 @@
|
|||
},
|
||||
{
|
||||
"name": "illuminate/support",
|
||||
"version": "v13.7.0",
|
||||
"version": "v13.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/illuminate/support.git",
|
||||
"reference": "cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1"
|
||||
"reference": "ff687db22aefef516efd3ea21d01664af332da38"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/illuminate/support/zipball/cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1",
|
||||
"reference": "cc0d9d484ddd83fa54a0495cf15e7606e6a6f4b1",
|
||||
"url": "https://api.github.com/repos/illuminate/support/zipball/ff687db22aefef516efd3ea21d01664af332da38",
|
||||
"reference": "ff687db22aefef516efd3ea21d01664af332da38",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
|
@ -910,7 +911,7 @@
|
|||
"issues": "https://github.com/laravel/framework/issues",
|
||||
"source": "https://github.com/laravel/framework"
|
||||
},
|
||||
"time": "2026-04-27T13:46:05+00:00"
|
||||
"time": "2026-05-04T12:34:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/helpers",
|
||||
|
|
@ -2916,6 +2917,86 @@
|
|||
],
|
||||
"time": "2026-04-26T13:10:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php86",
|
||||
"version": "v1.37.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php86.git",
|
||||
"reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/33d8fc5a705481e21fe3a81212b26f9b1f61749c",
|
||||
"reference": "33d8fc5a705481e21fe3a81212b26f9b1f61749c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.2"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"url": "https://github.com/symfony/polyfill",
|
||||
"name": "symfony/polyfill"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Symfony\\Polyfill\\Php86\\": ""
|
||||
},
|
||||
"classmap": [
|
||||
"Resources/stubs"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicolas Grekas",
|
||||
"email": "p@tchwork.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions",
|
||||
"homepage": "https://symfony.com",
|
||||
"keywords": [
|
||||
"compatibility",
|
||||
"polyfill",
|
||||
"portable",
|
||||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php86/tree/v1.37.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-04-26T13:13:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-uuid",
|
||||
"version": "v1.37.0",
|
||||
|
|
@ -3663,15 +3744,15 @@
|
|||
},
|
||||
{
|
||||
"name": "wpackagist-plugin/redis-cache",
|
||||
"version": "2.7.0",
|
||||
"version": "2.8.0",
|
||||
"source": {
|
||||
"type": "svn",
|
||||
"url": "https://plugins.svn.wordpress.org/redis-cache/",
|
||||
"reference": "tags/2.7.0"
|
||||
"reference": "tags/2.8.0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://downloads.wordpress.org/plugin/redis-cache.2.7.0.zip"
|
||||
"url": "https://downloads.wordpress.org/plugin/redis-cache.2.8.0.zip"
|
||||
},
|
||||
"require": {
|
||||
"composer/installers": "^1.0 || ^2.0"
|
||||
|
|
@ -5215,12 +5296,12 @@
|
|||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Roave/SecurityAdvisories.git",
|
||||
"reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a"
|
||||
"reference": "9d468c11a8da481c22b4e610494babae032fdb03"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2221f6ef09e87784e78e188aadd8f7e3a50e679a",
|
||||
"reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a",
|
||||
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9d468c11a8da481c22b4e610494babae032fdb03",
|
||||
"reference": "9d468c11a8da481c22b4e610494babae032fdb03",
|
||||
"shasum": ""
|
||||
},
|
||||
"conflict": {
|
||||
|
|
@ -5280,7 +5361,7 @@
|
|||
"awesome-support/awesome-support": "<=6.0.7",
|
||||
"aws/aws-sdk-php": "<=3.371.3",
|
||||
"ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5",
|
||||
"azuracast/azuracast": "<=0.23.3",
|
||||
"azuracast/azuracast": "<=0.23.5",
|
||||
"b13/seo_basics": "<0.8.2",
|
||||
"backdrop/backdrop": "<=1.32",
|
||||
"backpack/crud": "<3.4.9",
|
||||
|
|
@ -5335,7 +5416,7 @@
|
|||
"cesnet/simplesamlphp-module-proxystatistics": "<3.1",
|
||||
"chriskacerguis/codeigniter-restserver": "<=2.7.1",
|
||||
"chrome-php/chrome": "<1.14",
|
||||
"ci4-cms-erp/ci4ms": "<=0.31.6",
|
||||
"ci4-cms-erp/ci4ms": "<=0.31.7",
|
||||
"civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3",
|
||||
"ckeditor/ckeditor": "<4.25",
|
||||
"clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3",
|
||||
|
|
@ -5387,6 +5468,7 @@
|
|||
"david-garcia/phpwhois": "<=4.3.1",
|
||||
"dbrisinajumi/d2files": "<1",
|
||||
"dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta",
|
||||
"dedoc/scramble": ">=0.13.2,<0.13.22",
|
||||
"derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3",
|
||||
"derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4",
|
||||
"desperado/xml-bundle": "<=0.1.7",
|
||||
|
|
@ -5539,7 +5621,8 @@
|
|||
"georgringer/news": "<1.3.3",
|
||||
"geshi/geshi": "<=1.0.9.1",
|
||||
"getformwork/formwork": "<=2.3.3",
|
||||
"getgrav/grav": "<1.11.0.0-beta1",
|
||||
"getgrav/grav": "<2.0.0.0-beta2",
|
||||
"getgrav/grav-plugin-api": "<1.0.0.0-beta15",
|
||||
"getkirby/cms": "<4.9|>=5,<5.4",
|
||||
"getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1",
|
||||
"getkirby/panel": "<2.5.14",
|
||||
|
|
@ -5706,6 +5789,7 @@
|
|||
"mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1",
|
||||
"mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7",
|
||||
"maximebf/debugbar": "<1.19",
|
||||
"mckenziearts/livewire-markdown-editor": "<1.3",
|
||||
"mdanter/ecc": "<2",
|
||||
"mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2",
|
||||
"mediawiki/cargo": "<3.8.3",
|
||||
|
|
@ -5749,6 +5833,7 @@
|
|||
"munkireport/softwareupdate": "<1.6",
|
||||
"mustache/mustache": ">=2,<2.14.1",
|
||||
"mwdelaney/wp-enable-svg": "<=0.2",
|
||||
"nabeel/phpvms": "<7.0.6",
|
||||
"namshi/jose": "<2.2",
|
||||
"nasirkhan/laravel-starter": "<11.11",
|
||||
"nategood/httpful": "<1",
|
||||
|
|
@ -5789,7 +5874,7 @@
|
|||
"open-web-analytics/open-web-analytics": "<1.8.1",
|
||||
"opencart/opencart": ">=0",
|
||||
"openid/php-openid": "<2.3",
|
||||
"openmage/magento-lts": "<20.17",
|
||||
"openmage/magento-lts": "<=20.17",
|
||||
"opensolutions/vimbadmin": "<=3.0.15",
|
||||
"opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1",
|
||||
"orchid/platform": ">=8,<14.43",
|
||||
|
|
@ -5838,7 +5923,7 @@
|
|||
"phpoffice/phpexcel": "<=1.8.2",
|
||||
"phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6",
|
||||
"phppgadmin/phppgadmin": "<=7.13",
|
||||
"phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51",
|
||||
"phpseclib/phpseclib": "<=2.0.53|>=3,<=3.0.51",
|
||||
"phpservermon/phpservermon": "<3.6",
|
||||
"phpsysinfo/phpsysinfo": "<3.4.3",
|
||||
"phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6",
|
||||
|
|
@ -5932,7 +6017,7 @@
|
|||
"shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev",
|
||||
"shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev",
|
||||
"shopxo/shopxo": "<=6.4",
|
||||
"showdoc/showdoc": "<2.10.4",
|
||||
"showdoc/showdoc": "<3.8.1",
|
||||
"shuchkin/simplexlsx": ">=1.0.12,<1.1.13",
|
||||
"silverstripe-australia/advancedreports": ">=1,<=2",
|
||||
"silverstripe/admin": "<1.13.19|>=2,<2.1.8",
|
||||
|
|
@ -6145,7 +6230,7 @@
|
|||
"webcoast/deferred-image-processing": "<1.0.2",
|
||||
"webklex/laravel-imap": "<5.3",
|
||||
"webklex/php-imap": "<5.3",
|
||||
"webonyx/graphql-php": "<=15.31.4",
|
||||
"webonyx/graphql-php": "<=15.32.2",
|
||||
"webpa/webpa": "<3.1.2",
|
||||
"webreinvent/vaahcms": "<=2.3.1",
|
||||
"wikibase/wikibase": "<=1.39.3",
|
||||
|
|
@ -6265,7 +6350,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-04-30T21:24:12+00:00"
|
||||
"time": "2026-05-05T21:24:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/diff",
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ declare(strict_types=1);
|
|||
|
||||
use Roots\WPConfig\Config;
|
||||
|
||||
use function base64_encode;
|
||||
use function Env\env;
|
||||
|
||||
Config::define('SAVEQUERIES', true);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ http:
|
|||
security:
|
||||
headers:
|
||||
accessControlAllowCredentials: true
|
||||
accessControlAllowHeaders: "content-type"
|
||||
accessControlAllowHeaders: "content-type,user-agent"
|
||||
accessControlAllowMethods:
|
||||
- GET
|
||||
- OPTIONS
|
||||
|
|
|
|||
9
docs/QUERIES.md
Normal 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%'"
|
||||
```
|
||||
|
|
@ -7179,7 +7179,7 @@
|
|||
"type": "array"
|
||||
},
|
||||
"workspace": {
|
||||
"default": "/home/gcch/Répertoires/git.gcch.fr/gcch/haiku-atelier-2024",
|
||||
"default": "/home/gcch/Répertoires/git.gcch.fr/haiku-atelier-2024",
|
||||
"description": "The workspace directory from which to start scanning.\n\nDefaults to the current working directory.",
|
||||
"type": "string"
|
||||
}
|
||||
|
|
@ -8297,7 +8297,7 @@
|
|||
},
|
||||
"includes": [],
|
||||
"paths": [],
|
||||
"workspace": "/home/gcch/Répertoires/git.gcch.fr/gcch/haiku-atelier-2024"
|
||||
"workspace": "/home/gcch/Répertoires/git.gcch.fr/haiku-atelier-2024"
|
||||
},
|
||||
"description": "Source discovery and workspace configuration.\n\nDefines the workspace root, source paths to scan, and exclusion patterns.\nThis configuration determines which PHP files are loaded into the database\nfor analysis, linting, or formatting."
|
||||
},
|
||||
|
|
@ -8309,7 +8309,7 @@
|
|||
"type": "integer"
|
||||
},
|
||||
"threads": {
|
||||
"default": 12,
|
||||
"default": 4,
|
||||
"description": "Number of worker threads for parallel processing.\n\nControls the thread pool size used by Rayon for parallel operations.\nIf set to 0, defaults to the number of logical CPUs available.\nCan be overridden via `MAGO_THREADS` environment variable or `--threads` CLI flag.",
|
||||
"format": "uint",
|
||||
"minimum": 0,
|
||||
|
|
|
|||
234
mise.lock
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
# @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.9.0"
|
||||
backend = "github:endevco/aube"
|
||||
|
||||
[tools.aube."platforms.linux-arm64"]
|
||||
checksum = "sha256:218559ad1bc0335689b0bf94217dec53147e6819b514cd1edca2b25578a9eb71"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-unknown-linux-gnu.tar.gz"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878187"
|
||||
provenance = "github-attestations"
|
||||
|
||||
[tools.aube."platforms.linux-arm64-musl"]
|
||||
checksum = "sha256:6a635d407637d94ef2aba1cfd8f36189b88d3703080a788fe3e36cf628d91049"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-unknown-linux-musl.tar.gz"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412876816"
|
||||
provenance = "github-attestations"
|
||||
|
||||
[tools.aube."platforms.linux-x64"]
|
||||
checksum = "sha256:f27e4ecdd5669e76d2d1f7be69ca29e0ba0a8943b71172e5f7b785ab9a5c5132"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-unknown-linux-gnu.tar.gz"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412877756"
|
||||
|
||||
[tools.aube."platforms.linux-x64-musl"]
|
||||
checksum = "sha256:6245a25dab1903d76222edc493f5c908b6fc52cac1dc591a3e1760b066af5c6b"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-unknown-linux-musl.tar.gz"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878508"
|
||||
provenance = "github-attestations"
|
||||
|
||||
[tools.aube."platforms.macos-arm64"]
|
||||
checksum = "sha256:7d85ecf1af62b65fd6ea386057f63808b5a1e18bd1201851a24619dc5cf337b0"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-aarch64-apple-darwin.tar.gz"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412878487"
|
||||
provenance = "github-attestations"
|
||||
|
||||
[tools.aube."platforms.windows-x64"]
|
||||
checksum = "sha256:79df31772c03cb22407dacdef59a3abed74d76fae20587c9f96f4b972a47eba4"
|
||||
url = "https://github.com/endevco/aube/releases/download/v1.9.0/aube-v1.9.0-x86_64-pc-windows-msvc.zip"
|
||||
url_api = "https://api.github.com/repos/endevco/aube/releases/assets/412888080"
|
||||
provenance = "github-attestations"
|
||||
|
||||
[[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 = "26.0.0"
|
||||
backend = "core:node"
|
||||
|
||||
[tools.node."platforms.linux-arm64"]
|
||||
checksum = "sha256:c802664b5770102999efacf5717854f7652797db522e8cc5727a6209afea824d"
|
||||
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-linux-arm64.tar.gz"
|
||||
|
||||
[tools.node."platforms.linux-arm64-musl"]
|
||||
checksum = "sha256:8c374da2f289493f346ed7d68143967e4e536a38cf7e5aa7d3933146253193b1"
|
||||
url = "https://unofficial-builds.nodejs.org/download/release/v26.0.0/node-v26.0.0-linux-arm64-musl.tar.gz"
|
||||
|
||||
[tools.node."platforms.linux-x64"]
|
||||
checksum = "sha256:42cee4d7ec80b7f7c89281cf00726b14840ac674462404dd4fd36f03964dc0af"
|
||||
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-linux-x64.tar.gz"
|
||||
|
||||
[tools.node."platforms.linux-x64-musl"]
|
||||
checksum = "sha256:333c376e342e5e5c0505f19eaab4990cc03f47a15dd5628c30fe64c39048b995"
|
||||
url = "https://unofficial-builds.nodejs.org/download/release/v26.0.0/node-v26.0.0-linux-x64-musl.tar.gz"
|
||||
|
||||
[tools.node."platforms.macos-arm64"]
|
||||
checksum = "sha256:dcee8564c1a9342f9594dd5e52d533894dfef6b85aa771bbbb870baa3c403235"
|
||||
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-darwin-arm64.tar.gz"
|
||||
|
||||
[tools.node."platforms.macos-x64"]
|
||||
checksum = "sha256:f488ab543fe202d8a2d56e661682117d3c56903a2bf64f2ec1ff7bd421cfd875"
|
||||
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.0-darwin-x64.tar.gz"
|
||||
|
||||
[tools.node."platforms.windows-x64"]
|
||||
checksum = "sha256:d0418640a36096e00bddb57761aa0b1b98f91904ec4ed2b9dd75cbad723becd7"
|
||||
url = "https://nodejs.org/dist/v26.0.0/node-v26.0.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"
|
||||
44
mise.toml
|
|
@ -1,2 +1,44 @@
|
|||
[tools]
|
||||
"github:AJenbo/phpantom_lsp" = "latest"
|
||||
aube = "latest"
|
||||
just = "latest"
|
||||
mago = "latest"
|
||||
node = "latest"
|
||||
watchexec = "latest"
|
||||
"aqua:blopker/codebook" = "latest"
|
||||
"aqua:numtide/treefmt" = "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"
|
||||
|
|
|
|||
25
package.json
|
|
@ -12,10 +12,11 @@
|
|||
"prepare": "effect-tsgo patch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@effect/platform-browser": "^4.0.0-beta.60",
|
||||
"@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,30 +26,30 @@
|
|||
"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",
|
||||
"caniuse-lite": "^1.0.30001791",
|
||||
"caniuse-lite": "^1.0.30001792",
|
||||
"eslint": "^10.3.0",
|
||||
"eslint-plugin-functional": "^9.0.4",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"eslint-plugin-oxlint": "^1.62.0",
|
||||
"eslint-plugin-oxlint": "^1.63.0",
|
||||
"eslint-plugin-perfectionist": "^5.9.0",
|
||||
"fdir": "^6.5.0",
|
||||
"globals": "^17.6",
|
||||
"jiti": "^2.6.1",
|
||||
"globals": "17",
|
||||
"jiti": "^2.7.0",
|
||||
"knip": "^6.11.0",
|
||||
"lightningcss": "^1.32.0",
|
||||
"lightningcss-cli": "^1.32.0",
|
||||
"oxlint": "^1.62.0",
|
||||
"oxlint": "^1.63.0",
|
||||
"oxlint-tsgolint": "^0.22.1",
|
||||
"playwright": "^1.59.1",
|
||||
"prettier": "^3.8.3",
|
||||
|
|
@ -59,14 +60,14 @@
|
|||
"prettier-plugin-sh": "^0.18.1",
|
||||
"prettier-plugin-sort-json": "^4.2.0",
|
||||
"sass-embedded": "^1.99.0",
|
||||
"stylelint": "^17.9.1",
|
||||
"stylelint": "^17.11.0",
|
||||
"stylelint-config-clean-order": "^8.0.1",
|
||||
"stylelint-config-sass-guidelines": "^13.0.0",
|
||||
"stylelint-config-standard-scss": "^17.0.0",
|
||||
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
|
||||
"stylelint-plugin-logical-css": "^2.1.0",
|
||||
"typescript": "^6.0.3",
|
||||
"typescript-eslint": "^8.59.1",
|
||||
"typescript-eslint": "^8.59.2",
|
||||
"vite": "^8.0.10",
|
||||
"vite-tsconfig-paths": "^6.1.1"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
#!/usr/bin/fish
|
||||
|
||||
for jpg in **/*.{jpg,jpeg}
|
||||
echo $jpg
|
||||
|
||||
set -f avif (path change-extension 'avif' "$jpg")
|
||||
set -f jxl (path change-extension 'jxl' "$jpg")
|
||||
set -f png (path change-extension 'png' "$jpg")
|
||||
|
||||
set -f dimensions (magick identify -format "%w-%h" $jpg)
|
||||
set -f dimensions (string split "-" $dimensions)
|
||||
|
||||
if test $dimensions[1] -eq 1920 || test $dimensions[2] -eq 1920
|
||||
set -f a_bonnes_dimensions true
|
||||
else
|
||||
set -f a_bonnes_dimensions false
|
||||
end
|
||||
|
||||
if test -e $avif && test -e $jxl
|
||||
echo -e "\tAll there."
|
||||
continue
|
||||
end
|
||||
|
||||
magick "$jpg" -resize 1920x1920\> "$png" >/dev/null
|
||||
|
||||
if ! test -e $jxl
|
||||
if test $a_bonnes_dimensions = false
|
||||
cjxl \
|
||||
--allow_jpeg_reconstruction=1 \
|
||||
--brotli_effort=11 \
|
||||
--container=1 \
|
||||
--effort=9 \
|
||||
--lossless_jpeg=1 \
|
||||
--num_threads=-1 \
|
||||
--progressive \
|
||||
$png $jxl &>/dev/null
|
||||
|
||||
djxl \
|
||||
--num_threads=-1 \
|
||||
$jxl $jpg &>/dev/null
|
||||
end
|
||||
|
||||
cjxl \
|
||||
--allow_jpeg_reconstruction=0 \
|
||||
--brotli_effort=11 \
|
||||
--container=1 \
|
||||
--effort=10 \
|
||||
--quality=70 \
|
||||
--lossless_jpeg=0 \
|
||||
--num_threads=-1 \
|
||||
--progressive \
|
||||
$png $jxl &>/dev/null
|
||||
echo -e "\t$jxl"
|
||||
|
||||
set -f avif (path change-extension 'avif' "$jpg")
|
||||
if ! test -e $avif
|
||||
avifenc \
|
||||
-q 70 \
|
||||
-s 0 \
|
||||
-c aom \
|
||||
-y 420 \
|
||||
"$png" "$avif" &>/dev/null
|
||||
echo -e "\t$avif"
|
||||
end
|
||||
|
||||
rm $png
|
||||
end
|
||||
end
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#!/usr/bin/fish
|
||||
|
||||
set -f fichiers_toml (fd --glob "*.toml")
|
||||
set -f fichiers_angie (fd --glob "*.conf" containers/conf/angie)
|
||||
|
||||
for toml in $fichiers_toml
|
||||
tombi format "$toml"
|
||||
end
|
||||
|
||||
for angie in $angie
|
||||
nginxfmt "$angie"
|
||||
end
|
||||
7
web/app/uploads/lol.fish → scripts/optimise-image.fish
Normal file → Executable file
|
|
@ -1,6 +1,11 @@
|
|||
#!/usr/bin/fish
|
||||
|
||||
set -f jpg $argv
|
||||
if test -z "$argv[1]"
|
||||
echo "Un chemin doit être passé en argument."
|
||||
return 1
|
||||
end
|
||||
|
||||
set -f jpg $argv[1]
|
||||
echo $jpg
|
||||
|
||||
set -f avif (path change-extension 'avif' "$jpg")
|
||||
23
scripts/optimise-images.fish
Executable file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/fish
|
||||
|
||||
if ! test $argv
|
||||
set -f argv web/app/uploads
|
||||
end
|
||||
|
||||
if type --query gm
|
||||
else
|
||||
echo -e "GraphicsMagick is missing."
|
||||
exit 1
|
||||
end
|
||||
if type --query cjxl
|
||||
else
|
||||
echo -e "A JPEGXL encoder (cjxl) is missing."
|
||||
exit 1
|
||||
end
|
||||
if type --query avifenc
|
||||
else
|
||||
echo -e "An AVIF encoder (avifenc) is missing."
|
||||
exit 1
|
||||
end
|
||||
|
||||
fd --glob "**/*.{jpg,jpeg}" $argv[1] -x fish "scripts/optimise-image.fish"
|
||||
|
|
@ -1,45 +0,0 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
require_once 'web/wp/wp-load.php';
|
||||
|
||||
ini_set('max_execution_time', 3_600);
|
||||
set_time_limit(3_600);
|
||||
|
||||
$pdo = new PDO('mysql:dbname=haiku_atelier;host=localhost', 'haiku_utilisateur', 'spNFx5EAYwvF7o7XFMjiHpNPYJimDtmKWv');
|
||||
|
||||
// replace _wp_attached_file meta_key
|
||||
global $wpdb;
|
||||
$wp_postmeta = "{$wpdb->prefix}postmeta";
|
||||
|
||||
try {
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
// Error Handling
|
||||
$sql = "UPDATE {$wp_postmeta} SET meta_value = REPLACE(meta_value,'-scaled.jpg','.jpg') WHERE meta_key='_wp_attached_file' AND meta_value LIKE '%-scaled.jpg%'";
|
||||
$result = $pdo->exec($sql);
|
||||
print_r($result);
|
||||
} catch (PDOException $e) {
|
||||
print_r($e->getMessage());
|
||||
}
|
||||
|
||||
// replace _wp_attachment_metadata meta_key.
|
||||
$image_metas = [];
|
||||
|
||||
try {
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
// Error Handling
|
||||
$sql = "SELECT * FROM {$wp_postmeta} WHERE meta_value LIKE '%-scaled.jpg%' AND meta_key='_wp_attachment_metadata'";
|
||||
$statement = $pdo->query($sql);
|
||||
$image_metas = $statement->fetchAll();
|
||||
foreach ($image_metas as $meta) {
|
||||
$meta_value = unserialize($meta['meta_value']);
|
||||
$file = $meta_value['file'];
|
||||
$meta_value['file'] = str_replace('-scaled.jpg', '.jpg', $file);
|
||||
update_post_meta($meta['post_id'], $meta['meta_key'], $meta_value);
|
||||
$result = get_post_meta($meta['post_id'], $meta['meta_key']);
|
||||
print_r($result);
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
print_r($e->getMessage());
|
||||
}
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
{
|
||||
"diagnosticSeverity": {
|
||||
"anyUnknownInErrorContext": "error",
|
||||
"asyncFunction": "warning",
|
||||
"asyncFunction": "off",
|
||||
"catchAllToMapError": "error",
|
||||
"catchUnfailableEffect": "error",
|
||||
"classSelfMismatch": "error",
|
||||
|
|
|
|||
|
|
@ -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"}
|
||||
|
|
@ -1,115 +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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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)}}
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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}
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -1 +0,0 @@
|
|||
#page-boutique .actions{text-align:center;align-content:center;width:100%}#page-boutique .actions button{padding:var(--espace-xl) 0}
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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}}
|
||||
|
|
@ -1,445 +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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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 */
|
||||
|
|
@ -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"}
|
||||
|
|
@ -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}}
|
||||
|
|
@ -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;
|
||||
|
|
@ -64,8 +65,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.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
import { Console, Layer } from "effect";
|
||||
import { FetchHttpClient } from "effect/unstable/http";
|
||||
import { OtlpSerialization, OtlpTracer } from "effect/unstable/observability";
|
||||
|
||||
const OtlpTracingLayer = OtlpTracer.layer({
|
||||
resource: {
|
||||
attributes: {
|
||||
"deployment.environment": "staging",
|
||||
},
|
||||
serviceName: "haiku-atelier",
|
||||
serviceVersion: "1.0.0",
|
||||
},
|
||||
maxBatchSize: 1,
|
||||
exportInterval: "1 seconds",
|
||||
url: "https://jaeger-http.gcch.local/v1/traces",
|
||||
});
|
||||
|
||||
const ObservabilityLayer = OtlpTracingLayer.pipe(
|
||||
Layer.provide(OtlpSerialization.layerJson),
|
||||
Layer.provide(FetchHttpClient.layer),
|
||||
Layer.tapError(Console.error),
|
||||
);
|
||||
|
||||
export { ObservabilityLayer };
|
||||
|
|
@ -30,10 +30,10 @@ class Product extends Schema.Class<Product>("Product")({
|
|||
grouped_products: Schema.Unknown,
|
||||
has_options: Schema.Boolean,
|
||||
id: Schema.Int,
|
||||
// NOTE: Non-standard, injecté dans la Réponse.
|
||||
image_repos: Schema.String,
|
||||
// NOTE: Non-standard, injecté dans la Réponse.
|
||||
image_survol: Schema.String,
|
||||
// NOTE: Non-standard, injecté dans la Réponse. Optionelle pour éviter une erreur si une image est absente.
|
||||
image_repos: Schema.String.pipe(Schema.optional),
|
||||
// NOTE: Non-standard, injecté dans la Réponse. Optionelle pour éviter une erreur si une image est absente.
|
||||
image_survol: Schema.String.pipe(Schema.optional),
|
||||
images: Schema.Unknown,
|
||||
low_stock_amount: Schema.Union([Schema.Number, Schema.Null]),
|
||||
menu_order: Schema.Int,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
||||
|
||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||
import { ObservabilityLayer } from "../../scripts-effect/lib/observability.ts";
|
||||
import ShopPageDOM from "./service-dom.ts";
|
||||
import ShopPageElements from "./service-elements.ts";
|
||||
import ShopPageMessages from "./service-messages.ts";
|
||||
|
|
@ -11,6 +12,7 @@ const ShopPageRuntime = ManagedRuntime.make(
|
|||
Layer.provideMerge(ShopPageMessages.Live),
|
||||
Layer.provideMerge(ShopPageElements.Live),
|
||||
Layer.provide(APIClient.Live),
|
||||
Layer.provideMerge(ObservabilityLayer),
|
||||
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error.message)),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,18 +1,8 @@
|
|||
import {
|
||||
Array as FxArray,
|
||||
Context,
|
||||
Effect,
|
||||
Layer,
|
||||
Option,
|
||||
pipe,
|
||||
Ref,
|
||||
Schema,
|
||||
SchemaIssue,
|
||||
Stream,
|
||||
SubscriptionRef,
|
||||
} from "effect";
|
||||
import { Array as FxArray, Context, Effect, Layer, Option, pipe, Ref, Schema, SchemaIssue, Stream, SubscriptionRef } from "effect";
|
||||
import { SchemaError } from "effect/Schema";
|
||||
import html from "html-template-tag";
|
||||
|
||||
import { BrowserRuntime } from "@effect/platform-browser";
|
||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||
import { setLoadingState } from "../../scripts-effect/lib/elements.ts";
|
||||
import { GetProducts, Product } from "../../scripts-effect/schemas/api.ts";
|
||||
|
|
@ -47,27 +37,24 @@ class InvalidShopPageStateError
|
|||
class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/ShopPageDOM", {
|
||||
make: Effect.gen(function*() {
|
||||
const { PageStatesRawJson, ProductsGrid, ShowMoreButton } = yield* ShopPageElements;
|
||||
const { ShowMoreButtonText } = yield* ShopPageMessages;
|
||||
const { ShowMoreButtonText, PageNumber } = yield* ShopPageMessages;
|
||||
const API = yield* APIClient;
|
||||
|
||||
const { authString, nonce } = yield* pipe(
|
||||
// Récupère la valeur de `Nonce` dans le DOM de la page.
|
||||
const { nonce } = yield* pipe(
|
||||
PageStatesRawJson.textContent,
|
||||
(textContent: string) =>
|
||||
Schema.decodeUnknownEffect(Schema.fromJsonString(PageStates))(textContent, { errors: "all" }),
|
||||
Effect.mapError(InvalidShopPageStateError.fromSchemaError),
|
||||
Effect.mapError(error => InvalidShopPageStateError.fromSchemaError(error)),
|
||||
);
|
||||
|
||||
/** ID de la Catégorie des Produits de la Page, si la Page courante est une Archive. */
|
||||
const ProductsCategoryId = yield* pipe(
|
||||
ProductsGrid.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS),
|
||||
Number,
|
||||
Option.fromNullishOr,
|
||||
Ref.make,
|
||||
Option.fromNullishOr(ProductsGrid.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS)),
|
||||
Option.map(categoryId => Number(categoryId)),
|
||||
categoryId => Ref.make(categoryId),
|
||||
);
|
||||
|
||||
// TODO: Créer une SubscriptionRef mettant à jour le DOM au changement de valeur.
|
||||
const PageNumber = yield* Ref.make(1);
|
||||
|
||||
/**
|
||||
* Créé le `DOM` d'une Carte de Produit sous forme de `<article>`.
|
||||
*/
|
||||
|
|
@ -118,7 +105,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
|||
|
||||
const onMoreProductsWantedHandler = Effect.fn("onMoreProductsWantedHandler")(function*() {
|
||||
/** Le numéro de page souhaitée. */
|
||||
const newPageNumber = yield* Ref.updateAndGet(PageNumber, pageNumber => pageNumber + 1);
|
||||
const newPageNumber = yield* SubscriptionRef.updateAndGet(PageNumber, pageNumber => pageNumber + 1);
|
||||
/** L'ID de la Catégorie de Produits affichée dans la page si elle existe. */
|
||||
const categoryId = pipe(yield* Ref.get(ProductsCategoryId), Option.getOrUndefined);
|
||||
|
||||
|
|
@ -133,6 +120,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
|||
yield* setLoadingState(ShowMoreButton, true);
|
||||
yield* SubscriptionRef.set(ShowMoreButtonText, "Getting Products...");
|
||||
|
||||
// TODO: Faire une gestion des Erreurs.
|
||||
const newProducts = yield* API.GetProducts(nonce, requestBody);
|
||||
|
||||
// Rétablis le texte du Bouton et réactive les interactions.
|
||||
|
|
@ -146,12 +134,12 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
|||
const newProductsFragment = createNewPageDOM(newProducts);
|
||||
ProductsGrid.append(newProductsFragment);
|
||||
ProductsGrid.setAttribute(ATTRIBUT_PAGE, String(newPageNumber));
|
||||
});
|
||||
}, Effect.withSpan("lol"));
|
||||
|
||||
/**
|
||||
* Initialise l'écouteur d'événements de clic sur le bouton de chargement d'une nouvelle page de Produits (« Show more »).
|
||||
*/
|
||||
const initMoreProductsOnButtonClick = Effect.fn("initMoreProductsOnButtonClick")(function*() {
|
||||
const initLoadMoreProductsOnButtonClick = Effect.fn("initLoadMoreProductsOnButtonClick")(function*() {
|
||||
return yield* pipe(
|
||||
Stream.fromEventListener(ShowMoreButton, "click"),
|
||||
Stream.tap(onMoreProductsWantedHandler),
|
||||
|
|
@ -161,7 +149,7 @@ class ShopPageDOM extends Context.Service<ShopPageDOM>()("haikuatelier.fr/Shop/S
|
|||
|
||||
return {
|
||||
ProductsCategoryId,
|
||||
initMoreProductsOnButtonClick,
|
||||
initLoadMoreProductsOnButtonClick,
|
||||
};
|
||||
}),
|
||||
}) {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
import { Context, Effect, Layer, pipe, Stream, SubscriptionRef } from "effect";
|
||||
|
||||
import { ATTRIBUT_PAGE } from "../constantes/dom.ts";
|
||||
import ShopPageElements from "./service-elements.ts";
|
||||
|
||||
class ShopPageMessages extends Context.Service<ShopPageMessages>()("haikuatelier.fr/Shop/Messages", {
|
||||
make: Effect.gen(function*() {
|
||||
const { ShowMoreButton } = yield* ShopPageElements;
|
||||
const { ShowMoreButton, ProductsGrid } = yield* ShopPageElements;
|
||||
|
||||
const ShowMoreButtonText = yield* SubscriptionRef.make("Show more");
|
||||
// Const ShowMoreErrorText = yield* SubscriptionRef.make<Option.Option<string>>(Option.none());
|
||||
const PageNumber = yield* SubscriptionRef.make(Number(ProductsGrid.getAttribute(ATTRIBUT_PAGE) ?? "1"));
|
||||
|
||||
const initShowMoreButtonUpdates = Effect.fn("initShowMoreButtonUpdates")(function*() {
|
||||
return yield* pipe(
|
||||
|
|
@ -20,7 +22,18 @@ class ShopPageMessages extends Context.Service<ShopPageMessages>()("haikuatelier
|
|||
);
|
||||
});
|
||||
|
||||
return { ShowMoreButtonText, initShowMoreButtonUpdates };
|
||||
const initPageNumberUpdates = Effect.fn("initPageNumberUpdates")(function*() {
|
||||
return yield* pipe(
|
||||
SubscriptionRef.changes(PageNumber),
|
||||
Stream.tap(newPageNumber => {
|
||||
ProductsGrid.setAttribute(ATTRIBUT_PAGE, String(newPageNumber));
|
||||
return Effect.succeed(newPageNumber);
|
||||
}),
|
||||
Stream.runDrain,
|
||||
);
|
||||
});
|
||||
|
||||
return { PageNumber, ShowMoreButtonText, initShowMoreButtonUpdates, initPageNumberUpdates };
|
||||
}),
|
||||
}) {
|
||||
static readonly Live = Layer.effect(this, this.make);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import { Console, Layer, ManagedRuntime, pipe } from "effect";
|
||||
|
||||
import { APIClient } from "../../scripts-effect/lib/api.ts";
|
||||
import { ObservabilityLayer } from "../../scripts-effect/lib/observability.ts";
|
||||
import ProductPageDOM from "./service-dom.ts";
|
||||
import ProductPageElements from "./service-elements.ts";
|
||||
import ProductPageMessages from "./service-messages.ts";
|
||||
|
|
@ -9,8 +10,9 @@ const ProductPageRuntime = ManagedRuntime.make(
|
|||
pipe(
|
||||
ProductPageDOM.Live,
|
||||
Layer.provideMerge(ProductPageMessages.Live),
|
||||
Layer.provide(ProductPageElements.Live),
|
||||
Layer.provideMerge(ProductPageElements.Live),
|
||||
Layer.provide(APIClient.Live),
|
||||
Layer.provideMerge(ObservabilityLayer),
|
||||
Layer.tapError(error => Console.error("ProductPageRuntime", "Impossible de créer le Layer :", error)),
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -2,21 +2,32 @@
|
|||
* Scripts pour les fonctionnalités de la page Boutique.
|
||||
*/
|
||||
|
||||
import { Console, Effect } from "effect";
|
||||
import { Console, Effect, pipe } from "effect";
|
||||
import ShopPageRuntime from "./page-boutique/runtime.ts";
|
||||
import ShopPageDOM from "./page-boutique/service-dom.ts";
|
||||
import ShopPageElements from "./page-boutique/service-elements.ts";
|
||||
import ShopPageMessages from "./page-boutique/service-messages.ts";
|
||||
|
||||
document.addEventListener("DOMContentLoaded", (): void => {
|
||||
// initialisePageBoutique();
|
||||
ShopPageRuntime.runFork(Effect.gen(function*() {
|
||||
const Elements = yield* ShopPageElements;
|
||||
const DOM = yield* ShopPageDOM;
|
||||
const Messages = yield* ShopPageMessages;
|
||||
// TODO: Implémenter l'Observabilité.
|
||||
|
||||
yield* Effect.all([DOM.initMoreProductsOnButtonClick(), Messages.initShowMoreButtonUpdates()], {
|
||||
concurrency: "unbounded",
|
||||
}).pipe(Effect.tapCause(Console.error));
|
||||
}));
|
||||
document.addEventListener("DOMContentLoaded", (): void => {
|
||||
const program = Effect.gen(function*() {
|
||||
const { initLoadMoreProductsOnButtonClick } = yield* ShopPageDOM;
|
||||
const { initShowMoreButtonUpdates, initPageNumberUpdates } = yield* ShopPageMessages;
|
||||
|
||||
yield* pipe(
|
||||
Effect.all([
|
||||
// Initialise le chargement d'une nouvelle page de Produits au clic sur le bouton « Show more ».
|
||||
initLoadMoreProductsOnButtonClick(),
|
||||
// Initialise la mise à jour du texte du bouton « Show more » à la mise à jour de sa référence.
|
||||
initShowMoreButtonUpdates(),
|
||||
// Initialise la mise à jour du numéro de page dans le DOM à la mise à jour de sa référence.
|
||||
initPageNumberUpdates(),
|
||||
], {
|
||||
concurrency: "unbounded",
|
||||
}),
|
||||
Effect.tapCause(Console.error),
|
||||
);
|
||||
});
|
||||
|
||||
ShopPageRuntime.runFork(program);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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 => {
|
||||
|
|
|
|||
|
|
@ -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 ? #}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 398 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 350 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 285 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 262 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 9 KiB |
|
Before Width: | Height: | Size: 306 KiB |
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 323 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1,001 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 457 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |