2024-10-03

This commit is contained in:
gcch 2024-10-03 22:12:40 +02:00
commit 7b90cf9d33
64 changed files with 518 additions and 281 deletions

View file

@ -108,14 +108,9 @@
/**
* 1. Utilise un meilleur modèle de boîte.
* 2. Rendu spécifique du texte pour Safari/iOS.
* 3. Rendu plus précis du texte.
*/
html {
box-sizing: border-box; /* 1 */
-webkit-font-smoothing: antialiased; /* 2 */
text-size-adjust: none; /* 2 */
text-rendering: geometricprecision; /* 3 */
}
/**
@ -161,9 +156,23 @@ textarea {
background: var(--couleur-jaune);
}
/**
* 2. Rendu spécifique du texte pour Safari/iOS.
* 3. Rendu plus précis du texte.
*/
html {
-webkit-font-smoothing: antialiased; /* 2 */
text-size-adjust: none; /* 2 */
text-rendering: geometricprecision; /* 3 */
}
body {
font: 1rem/1.4 Lato;
font-optical-sizing: auto;
font-kerning: normal;
font-variant-ligatures: common-ligatures no-discretionary-ligatures no-historical-ligatures contextual;
color: var(--couleur-noir);
text-decoration-skip-ink: auto;
letter-spacing: 0.5px;
}
@ -186,7 +195,6 @@ button.bouton-case-pleine {
}
button[disabled] {
cursor: not-allowed;
background: repeating-conic-gradient(var(--couleur-noir) 0% 25%, transparent 0% 100%) 1px 0.5px/2px 2px;
}
/**

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AChGJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AChBJ;AACE;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;ACtDF;EACE;EACA;EACA;;;AAGF;EACE;;;ACPF;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EAGA;;;AClBJ;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;ACbF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,kHAK4B;EAE9B;AAEA;AAMA;AAAA;AAAA;;AALA;EAEE;;AAMF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAMA;AAKA;;AAVA;EAEE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMJ;EACE;IACE;;;;AClER;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC5BxE;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAWA;;AATA;EACE;;AAEA;AAAA;EAEE;;AAKJ;EACE;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;IACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;ACvGR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOA;EACE;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAYA;AAAA;AAAA;AAAA;AAAA;;AATE;EACE;;AAIJ;EACE;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;;AAGF;EACE;;;ACrFR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EACA;AAEA;EACA;EACA;AAAA;AAAA;AAIA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;;AAMF;EACE;EACA;;;AC7CR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AC3FN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EAEA;EAGA;EACA;EAGA;EAEA;EACA;EACA;EACA;EACA;AAuGA;AAyGA;;AA9MA;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;;AASN;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;AAEA;AAMA;AAwCA;AAqBA;;AAlEA;EACE;EACA;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAeJ;EACE;;AAKJ;EACE;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;;AAEE;EACE;IACE;;;;AAQZ;EACE;IACE;;EAGF;IACE;;;AC3QJ;EACE;EACA;EACA;EACA,qBACE;EAEF;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7FZ;AAAA;AAAA;AAGA;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA","file":"main.css"}
{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA,KACE;;AChGJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AChBJ;AACE;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;ACjDF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;ACrBF;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;ACfJ;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;ACbF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,kHAK4B;EAE9B;AAEA;AAMA;AAAA;AAAA;;AALA;EAEE;;AAMF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAMA;AAKA;;AAVA;EAEE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMJ;EACE;IACE;;;;AClER;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC5BxE;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAWA;;AATA;EACE;;AAEA;AAAA;EAEE;;AAKJ;EACE;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;IACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;ACvGR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;AAEA;EACA;EACA;EAEA;EACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOA;EACE;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAYA;AAAA;AAAA;AAAA;AAAA;;AATE;EACE;;AAIJ;EACE;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;;AAGF;EACE;;;ACrFR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EACA;AAEA;EACA;EACA;AAAA;AAAA;AAIA;EACA;EAEA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;;AAMF;EACE;EACA;;;AC7CR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AC3FN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;AACE;EAEA;EAGA;EACA;EAGA;EAEA;EACA;EACA;EACA;EACA;AAuGA;AAyGA;;AA9MA;EACE;EACA;EACA;EACA;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;;AASN;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;AAEA;AAMA;AAwCA;AAqBA;;AAlEA;EACE;EACA;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAeJ;EACE;;AAKJ;EACE;EACA;EACA;AAEA;;AACA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;AAEA;;AAEE;EACE;IACE;;;;AAQZ;EACE;IACE;;EAGF;IACE;;;AC3QJ;EACE;EACA;EACA;EACA,qBACE;EAEF;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;;AC7FZ;AAAA;AAAA;AAGA;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA","file":"main.css"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -11,7 +11,7 @@
}
#panneau-panier .panneau__grille-produits__produit {
display: grid;
grid-template-columns: fit-content(100%) auto;
grid-template-columns: max-content auto;
grid-template-rows: 1fr;
border-bottom: 1px solid var(--couleur-noir);
}
@ -31,6 +31,7 @@
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 {
@ -55,18 +56,25 @@
font-weight: 500;
font-style: initial;
border: 1px solid var(--couleur-noir);
/* Bouton d'addition de quantité */
/**
* 1. Cache les flèches d'augmentation/diminution sur Firefox.
* 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari.
*/
/* Bouton de suppression de quantité */
/* Bouton de suppression du Produit du Panier */
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:disabled {
background: repeating-conic-gradient(var(--couleur-noir) 0% 25%, transparent 0% 100%) 1px 0.5px/2px 2px;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type {
grid-column: 1;
width: 3rem;
min-width: 3rem;
max-width: 3rem;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number] {
grid-column: 2;
width: 100%;
text-align: center;
appearance: textfield; /* 1 */
background: initial;
@ -80,7 +88,8 @@
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2) {
grid-column: 3;
width: 3rem;
min-width: 3rem;
max-width: 3rem;
}
#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type {
grid-column: span 3;
@ -154,7 +163,7 @@
}
#panneau-panier .panneau__instructions-code-promo {
width: 100%;
padding: var(--espace-l) 0;
padding: var(--espace-l) var(--espace-xl);
text-align: center;
border-bottom: 1px solid var(--couleur-noir);
/**
@ -165,6 +174,7 @@
#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);
@ -260,7 +270,8 @@
display: block;
}
#page-panier .panneau {
flex-basis: 50%;
flex: 1 1 30rem;
min-width: 30rem;
border-top: 1px solid var(--couleur-noir);
border-bottom: 1px solid var(--couleur-noir);
}

View file

@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;AAOA;AAAA;AAAA;AAAA;AAyBA;;AA9BA;EACE;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;IACA;;;AASZ;EACE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;AAgCA;AAAA;AAAA;;AA9BA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAQN;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AC5RN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;;AAGE;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAON;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA","file":"page-panier.css"}
{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;AAMA;AAOA;AAAA;AAAA;AAAA;AAqBA;AAOA;;AAvCA;EACE;;AAIF;EACE;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAKJ;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;IACA;;;AASZ;EACE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;AAgCA;AAAA;AAAA;;AA9BA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAQN;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACvSN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;;AAGE;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAON;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA","file":"page-panier.css"}

View file

@ -9,15 +9,15 @@
"name": "chunk-7BKSRZNG",
"integrity": "sha512-CM4zAemmzkH8eePsFpJsdTc4IE2wJMlJwIfivLBSAbYuwQjWAmOH28ZFnpki3QBlU1XqR3G7q+ph5etbxY47XA=="
},
"_exports.BNibT8R5.js": {
"file": "exports.BNibT8R5.js",
"_exports.CqgMoAXr.js": {
"file": "exports.CqgMoAXr.js",
"name": "exports",
"integrity": "sha512-cnJ9asFTTBn16nlJir9fEVx89P0ONlgU81/G7E/WOy1e/FGT5P7dOdJuw3XGK1+r0cMQZqs2d5N6HqUOGgUBVA=="
"integrity": "sha512-XxyyAYpiSluIP0+t/brf2yffq17Zbk+/sbhzC2WQvQTWgajgirbQ2pkyk4i58Q8p+ciXXWe99KLdEkOUJji/uQ=="
},
"_index.C9ScFdVV.js": {
"file": "index.C9ScFdVV.js",
"_index.DYThEupQ.js": {
"file": "index.DYThEupQ.js",
"name": "index",
"integrity": "sha512-6+iQXPHL5BUtZ6P2Qn4BQ2HuADyCmrRqhaCjODdUrT9RsyUsEYdXKVGdr4vK4lULTx2TRGuxN6wi5m+HaKihog=="
"integrity": "sha512-YB/pxNHmpqtWHQuX88NHi57DdNSq6aOY0IwMn35fe40p8xcrJpNu/ZKNmeXF4A8IvQUuglOKSQBl713X757LXA=="
},
"_index.Dxgx1GXj.js": {
"file": "index.Dxgx1GXj.js",
@ -29,14 +29,21 @@
"name": "api",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"isEntry": true,
"integrity": "sha512-ld0nEHk+UTouQa2rIsEGfWTdBegMl3fKv8S6MHRG7xkLDwXLk8687de2nZ1/2Fk6pLoKMa07zJc7qF2AayoQNQ=="
"integrity": "sha512-fXZJ7+9tXq8x1Kxsj5QAtAkAT4lRi6XIAy7ljUgw43ohufl/v+L7cVazgnFj0HW4E8WssdBS06CsOT2wNDoWxQ=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts": {
"file": "cart2.js",
"name": "cart",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts",
"isEntry": true,
"integrity": "sha512-roJIe6Iyb/xNOxK6106j4AaroobRK5AinfgpZbwJaGWgmU0pp0wHRGauEg1Jk4vp8OwVzUwcciYE0qxzKaWOcg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts": {
"file": "dom.js",
"name": "dom",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"isEntry": true,
"integrity": "sha512-YR8sQCH9oywG8bKZXi1E4mwI15m9IsC5yMwIO41beqOuQGuD7nZU1dZ2qrApcPtH/nh1uMPhNU7R/MB3BFZICA=="
"integrity": "sha512-VjPpL1wOUAMAz7urwl/GzLJzuadoG2FzM1W6YTdso4bRrCPlEUlpcuhKR69J9gzx0QODzq4ysfyg5Y++BiVkoA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts": {
"file": "messages3.js",
@ -53,9 +60,9 @@
"imports": [
"_chunk-7BKSRZNG.F4GWJRq9.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"_exports.BNibT8R5.js"
"_exports.CqgMoAXr.js"
],
"integrity": "sha512-XTh6W0Xs7w3dLOvTEsH34ngi8skKFWV/yMSp9iPnswMi+gju/mwerleCuqE93Mu6F++H7x3wt7snw4z8A732vQ=="
"integrity": "sha512-ohitJLXJZhKukclzCDCWNZx3di0Cyv/GN2yflb42AKk1F0aD3Cpr4JAOffrMVfepxl9EbQcZ7j/HXzVIo1JJkg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/api.ts": {
"file": "api.js",
@ -66,7 +73,7 @@
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"_Either.DDEPhGsy.js"
],
"integrity": "sha512-SqB8dgsNWcDfK+us02BHRxw+Ok3QkAMqt9Lo4G71Fy8mGhotbXfDpvPObdMvxaYEiDY4H+UXxzwSDKFlrQBXJg=="
"integrity": "sha512-/CWvVmojNPw3K8A73UNdUgl9hlQoy31If2QGEV4LH1YcBMjK9sq+hLG0BwhvtZL7FRftscB9x+pMNkl0b0kOlw=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts": {
"file": "dom2.js",
@ -77,9 +84,9 @@
"_chunk-7BKSRZNG.F4GWJRq9.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"_Either.DDEPhGsy.js",
"_exports.BNibT8R5.js"
"_exports.CqgMoAXr.js"
],
"integrity": "sha512-qrZ+WIkbmKsNYTJ2//onxS1HzLggo4qK7sRTk/Hst5izujybuIJpe+e7gPWa3yI8OCmt+g7hipt78oWL3Pf6+A=="
"integrity": "sha512-eyiNifBgU6+/1dX8+HRIEQsDgrKecsGqnNVys+tRg+ySNZ2/JQ6ojhrBXpLrOMrgyfBRbVOcwyDNrCi8zmoKfg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts": {
"file": "erreurs.js",
@ -87,9 +94,9 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"isEntry": true,
"imports": [
"_exports.BNibT8R5.js"
"_exports.CqgMoAXr.js"
],
"integrity": "sha512-JylcVjXlYn3U3P34joLUS3SnsE0BP4nuM7DtiJHIPCREaYSmqQpWV7Nd6+aOr9Bv5NEDRUphwHLF5DeffwW2Vw=="
"integrity": "sha512-SOjfas9+qR/lxLAZnwQng9sIPF2fotjXZQcsWJjir0R+PbOBgwAJBDDvqg7u4taogh7sYqDNmaO6y7VJD5OWEg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts": {
"file": "gardes.js",
@ -107,7 +114,7 @@
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"_Either.DDEPhGsy.js"
],
"integrity": "sha512-44H494vXGGg9FqI+hSj2UXzFd8TFAmpUIcQDCKXmcJ/0UaCj59/dWW/9wyJe1xzuoc9PQ3dLEcgN/hE04Y4cKg=="
"integrity": "sha512-uzokkOlud1oP8RUZJukWpDgdnF9oc42Ml9WEmjSLn1Oh5V5Ivmqt0L87xaG7ollvmeZl2zh2vq8NAMVK76Gw6Q=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts": {
"file": "messages.js",
@ -115,14 +122,14 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js",
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts",
"_Either.DDEPhGsy.js",
"_exports.BNibT8R5.js",
"_exports.CqgMoAXr.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts"
],
"integrity": "sha512-b9pltMriGAcDypqE6hQDZ67XSFtZLp2GhS64H/7PCraBqpD3KKqxErPWvVlsy0u5JoT7tAh233kSnFNWZ7BcBg=="
"integrity": "sha512-EkBKXyL40Fqjvr2uiJZ2fM69xSS62wQl7PeiXNO0YYQfFS4M5RPNHbL3e9LiCDtiS603nEt0xmmdgM9puPm6LQ=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts": {
"file": "reseau.js",
@ -132,7 +139,7 @@
"imports": [
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts"
],
"integrity": "sha512-Nt9jnR9hXjtYxufmQp1G6MOoNnuWh4HtgiSt8LHlF8rOF+XZ89of+KUQvvfksxcgJ7W8tKYxDs68B7ebaGTCtw=="
"integrity": "sha512-HuOriKv5d+WCfiqyqum3vpqL+XkipWqsc3GNfpkDOM3M0wLDO1Xte5bCnHi6+uz+kVmdJ35Uutwmq/XdNqvKJA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts": {
"file": "cart-add-item.js",
@ -140,9 +147,9 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-add-item.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js"
"_index.DYThEupQ.js"
],
"integrity": "sha512-aj77TJ3YhBCfWuPdIrU4cP5/jjOGUskdCvUjdF1z9UgKnCKfKjQcV9829AfPDlJj43pd8hmZBvBa6RIcRDGuVg=="
"integrity": "sha512-365FeQBpvYEubs1gJc79ZXpUC6IxhJlX+DJ6WqiRoPNyql5LerPTJDpysYTm6KBsOmdzelGu+Zg7SinXMocjJw=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts": {
"file": "cart-remove-item.js",
@ -150,9 +157,19 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js"
"_index.DYThEupQ.js"
],
"integrity": "sha512-ksb8zxVH1SqC+HlC+Y5LUNYI2CZTpLyc1K8akl8dpH8IlVeGcmtVAL+oJyuZ3I6wOzxpTicKj0LmzP5YT2KiwQ=="
"integrity": "sha512-4JJBzzYFadk5CHLyQhZorkeHBAsxIJ3YaZzy05DRgKAgydL0e2jVT88tDytYLlug2cD/mpm0uLAjFNC6sa+Pfg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-update-item.ts": {
"file": "cart-update-item.js",
"name": "cart-update-item",
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-update-item.ts",
"isEntry": true,
"imports": [
"_index.DYThEupQ.js"
],
"integrity": "sha512-Qoua2eltUFTq2zRWsJ3ZRVLgag445wi+zln0NBR8TUEDKc65i3V3UtqEDYdLIQrfbbX9I52hqARFMF+p5ZmcWA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts": {
"file": "cart.js",
@ -160,9 +177,10 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js"
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts"
],
"integrity": "sha512-2CHat7wLZuNa2589dZpLckXxQhNo8YzMFBBbiBpRqaDgDyps8Y8hnwOwlo/gf2blPV8lhkQMaVzn3RM14TIeoA=="
"integrity": "sha512-FbUsUIeh9rOMEOuoD3qN0pBJ4apA8fjdN1MMdB64zk/JHS4vAA05/wA6bz5KqtKnps+jjloJ4K4/JzthGbsSGQ=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts": {
"file": "erreurs2.js",
@ -170,9 +188,9 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js"
"_index.DYThEupQ.js"
],
"integrity": "sha512-eI8yOqOBdmtFY3SAR+IWBaj7FhNuKDpbrAg1K8OKl5QlrU+m78xejcTpDt8+FqTdXTDS2LY2EySpDuBT8kBfng=="
"integrity": "sha512-y8NNRe15U9yhgtXjcaes5VIX6c1pEK+iy2xwr7dFN9THegA0KdMng7+yflWcpU3jp26pie/sACB8nUGnB+g1LA=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts": {
"file": "messages2.js",
@ -180,10 +198,10 @@
"src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts",
"isEntry": true,
"imports": [
"_index.C9ScFdVV.js",
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts"
],
"integrity": "sha512-xXCa4oCcnuvDew93KLXCOvVh1JN4vgCS5AeP1fhgbu97RH98rWl1/MQF8+c5YedTtvKQNfeId5LfQM4uCCcHew=="
"integrity": "sha512-XV6A0HF58T6U5DT/i7pRM2UnieWXQfeEpGdTVVuYrqoFuk5gwuIpFcdSbQeP+3pZmAW1RmAtu8aPqFUn64U7Rw=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts": {
"file": "utils.js",
@ -194,10 +212,10 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts",
"_chunk-7BKSRZNG.F4GWJRq9.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"_exports.BNibT8R5.js",
"_exports.CqgMoAXr.js",
"_Either.DDEPhGsy.js"
],
"integrity": "sha512-yN0a8PmVmEmLg4ULsJDr9zEzH9JnozImw4wnopOueDzl5yN6xrm+GBcT/dgYH8jdpmQ1GYtTKvCrsIcB0zHyLA=="
"integrity": "sha512-7JdNqUHZ73wDUf4iPpqqv8sG0fLn3lfANO7U5vct4AC6Ywg5kYQwwozfWxbfqrwPswZdVbkDI4oimTH9A7CObg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": {
"file": "scripts-bouton-panier.js",
@ -212,12 +230,12 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts",
"_exports.BNibT8R5.js",
"_exports.CqgMoAXr.js",
"_Either.DDEPhGsy.js",
"_index.C9ScFdVV.js",
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts"
],
"integrity": "sha512-oL/TP1nUTL2L0Cd8s+1q8U47Xyx4J2x2HpvlNx9l5155QpKD/ppBrXhngffiXe+GjC6iv+Rytfa+kMCMaauzPw=="
"integrity": "sha512-LuFgM+BdYCb8YV6hv0fhV2aaihNjoUfqER3NeB3ZMKmAtNvlGB2pSvM2hm4FonQqWbMWUfD6bAUSIjjZuCwFRg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": {
"file": "scripts-page-panier.js",
@ -227,7 +245,7 @@
"imports": [
"_index.Dxgx1GXj.js",
"_chunk-7BKSRZNG.F4GWJRq9.js",
"_index.C9ScFdVV.js",
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts",
@ -237,14 +255,16 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-remove-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart-update-item.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/cart.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"_Either.DDEPhGsy.js",
"_exports.BNibT8R5.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts"
"_exports.CqgMoAXr.js",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts"
],
"integrity": "sha512-21LRx7In3xsKuO6+J+UAlwL/NphWXhHdwa+J3rA0te4UJIi2MSleiFiqHk/fXytM6+dfalEzwuBuASeF1glbRQ=="
"integrity": "sha512-J8hoZecxicG126OsyOzrGPDEWEXDxxBjpFGMox6IkAoLYk1HViBN/K4ytL1qN4SKEIxCNsrrBuJpmJZWOXqZdg=="
},
"web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": {
"file": "scripts-page-produit.js",
@ -254,7 +274,7 @@
"imports": [
"_index.Dxgx1GXj.js",
"_chunk-7BKSRZNG.F4GWJRq9.js",
"_index.C9ScFdVV.js",
"_index.DYThEupQ.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts",
@ -266,8 +286,9 @@
"web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/erreurs.ts",
"web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts",
"_Either.DDEPhGsy.js",
"_exports.BNibT8R5.js"
"_exports.CqgMoAXr.js",
"web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts"
],
"integrity": "sha512-a87nfnaiYWWa/g6YZEHRbQ8vx0xM1EhhiOoIkZTUcl3CEyJtRM5hsIA2FkxgsVcRO2w3FrSKHRuZF4jOmx01EQ=="
"integrity": "sha512-g5gLgWCP/xWo+sMHO9g/uc9IljaUZqkN2rvUakwBKPGUSBGK7Qj+BF3lpjvzXjMMei1iK5rhkK3OfbB97z0KWQ=="
}
}

View file

@ -1,3 +1,3 @@
import{d as R}from"./api2.js";import{r as F}from"./Either.DDEPhGsy.js";const H="application/json",S="Content-Type",y=Symbol(),w=Symbol();function C(t={}){var e;return(e=Object.entries(t).find(([o])=>o.toLowerCase()===S.toLowerCase()))===null||e===void 0?void 0:e[1]}function P(t){return/^application\/.*json.*/.test(t)}const u=function(t,e,o=!1){return Object.entries(e).reduce((c,[i,l])=>{const f=t[i];return Array.isArray(f)&&Array.isArray(l)?c[i]=o?[...f,...l]:l:typeof f=="object"&&typeof l=="object"?c[i]=u(f,l,o):c[i]=l,c},{...t})},g={options:{},errorType:"text",polyfills:{},polyfill(t,e=!0,o=!1,...c){const i=this.polyfills[t]||(typeof self<"u"?self[t]:null)||(typeof global<"u"?global[t]:null);if(e&&!i)throw new Error(t+" is not defined");return o&&i?new i(...c):i}};function L(t,e=!1){g.options=e?t:u(g.options,t)}function N(t,e=!1){g.polyfills=e?t:u(g.polyfills,t)}function I(t){g.errorType=t}const J=t=>e=>t.reduceRight((o,c)=>c(o),e)||e;class x extends Error{}const U=t=>{const e=Object.create(null);t=t._addons.reduce((r,s)=>s.beforeRequest&&s.beforeRequest(r,t._options,e)||r,t);const{_url:o,_options:c,_config:i,_catchers:l,_resolvers:f,_middlewares:m,_addons:E}=t,d=new Map(l),D=u(i.options,c);let j=o;const v=J(m)((r,s)=>(j=r,i.polyfill("fetch")(r,s)))(o,D),b=new Error,A=v.catch(r=>{throw{[y]:r}}).then(r=>{var s;if(!r.ok){const n=new x;if(n.cause=b,n.stack=n.stack+`
import{e as R}from"./api2.js";import{r as F}from"./Either.DDEPhGsy.js";const H="application/json",S="Content-Type",y=Symbol(),w=Symbol();function C(t={}){var e;return(e=Object.entries(t).find(([o])=>o.toLowerCase()===S.toLowerCase()))===null||e===void 0?void 0:e[1]}function P(t){return/^application\/.*json.*/.test(t)}const u=function(t,e,o=!1){return Object.entries(e).reduce((c,[i,l])=>{const f=t[i];return Array.isArray(f)&&Array.isArray(l)?c[i]=o?[...f,...l]:l:typeof f=="object"&&typeof l=="object"?c[i]=u(f,l,o):c[i]=l,c},{...t})},g={options:{},errorType:"text",polyfills:{},polyfill(t,e=!0,o=!1,...c){const i=this.polyfills[t]||(typeof self<"u"?self[t]:null)||(typeof global<"u"?global[t]:null);if(e&&!i)throw new Error(t+" is not defined");return o&&i?new i(...c):i}};function L(t,e=!1){g.options=e?t:u(g.options,t)}function N(t,e=!1){g.polyfills=e?t:u(g.polyfills,t)}function I(t){g.errorType=t}const J=t=>e=>t.reduceRight((o,c)=>c(o),e)||e;class x extends Error{}const U=t=>{const e=Object.create(null);t=t._addons.reduce((r,s)=>s.beforeRequest&&s.beforeRequest(r,t._options,e)||r,t);const{_url:o,_options:c,_config:i,_catchers:l,_resolvers:f,_middlewares:m,_addons:E}=t,d=new Map(l),D=u(i.options,c);let j=o;const v=J(m)((r,s)=>(j=r,i.polyfill("fetch")(r,s)))(o,D),b=new Error,A=v.catch(r=>{throw{[y]:r}}).then(r=>{var s;if(!r.ok){const n=new x;if(n.cause=b,n.stack=n.stack+`
CAUSE: `+b.stack,n.response=r,n.status=r.status,n.url=j,r.type==="opaque")throw n;const a=i.errorType==="json"||((s=r.headers.get("Content-Type"))===null||s===void 0?void 0:s.split(";")[0])==="application/json";return(i.errorType?a?r.text():r[i.errorType]():Promise.resolve(r.body)).then(h=>{throw n.message=typeof h=="string"?h:r.statusText,h&&(a&&typeof h=="string"?(n.text=h,n.json=JSON.parse(h)):n[i.errorType]=h),n})}return r}),O=r=>r.catch(s=>{const n=Object.prototype.hasOwnProperty.call(s,y),a=n?s[y]:s,T=a?.status&&d.get(a.status)||d.get(a?.name)||n&&d.has(y)&&d.get(y);if(T)return T(a,t);const h=d.get(w);if(h)return h(a,t);throw a}),_=r=>s=>O(r?A.then(n=>n&&n[r]()).then(n=>s?s(n):n):A.then(n=>s?s(n):n)),M={_wretchReq:t,_fetchReq:v,_sharedState:e,res:_(null),json:_("json"),blob:_("blob"),formData:_("formData"),arrayBuffer:_("arrayBuffer"),text:_("text"),error(r,s){return d.set(r,s),this},badRequest(r){return this.error(400,r)},unauthorized(r){return this.error(401,r)},forbidden(r){return this.error(403,r)},notFound(r){return this.error(404,r)},timeout(r){return this.error(408,r)},internalError(r){return this.error(500,r)},fetchError(r){return this.error(y,r)}},q=E.reduce((r,s)=>({...r,...typeof s.resolver=="function"?s.resolver(r):s.resolver}),M);return f.reduce((r,s)=>s(r,t),q)},k={_url:"",_options:{},_config:g,_catchers:new Map,_resolvers:[],_deferred:[],_middlewares:[],_addons:[],addon(t){return{...this,_addons:[...this._addons,t],...t.wretch}},errorType(t){return{...this,_config:{...this._config,errorType:t}}},polyfills(t,e=!1){return{...this,_config:{...this._config,polyfills:e?t:u(this._config.polyfills,t)}}},url(t,e=!1){if(e)return{...this,_url:t};const o=this._url.split("?");return{...this,_url:o.length>1?o[0]+t+"?"+o[1]:this._url+t}},options(t,e=!1){return{...this,_options:e?t:u(this._options,t)}},headers(t){const e=t?Array.isArray(t)?Object.fromEntries(t):"entries"in t?Object.fromEntries(t.entries()):t:{};return{...this,_options:u(this._options,{headers:e})}},accept(t){return this.headers({Accept:t})},content(t){return this.headers({[S]:t})},auth(t){return this.headers({Authorization:t})},catcher(t,e){const o=new Map(this._catchers);return o.set(t,e),{...this,_catchers:o}},catcherFallback(t){return this.catcher(w,t)},resolve(t,e=!1){return{...this,_resolvers:e?[t]:[...this._resolvers,t]}},defer(t,e=!1){return{...this,_deferred:e?[t]:[...this._deferred,t]}},middlewares(t,e=!1){return{...this,_middlewares:e?t:[...this._middlewares,...t]}},fetch(t=this._options.method,e="",o=null){let c=this.url(e).options({method:t});const i=C(c._options.headers),l=this._config.polyfill("FormData",!1),f=typeof o=="object"&&!(l&&o instanceof l)&&(!c._options.headers||!i||P(i));return c=o?f?c.json(o,i):c.body(o):c,U(c._deferred.reduce((m,E)=>E(m,m._url,m._options),c))},get(t=""){return this.fetch("GET",t)},delete(t=""){return this.fetch("DELETE",t)},put(t,e=""){return this.fetch("PUT",e,t)},post(t,e=""){return this.fetch("POST",e,t)},patch(t,e=""){return this.fetch("PATCH",e,t)},head(t=""){return this.fetch("HEAD",t)},opts(t=""){return this.fetch("OPTIONS",t)},body(t){return{...this,_options:{...this._options,body:t}}},json(t,e){const o=C(this._options.headers);return this.content(e||P(o)&&o||H).body(JSON.stringify(t))}};function p(t="",e={}){return{...k,_url:t,_options:e}}p.default=p;p.options=L;p.errorType=I;p.polyfills=N;p.WretchError=x;fetch(R,{credentials:"same-origin",headers:{"Content-Type":"application/json"},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(F);p(R).content("application/json").options({credentials:"same-origin",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).get().json().catch();
//# sourceMappingURL=api.js.map

View file

@ -1,2 +1,2 @@
const E="wp-json",T=`/${E}/wc/store/cart`,t=`/${E}/wc/store/cart/add-item`,_=`/${E}/wc/store/cart/remove-item`,s="Nonce",I="retry-after",R="x-sentry-rate-limits";export{R as E,_ as R,I as a,t as b,s as c,T as d};
const E="wp-json",t=`/${E}/wc/store/cart`,T=`/${E}/wc/store/cart/add-item`,_=`/${E}/wc/store/cart/remove-item`,s=`/${E}/wc/store/cart/update-item`,I="Nonce",R="retry-after",c="x-sentry-rate-limits";export{c as E,_ as R,R as a,s as b,T as c,I as d,t as e};
//# sourceMappingURL=api2.js.map

View file

@ -1 +1 @@
{"version":3,"file":"api2.js","sources":["../../src/scripts/constantes/api.ts"],"sourcesContent":["// Chemins et Routes pour l'API WordPress\nexport const CHEMIN_API_REST = \"wp-json\";\nexport const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;\nexport const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;\nexport const ROUTE_API_RETIRE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/remove-item`;\n\n// En-têtes\nexport const ENTETE_WC_NONCE = \"Nonce\";\nexport const ENTETE_GLITCHTIP_RETRY_AFTER = \"retry-after\";\nexport const ENTETE_GLITCHTIP_RATE_LIMITS = \"x-sentry-rate-limits\";\n"],"names":["CHEMIN_API_REST","ROUTE_API_PANIER","ROUTE_API_AJOUTE_ARTICLE_PANIER","ROUTE_API_RETIRE_ARTICLE_PANIER","ENTETE_WC_NONCE","ENTETE_GLITCHTIP_RETRY_AFTER","ENTETE_GLITCHTIP_RATE_LIMITS"],"mappings":"AACO,MAAMA,EAAkB,UAClBC,EAAmB,IAAID,CAAe,iBACtCE,EAAkC,IAAIF,CAAe,0BACrDG,EAAkC,IAAIH,CAAe,6BAGrDI,EAAkB,QAClBC,EAA+B,cAC/BC,EAA+B"}
{"version":3,"file":"api2.js","sources":["../../src/scripts/constantes/api.ts"],"sourcesContent":["// Chemins et Routes pour l'API WordPress\nexport const CHEMIN_API_REST = \"wp-json\";\nexport const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;\nexport const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;\nexport const ROUTE_API_RETIRE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/remove-item`;\nexport const ROUTE_API_MAJ_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/update-item`;\n\n// En-têtes\nexport const ENTETE_WC_NONCE = \"Nonce\";\nexport const ENTETE_GLITCHTIP_RETRY_AFTER = \"retry-after\";\nexport const ENTETE_GLITCHTIP_RATE_LIMITS = \"x-sentry-rate-limits\";\n"],"names":["CHEMIN_API_REST","ROUTE_API_PANIER","ROUTE_API_AJOUTE_ARTICLE_PANIER","ROUTE_API_RETIRE_ARTICLE_PANIER","ROUTE_API_MAJ_ARTICLE_PANIER","ENTETE_WC_NONCE","ENTETE_GLITCHTIP_RETRY_AFTER","ENTETE_GLITCHTIP_RATE_LIMITS"],"mappings":"AACO,MAAMA,EAAkB,UAClBC,EAAmB,IAAID,CAAe,iBACtCE,EAAkC,IAAIF,CAAe,0BACrDG,EAAkC,IAAIH,CAAe,6BACrDI,EAA+B,IAAIJ,CAAe,6BAGlDK,EAAkB,QAClBC,EAA+B,cAC/BC,EAA+B"}

View file

@ -1,2 +1,2 @@
import{o as s,a as t,p as o,n as a,b as m,s as r}from"./index.C9ScFdVV.js";const n=s({attribute:r(),value:r()}),i=s({id:t(a()),quantity:t(a()),variation:t(m(n))}),p=e=>o(i,e);export{p};
import{o as s,a as t,p as o,n as a,b as m,s as r}from"./index.DYThEupQ.js";const n=s({attribute:r(),value:r()}),i=s({id:t(a()),quantity:t(a()),variation:t(m(n))}),p=e=>o(i,e);export{p};
//# sourceMappingURL=cart-add-item.js.map

View file

@ -1,2 +1,2 @@
import{o as e,s as o}from"./index.C9ScFdVV.js";const r=e({key:o()});export{r as W};
import{o as e,s as o}from"./index.DYThEupQ.js";const r=e({key:o()});export{r as W};
//# sourceMappingURL=cart-remove-item.js.map

View file

@ -0,0 +1,2 @@
import{o as a,s as t,c as e,m as s,n as r}from"./index.DYThEupQ.js";const o=a({key:t(),quantity:e(r(),s(1))});export{o as W};
//# sourceMappingURL=cart-update-item.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"cart-update-item.js","sources":["../../src/scripts/lib/schemas/cart-update-item.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nexport const WCStoreCartUpdateItemArgsSchema = v.object({\n /** Unique identifier (key) for the basket item to update. */\n key: v.string(),\n /** New quantity of the item in the basket. */\n quantity: v.pipe(v.number(), v.minValue(1)),\n});\n"],"names":["WCStoreCartUpdateItemArgsSchema","v.object","v.string","v.pipe","v.number","v.minValue"],"mappings":"oEAEa,MAAAA,EAAkCC,EAAS,CAEtD,IAAKC,EAAS,EAEd,SAAUC,EAAOC,EAAY,EAAAC,EAAW,CAAC,CAAC,CAC5C,CAAC"}

View file

@ -1,2 +1,2 @@
import{o as a,s as e,u as i,n,c as s,b as t,d as r,i as o}from"./index.C9ScFdVV.js";a({name:e(),package_id:i([n(),e()])});const m=a({billing_address:s(),coupons:s(),cross_sells:s(),errors:s(),extensions:s(),fees:s(),has_calculated_shipping:s(),items:t(s()),items_count:r(n(),o()),items_weight:s(),needs_payment:s(),needs_shipping:s(),payment_methods:s(),payment_requirements:s(),shipping_address:s(),shipping_rates:s(),totals:s()});export{m as W};
import{o as n,d as i,e as r,s as e,u as s,n as t,b as a,f as _,c as o,g as m,h as l,i as p}from"./index.DYThEupQ.js";import{C as d}from"./cart2.js";const c=n({backorders_allowed:i(),catalog_visibility:r(d),description:e(),extensions:s(),id:t(),images:a(s()),item_data:a(s()),key:e(),low_stock_remaining:_([m()]),name:e(),permalink:o(e(),l()),prices:s(),quantity:t(),quantity_limits:s(),short_description:e(),show_backorder_badge:i(),sku:e(),sold_individually:i(),totals:s(),type:e(),variation:a(s())}),h=n({billing_address:s(),coupons:s(),cross_sells:s(),errors:s(),extensions:s(),fees:s(),has_calculated_shipping:s(),items:a(c),items_count:o(t(),p()),items_weight:s(),needs_payment:s(),needs_shipping:s(),payment_methods:s(),payment_requirements:s(),shipping_address:s(),shipping_rates:s(),totals:s()});export{h as W};
//# sourceMappingURL=cart.js.map

View file

@ -1 +1 @@
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nconst WCStoreCartItemTotalsSchema = v.object({\n currency_code: v.string(),\n currency_decimal_separator: v.string(),\n currency_minor_unit: v.number(),\n currency_prefix: v.string(),\n currency_suffix: v.string(),\n currency_symbol: v.string(),\n currency_thousand_separator: v.string(),\n total_discount: v.string(),\n total_discount_tax: v.string(),\n});\n\nconst WCStoreCartItemShippingRateSchema = v.object({\n name: v.string(),\n package_id: v.union([v.number(), v.string()]),\n});\n\nconst WCStoreCartItemSchema = v.object({\n code: v.string(),\n discount_type: v.string(),\n shipping_rates: v.array(WCStoreCartItemShippingRateSchema),\n totals: v.array(WCStoreCartItemTotalsSchema),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: v.unknown(),\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.unknown(),\n items: v.array(v.unknown()),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.unknown(),\n needs_payment: v.unknown(),\n needs_shipping: v.unknown(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: v.unknown(),\n shipping_rates: v.unknown(),\n totals: v.unknown(),\n});\n"],"names":["v.object","v.string","v.union","v.number","WCStoreCartSchema","v.unknown","v.array","v.pipe","v.integer"],"mappings":"AAc0CA,OAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,EAAAA,KAAAA,MAAAA,sBAAAA,EAAS,CACjD,KAAMC,EAAS,EACf,WAAYC,EAAQ,CAACC,IAAYF,EAAU,CAAA,CAAC,CAC9C,CAAC,EASY,MAAAG,EAAoBJ,EAAS,CACxC,gBAAiBK,EAAU,EAC3B,QAASA,EAAU,EACnB,YAAaA,EAAU,EACvB,OAAQA,EAAU,EAClB,WAAYA,EAAU,EACtB,KAAMA,EAAU,EAChB,wBAAyBA,EAAU,EACnC,MAAOC,EAAQD,GAAW,EAC1B,YAAaE,EAAOJ,EAAY,EAAAK,GAAW,EAC3C,aAAcH,EAAU,EACxB,cAAeA,EAAU,EACzB,eAAgBA,EAAU,EAC1B,gBAAiBA,EAAU,EAC3B,qBAAsBA,EAAU,EAChC,iBAAkBA,EAAU,EAC5B,eAAgBA,EAAU,EAC1B,OAAQA,EAAU,CACpB,CAAC"}
{"version":3,"file":"cart.js","sources":["../../src/scripts/lib/schemas/cart.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport { CATALOG_VISIBILITIES } from \"../../constantes/cart.ts\";\n\nexport const WCStoreCartItemSchema = v.object({\n \"backorders_allowed\": v.boolean(),\n \"catalog_visibility\": v.enum(CATALOG_VISIBILITIES),\n \"description\": v.string(),\n \"extensions\": v.unknown(),\n \"id\": v.number(),\n \"images\": v.array(v.unknown()),\n \"item_data\": v.array(v.unknown()),\n \"key\": v.string(),\n \"low_stock_remaining\": v.union([v.null()]),\n \"name\": v.string(),\n \"permalink\": v.pipe(v.string(), v.url()),\n \"prices\": v.unknown(),\n \"quantity\": v.number(),\n \"quantity_limits\": v.unknown(),\n \"short_description\": v.string(),\n \"show_backorder_badge\": v.boolean(),\n \"sku\": v.string(),\n \"sold_individually\": v.boolean(),\n \"totals\": v.unknown(),\n \"type\": v.string(),\n \"variation\": v.array(v.unknown()),\n});\n\nexport const WCStoreCartSchema = v.object({\n billing_address: v.unknown(),\n coupons: v.unknown(),\n cross_sells: v.unknown(),\n errors: v.unknown(),\n extensions: v.unknown(),\n fees: v.unknown(),\n has_calculated_shipping: v.unknown(),\n items: v.array(WCStoreCartItemSchema),\n items_count: v.pipe(v.number(), v.integer()),\n items_weight: v.unknown(),\n needs_payment: v.unknown(),\n needs_shipping: v.unknown(),\n payment_methods: v.unknown(),\n payment_requirements: v.unknown(),\n shipping_address: v.unknown(),\n shipping_rates: v.unknown(),\n totals: v.unknown(),\n});\n"],"names":["WCStoreCartItemSchema","v.object","v.boolean","v.enum","CATALOG_VISIBILITIES","v.string","v.unknown","v.number","v.array","v.union","v.null","v.pipe","v.url","WCStoreCartSchema","v.integer"],"mappings":"oJAIa,MAAAA,EAAwBC,EAAS,CAC5C,mBAAsBC,EAAU,EAChC,mBAAsBC,EAAOC,CAAoB,EACjD,YAAeC,EAAS,EACxB,WAAcC,EAAU,EACxB,GAAMC,EAAS,EACf,OAAUC,EAAQF,GAAW,EAC7B,UAAaE,EAAQF,GAAW,EAChC,IAAOD,EAAS,EAChB,oBAAuBI,EAAQ,CAACC,EAAE,CAAM,CAAC,EACzC,KAAQL,EAAS,EACjB,UAAaM,EAAON,EAAY,EAAAO,GAAO,EACvC,OAAUN,EAAU,EACpB,SAAYC,EAAS,EACrB,gBAAmBD,EAAU,EAC7B,kBAAqBD,EAAS,EAC9B,qBAAwBH,EAAU,EAClC,IAAOG,EAAS,EAChB,kBAAqBH,EAAU,EAC/B,OAAUI,EAAU,EACpB,KAAQD,EAAS,EACjB,UAAaG,EAAQF,GAAW,CAClC,CAAC,EAEYO,EAAoBZ,EAAS,CACxC,gBAAiBK,EAAU,EAC3B,QAASA,EAAU,EACnB,YAAaA,EAAU,EACvB,OAAQA,EAAU,EAClB,WAAYA,EAAU,EACtB,KAAMA,EAAU,EAChB,wBAAyBA,EAAU,EACnC,MAAOE,EAAQR,CAAqB,EACpC,YAAaW,EAAOJ,EAAY,EAAAO,GAAW,EAC3C,aAAcR,EAAU,EACxB,cAAeA,EAAU,EACzB,eAAgBA,EAAU,EAC1B,gBAAiBA,EAAU,EAC3B,qBAAsBA,EAAU,EAChC,iBAAkBA,EAAU,EAC5B,eAAgBA,EAAU,EAC1B,OAAQA,EAAU,CACpB,CAAC"}

View file

@ -0,0 +1,2 @@
const I={INVISIBLE:"invisible",VISIBLE:"visible"};export{I as C};
//# sourceMappingURL=cart2.js.map

View file

@ -0,0 +1 @@
{"version":3,"file":"cart2.js","sources":["../../src/scripts/constantes/cart.ts"],"sourcesContent":["export const CATALOG_VISIBILITIES = {\n INVISIBLE: \"invisible\",\n VISIBLE: \"visible\",\n} as const;\n"],"names":["CATALOG_VISIBILITIES"],"mappings":"AAAO,MAAMA,EAAuB,CAClC,UAAW,YACX,QAAS,SACX"}

View file

@ -1,2 +1,2 @@
const E="aria-selected",T="hidden",t="data-contient-articles",a="disabled",s="data-cle-panier",_="#page-panier",o=".compte-panier a[rel='cart']",n="#selecteur-variation",c="#bouton-ajout-panier",e="a[role='tab']",R="section[role='tabpanel']",U="article",N="button.detail-produit__actions__suppression",S="button.detail-produit__actions__soustraction",i="input";export{t as A,o as S,U as a,_ as b,s as c,N as d,S as e,i as f,c as g,n as h,e as i,R as j,E as k,T as l,a as m};
const E="aria-selected",T="hidden",t="data-contient-articles",a="disabled",_="data-cle-panier",s="#page-panier",o=".compte-panier a[rel='cart']",n="#selecteur-variation",U="#bouton-ajout-panier",c="a[role='tab']",e="section[role='tabpanel']",N="article",R="button.detail-produit__actions__suppression",i="button.detail-produit__actions__soustraction",S="button.detail-produit__actions__addition",I="input";export{t as A,o as S,N as a,s as b,_ as c,i as d,I as e,S as f,R as g,U as h,n as i,c as j,e as k,E as l,T as m,a as n};
//# sourceMappingURL=dom.js.map

View file

@ -1 +1 @@
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\n\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE = \"input\";\n"],"names":["ATTRIBUT_ARIA_SELECTED","ATTRIBUT_HIDDEN","ATTRIBUT_CONTIENT_ARTICLES","ATTRIBUT_DESACTIVE","ATTRIBUT_CLE_PANIER","SELECTEUR_CONTENEUR_PANIER","SELECTEUR_BOUTON_PANIER","SELECTEUR_SELECTEUR_QUANTITE","SELECTEUR_BOUTON_AJOUT_PANIER","SELECTEUR_LIENS_ONGLETS","SELECTEUR_SECTIONS_CONTENUS","SELECTEUR_ENTREES_PANIER","SELECTEUR_BOUTON_SUPPRESSION_PANIER","SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE","SELECTEUR_CHAMP_QUANTITE"],"mappings":"AAEO,MAAMA,EAAyB,gBAEzBC,EAAkB,SAClBC,EAA6B,yBAC7BC,EAAqB,WACrBC,EAAsB,kBAEtBC,EAA6B,eAC7BC,EAA0B,+BAC1BC,EAA+B,uBAC/BC,EAAgC,uBAChCC,EAA0B,gBAC1BC,EAA8B,2BAG9BC,EAA2B,UAC3BC,EAAsC,8CACtCC,EAAyC,+CAEzCC,EAA2B"}
{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\n\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE = \"input\";\n"],"names":["ATTRIBUT_ARIA_SELECTED","ATTRIBUT_HIDDEN","ATTRIBUT_CONTIENT_ARTICLES","ATTRIBUT_DESACTIVE","ATTRIBUT_CLE_PANIER","SELECTEUR_CONTENEUR_PANIER","SELECTEUR_BOUTON_PANIER","SELECTEUR_SELECTEUR_QUANTITE","SELECTEUR_BOUTON_AJOUT_PANIER","SELECTEUR_LIENS_ONGLETS","SELECTEUR_SECTIONS_CONTENUS","SELECTEUR_ENTREES_PANIER","SELECTEUR_BOUTON_SUPPRESSION_PANIER","SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE","SELECTEUR_BOUTON_ADDITION_QUANTITE","SELECTEUR_CHAMP_QUANTITE"],"mappings":"AAEO,MAAMA,EAAyB,gBAEzBC,EAAkB,SAClBC,EAA6B,yBAC7BC,EAAqB,WACrBC,EAAsB,kBAEtBC,EAA6B,eAC7BC,EAA0B,+BAC1BC,EAA+B,uBAC/BC,EAAgC,uBAChCC,EAA0B,gBAC1BC,EAA8B,2BAG9BC,EAA2B,UAC3BC,EAAsC,8CACtCC,EAAyC,+CACzCC,EAAqC,2CACrCC,EAA2B"}

View file

@ -1,2 +1,2 @@
import{x as m}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.DDEPhGsy.js";import"./exports.BNibT8R5.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{g as a,L as b,R as c,S as r};
import{x as m}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{e as n,f as a,g as c,h as o}from"./erreurs.js";import{E as s,r as E,l as i}from"./Either.DDEPhGsy.js";import"./exports.CqgMoAXr.js";function p(e){return e!==null}function l(e){return e===void 0?!0:typeof e=="string"||Array.isArray(e)?e.length===0:Object.keys(e).length===0}const f=e=>e,L=e=>r=>s.encase(()=>e.querySelector(r)).mapLeft(t=>n(c(r))).chain(t=>p(t)?E(t):i(n(o(r)))),R=e=>r=>s.encase(()=>m(e.querySelectorAll(r),Array.from)).mapLeft(t=>n(c(r))).chain(t=>l(t)?i(n(o(r))):E(t)),S=e=>e.caseOf({Left:a,Right:f}),g=e=>e.caseOf({Left:a,Right:f});export{g as a,L as b,R as c,S as r};
//# sourceMappingURL=dom2.js.map

View file

@ -1,2 +1,2 @@
import{$ as o}from"./exports.BNibT8R5.js";const u=r=>`Le selecteur "${r}" est invalide`,d=r=>`La requête "${r}" n'a retourné aucun Élément.`,i=r=>new SyntaxError(r);class s extends Error{constructor(e="400 BadRequestError"){super(e),this.name="BadRequestError"}}class t extends Error{constructor(e="401 UnauthorizedError"){super(e),this.name="UnauthorizedError"}}class n extends Error{constructor(e="404 NotFoundError"){super(e),this.name="NotFoundError"}}class E extends Error{constructor(e="500 ServerError"){super(e),this.name="ServerError"}}class a extends Error{constructor(e){super(JSON.stringify(e)),this.name="UnknownError"}}class l extends Error{constructor(e){super(JSON.stringify(e)),this.name="DOMElementAbsentError"}}const h=r=>new a(r),m=r=>{throw r},w=r=>{throw new s(`(${r.code}) ${r.message}`)},p=r=>{throw new t(`(${r.code}) ${r.message}`)},v=r=>{throw new n(`(${r.code}) ${r.message}`)},R=r=>{throw new E(r)},S=r=>(console.error(r),o(r)),x=r=>{throw o(r),r};export{l as D,h as E,w as a,p as b,v as c,m as d,i as e,x as f,u as g,d as h,R as l,S as r};
import{$ as o}from"./exports.CqgMoAXr.js";const d=r=>`Le selecteur "${r}" est invalide`,h=r=>`La requête "${r}" n'a retourné aucun Élément.`,i=r=>new SyntaxError(r);class s extends Error{constructor(e="400 BadRequestError"){super(e),this.name="BadRequestError"}}class t extends Error{constructor(e="401 UnauthorizedError"){super(e),this.name="UnauthorizedError"}}class n extends Error{constructor(e="404 NotFoundError"){super(e),this.name="NotFoundError"}}class E extends Error{constructor(e="500 ServerError"){super(e),this.name="ServerError"}}class a extends Error{constructor(e){super(JSON.stringify(e)),this.name="UnknownError"}}const l=r=>new a(r),w=r=>{throw r},m=r=>{throw new s(`(${r.code}) ${r.message}`)},p=r=>{throw new t(`(${r.code}) ${r.message}`)},v=r=>{throw new n(`(${r.code}) ${r.message}`)},R=r=>{throw new E(r)},c=r=>(console.error(r),o(r)),S=r=>{throw c(r),r};export{l as E,m as a,p as b,v as c,w as d,i as e,S as f,d as g,h,R as l,c as r};
//# sourceMappingURL=erreurs.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{e as t,o as s,n as r,s as o}from"./index.C9ScFdVV.js";const e=s({code:o(),data:s({status:r()}),message:o()}),c=s({body:e,status:r()}),n=a=>t(c,a);export{n as i};
import{j as a,o as s,n as r,s as o}from"./index.DYThEupQ.js";const e=s({code:o(),data:s({status:r()}),message:o()}),c=s({body:e,status:r()}),n=t=>a(c,t);export{n as e};
//# sourceMappingURL=erreurs2.js.map

View file

@ -1 +1 @@
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","isWCError","donnees","v.is"],"mappings":"6DAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAaC,GAAyCC,EAAKH,EAAeE,CAAO"}
{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const estWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["WCErrorBodySchema","v.object","v.string","v.number","WCErrorSchema","estWCError","donnees","v.is"],"mappings":"6DAIa,MAAAA,EAAoBC,EAAS,CACxC,KAAMC,EAAS,EACf,KAAMD,EAAS,CACb,OAAQE,EAAS,CAAA,CAClB,EACD,QAASD,EAAS,CACpB,CAAC,EAEYE,EAAgBH,EAAS,CACpC,KAAMD,EACN,OAAQG,EAAS,CACnB,CAAC,EAEYE,EAAcC,GAAyCC,EAAKH,EAAeE,CAAO"}

View file

@ -1,4 +1,4 @@
import{x as _t}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{E as me,a as ge}from"./api2.js";import{i as J,t as yt,c as Ge,D as ae,l as f,g as Et,G as h,C as vt,f as O,o as _e,a as C,b as We,d as V,r as Ye,S as Ke,e as k,h as ce,n as St,j as Xe,k as g,u as bt,m as B,p as ye,q as ue,s as Ee,v as kt,w as It,x as ze,y as Tt,z as Z,A as Je,B as ve,E as y,F as wt,H as Se,I as q,J as Ve,K as be,L as Rt,M as ke,N as le,O as Nt,P as Ct,Q as P,R as Ot,U as $,T as $t,V as Pt,W as Ie,X as Dt,Y as G,Z as Ft,_ as xt}from"./exports.BNibT8R5.js";function Ht(t,e,n=250,r,s,o,i){if(!o.exception||!o.exception.values||!i||!J(i.originalException,Error))return;const a=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;a&&(o.exception.values=Lt(Q(t,e,s,i.originalException,r,o.exception.values,a,0),n))}function Q(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(J(r[s],Error)){Te(i,a);const u=t(e,r[s]),d=c.length;we(u,s,d,a),c=Q(t,e,n,r[s],s,[u,...c],u,d)}return Array.isArray(r.errors)&&r.errors.forEach((u,d)=>{if(J(u,Error)){Te(i,a);const l=t(e,u),m=c.length;we(l,`errors[${d}]`,m,a),c=Q(t,e,n,u,s,[l,...c],l,m)}}),c}function Te(t,e){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,...t.type==="AggregateError"&&{is_exception_group:!0},exception_id:e}}function we(t,e,n,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function Lt(t,e){return t.map(n=>(n.value&&(n.value=yt(n.value,e)),n))}function Ze(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const Mt=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function Ut(t){return t==="http"||t==="https"}function W(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function jt(t){const e=Mt.exec(t);if(!e){Ge(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const d=u.split("/");if(d.length>1&&(c=d.slice(0,-1).join("/"),u=d.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qe({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qe(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Bt(t){if(!ae)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(f.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Ut(r)?e&&isNaN(parseInt(e,10))?(f.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(f.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(f.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function At(t){const e=typeof t=="string"?jt(t):Qe(t);if(!(!e||!Bt(e)))return e}class b extends Error{constructor(e,n="warn"){super(e),this.message=e,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}const A={},Re={};function w(t,e){A[t]=A[t]||[],A[t].push(e)}function R(t,e){Re[t]||(e(),Re[t]=!0)}function S(t,e){const n=t&&A[t];if(n)for(const r of n)try{r(e)}catch(s){ae&&f.error(`Error while triggering instrumentation handler.
import{x as _t}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{E as me,a as ge}from"./api2.js";import{i as J,t as yt,c as Ge,D as ae,l as f,g as Et,G as h,C as vt,f as O,o as _e,a as C,b as We,d as V,r as Ye,S as Ke,e as k,h as ce,n as St,j as Xe,k as g,u as bt,m as B,p as ye,q as ue,s as Ee,v as kt,w as It,x as ze,y as Tt,z as Z,A as Je,B as ve,E as y,F as wt,H as Se,I as q,J as Ve,K as be,L as Rt,M as ke,N as le,O as Nt,P as Ct,Q as P,R as Ot,U as $,T as $t,V as Pt,W as Ie,X as Dt,Y as G,Z as Ft,_ as xt}from"./exports.CqgMoAXr.js";function Ht(t,e,n=250,r,s,o,i){if(!o.exception||!o.exception.values||!i||!J(i.originalException,Error))return;const a=o.exception.values.length>0?o.exception.values[o.exception.values.length-1]:void 0;a&&(o.exception.values=Lt(Q(t,e,s,i.originalException,r,o.exception.values,a,0),n))}function Q(t,e,n,r,s,o,i,a){if(o.length>=n+1)return o;let c=[...o];if(J(r[s],Error)){Te(i,a);const u=t(e,r[s]),d=c.length;we(u,s,d,a),c=Q(t,e,n,r[s],s,[u,...c],u,d)}return Array.isArray(r.errors)&&r.errors.forEach((u,d)=>{if(J(u,Error)){Te(i,a);const l=t(e,u),m=c.length;we(l,`errors[${d}]`,m,a),c=Q(t,e,n,u,s,[l,...c],l,m)}}),c}function Te(t,e){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,...t.type==="AggregateError"&&{is_exception_group:!0},exception_id:e}}function we(t,e,n,r){t.mechanism=t.mechanism||{type:"generic",handled:!0},t.mechanism={...t.mechanism,type:"chained",source:e,exception_id:n,parent_id:r}}function Lt(t,e){return t.map(n=>(n.value&&(n.value=yt(n.value,e)),n))}function Ze(t){if(t!==void 0)return t>=400&&t<500?"warning":t>=500?"error":void 0}const Mt=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/;function Ut(t){return t==="http"||t==="https"}function W(t,e=!1){const{host:n,path:r,pass:s,port:o,projectId:i,protocol:a,publicKey:c}=t;return`${a}://${c}${e&&s?`:${s}`:""}@${n}${o?`:${o}`:""}/${r&&`${r}/`}${i}`}function jt(t){const e=Mt.exec(t);if(!e){Ge(()=>{console.error(`Invalid Sentry Dsn: ${t}`)});return}const[n,r,s="",o="",i="",a=""]=e.slice(1);let c="",u=a;const d=u.split("/");if(d.length>1&&(c=d.slice(0,-1).join("/"),u=d.pop()),u){const l=u.match(/^\d+/);l&&(u=l[0])}return Qe({host:o,pass:s,path:c,projectId:u,port:i,protocol:n,publicKey:r})}function Qe(t){return{protocol:t.protocol,publicKey:t.publicKey||"",pass:t.pass||"",host:t.host,port:t.port||"",path:t.path||"",projectId:t.projectId}}function Bt(t){if(!ae)return!0;const{port:e,projectId:n,protocol:r}=t;return["protocol","publicKey","host","projectId"].find(i=>t[i]?!1:(f.error(`Invalid Sentry Dsn: ${i} missing`),!0))?!1:n.match(/^\d+$/)?Ut(r)?e&&isNaN(parseInt(e,10))?(f.error(`Invalid Sentry Dsn: Invalid port ${e}`),!1):!0:(f.error(`Invalid Sentry Dsn: Invalid protocol ${r}`),!1):(f.error(`Invalid Sentry Dsn: Invalid projectId ${n}`),!1)}function At(t){const e=typeof t=="string"?jt(t):Qe(t);if(!(!e||!Bt(e)))return e}class b extends Error{constructor(e,n="warn"){super(e),this.message=e,this.name=new.target.prototype.constructor.name,Object.setPrototypeOf(this,new.target.prototype),this.logLevel=n}}const A={},Re={};function w(t,e){A[t]=A[t]||[],A[t].push(e)}function R(t,e){Re[t]||(e(),Re[t]=!0)}function S(t,e){const n=t&&A[t];if(n)for(const r of n)try{r(e)}catch(s){ae&&f.error(`Error while triggering instrumentation handler.
Type: ${t}
Name: ${Et(r)}
Error:`,s)}}function qt(t){const e="console";w(e,t),R(e,Gt)}function Gt(){"console"in h&&vt.forEach(function(t){t in h.console&&O(h.console,t,function(e){return _e[t]=e,function(...n){S("console",{args:n,level:t});const s=_e[t];s&&s.apply(h.console,n)}})})}const ee=h;function Wt(){if(!("fetch"in ee))return!1;try{return new Headers,new Request("http://www.example.com"),new Response,!0}catch{return!1}}function Ne(t){return t&&/^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}function et(){if(typeof EdgeRuntime=="string")return!0;if(!Wt())return!1;if(Ne(ee.fetch))return!0;let t=!1;const e=ee.document;if(e&&typeof e.createElement=="function")try{const n=e.createElement("iframe");n.hidden=!0,e.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(t=Ne(n.contentWindow.fetch)),e.head.removeChild(n)}catch(n){ae&&f.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",n)}return t}function tt(t,e){const n="fetch";w(n,t),R(n,()=>Yt(void 0,e))}function Yt(t,e=!1){e&&!et()||O(h,"fetch",function(n){return function(...r){const{method:s,url:o}=Kt(r),i={args:r,fetchData:{method:s,url:o},startTimestamp:C()*1e3};S("fetch",{...i});const a=new Error().stack;return n.apply(h,r).then(async c=>(S("fetch",{...i,endTimestamp:C()*1e3,response:c}),c),c=>{throw S("fetch",{...i,endTimestamp:C()*1e3,error:c}),We(c)&&c.stack===void 0&&(c.stack=a,V(c,"framesToPop",1)),c})}})}function te(t,e){return!!t&&typeof t=="object"&&!!t[e]}function Ce(t){return typeof t=="string"?t:t?te(t,"url")?t.url:t.toString?t.toString():"":""}function Kt(t){if(t.length===0)return{method:"GET",url:""};if(t.length===2){const[n,r]=t;return{url:Ce(n),method:te(r,"method")?String(r.method).toUpperCase():"GET"}}const e=t[0];return{url:Ce(e),method:te(e,"method")?String(e.method).toUpperCase():"GET"}}let H=null;function Xt(t){const e="error";w(e,t),R(e,zt)}function zt(){H=h.onerror,h.onerror=function(t,e,n,r,s){return S("error",{column:r,error:s,line:n,msg:t,url:e}),H&&!H.__SENTRY_LOADER__?H.apply(this,arguments):!1},h.onerror.__SENTRY_INSTRUMENTED__=!0}let L=null;function Jt(t){const e="unhandledrejection";w(e,t),R(e,Vt)}function Vt(){L=h.onunhandledrejection,h.onunhandledrejection=function(t){return S("unhandledrejection",t),L&&!L.__SENTRY_LOADER__?L.apply(this,arguments):!0},h.onunhandledrejection.__SENTRY_INSTRUMENTED__=!0}function Zt(){return"npm"}function Qt(t){const e=[];function n(){return t===void 0||e.length<t}function r(i){return e.splice(e.indexOf(i),1)[0]||Promise.resolve(void 0)}function s(i){if(!n())return Ye(new b("Not adding Promise because buffer limit was reached."));const a=i();return e.indexOf(a)===-1&&e.push(a),a.then(()=>r(a)).then(null,()=>r(a).then(null,()=>{})),a}function o(i){return new Ke((a,c)=>{let u=e.length;if(!u)return a(!0);const d=setTimeout(()=>{i&&i>0&&a(!1)},i);e.forEach(l=>{k(l).then(()=>{--u||(clearTimeout(d),a(!0))},c)})})}return{$:e,add:s,drain:o}}function X(t){if(!t)return{};const e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};const n=e[6]||"",r=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],search:n,hash:r,relative:e[5]+n+r}}const en=["fatal","error","warning","log","info","debug"];function tn(t){return t==="warn"?"warning":en.includes(t)?t:"log"}function D(t,e=[]){return[t,e]}function nn(t,e){const[n,r]=t;return[n,[...r,e]]}function Oe(t,e){const n=t[1];for(const r of n){const s=r[0].type;if(e(r,s))return!0}return!1}function ne(t){return h.__SENTRY__&&h.__SENTRY__.encodePolyfill?h.__SENTRY__.encodePolyfill(t):new TextEncoder().encode(t)}function rn(t){const[e,n]=t;let r=JSON.stringify(e);function s(o){typeof r=="string"?r=typeof o=="string"?r+o:[ne(r),o]:r.push(typeof o=="string"?ne(o):o)}for(const o of n){const[i,a]=o;if(s(`

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{d as g,c as M}from"./api2.js";import{E as h,r as o,l as f,M as p,n as u,j as c}from"./Either.DDEPhGsy.js";var l;const y={liftEither(i){if(i.isRight())return Promise.resolve(i.extract());throw i.extract()},fromPromise(i){return i.then(y.liftEither)},throwE(i){throw i}};class m{constructor(t){this.runPromise=t,this[l]="EitherAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/alt"]=this.alt,this.then=(r,e)=>this.run().then(r,e)}leftOrDefault(t){return this.run().then(r=>r.leftOrDefault(t))}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return n(async t=>{const r=await this;if(r.isRight()){const e=await r.extract();return t.liftEither(e)}return t.liftEither(r)})}ap(t){return n(async r=>{const e=await t;if(e.isRight()){const a=await this.run();return a.isRight()?e.extract()(a.extract()):r.liftEither(a)}return r.liftEither(e)})}alt(t){return n(async r=>{const e=await this.run();if(e.isRight())return e.extract();{const a=await t;return r.liftEither(a)}})}extend(t){return n(async r=>{const e=await this.run();if(e.isRight()){const a=n.liftEither(e);return r.liftEither(o(t(a)))}return r.liftEither(e)})}async run(){try{return o(await this.runPromise(y))}catch(t){return f(t)}}bimap(t,r){return n(async e=>{const a=await this.run();try{return await e.liftEither(a.bimap(t,r))}catch(P){throw await P}})}map(t){return n(r=>this.runPromise(r).then(t))}mapLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){throw await t(e)}})}chain(t){return n(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}chainLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){return r.fromPromise(t(e))}})}toMaybeAsync(){return s(async({liftMaybe:t})=>{const r=await this.run();return t(r.toMaybe())})}swap(){return n(async t=>{const r=await this.run();return r.isRight()&&t.throwE(r.extract()),t.liftEither(o(r.extract()))})}ifLeft(t){return n(async r=>{const e=await this.run();return e.ifLeft(t),r.liftEither(e)})}ifRight(t){return n(async r=>{const e=await this.run();return e.ifRight(t),r.liftEither(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return n(({fromPromise:r})=>r(this.run().finally(t)))}}l=Symbol.toStringTag;const n=Object.assign(i=>new m(i),{fromPromise:i=>n(({fromPromise:t})=>t(i())),liftEither:i=>n(({liftEither:t})=>t(i)),lefts:i=>Promise.all(i.map(t=>t.run())).then(h.lefts),rights:i=>Promise.all(i.map(t=>t.run())).then(h.rights),sequence:i=>n(async t=>{let r=[];for await(const e of i){if(e.isLeft())return t.liftEither(e);r.push(e.extract())}return t.liftEither(o(r))}),all:i=>n.fromPromise(async()=>Promise.all(i).then(h.sequence))});m.prototype.constructor=n;var w;const E={liftMaybe(i){if(i.isJust())return Promise.resolve(i.extract());throw u},fromPromise(i){return i.then(E.liftMaybe)}};class b{constructor(t){this.runPromise=t,this[w]="MaybeAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/filter"]=this.filter,this["fantasy-land/alt"]=this.alt}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return s(async t=>{const r=await this.run();if(r.isJust()){const e=await r.extract();return t.liftMaybe(e)}return t.liftMaybe(u)})}ap(t){return s(async r=>{const e=await t;if(e.isJust()){const a=await this.run();return a.isJust()?e.extract()(a.extract()):r.liftMaybe(u)}return r.liftMaybe(u)})}alt(t){return s(async r=>{const e=await this.run();if(e.isJust())return e.extract();{const a=await t;return r.liftMaybe(a)}})}extend(t){return s(async r=>{const e=await this.run();if(e.isJust()){const a=s.liftMaybe(e);return r.liftMaybe(c(t(a)))}return r.liftMaybe(u)})}filter(t){return s(async r=>{const e=await this.run();return r.liftMaybe(e.filter(t))})}async run(){try{return c(await this.runPromise(E))}catch{return u}}map(t){return s(r=>this.runPromise(r).then(t))}chain(t){return s(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}toEitherAsync(t){return n(async({liftEither:r})=>{const e=await this.run();return r(e.toEither(t))})}ifJust(t){return s(async r=>{const e=await this.run();return e.ifJust(t),r.liftMaybe(e)})}ifNothing(t){return s(async r=>{const e=await this.run();return e.ifNothing(t),r.liftMaybe(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return s(({fromPromise:r})=>r(this.run().finally(t)))}then(t,r){return this.run().then(t,r)}}w=Symbol.toStringTag;const s=Object.assign(i=>new b(i),{catMaybes:i=>Promise.all(i).then(p.catMaybes),fromPromise:i=>s(({fromPromise:t})=>t(i())),liftMaybe:i=>s(({liftMaybe:t})=>t(i))});b.prototype.constructor=s;const d=_etats,x=()=>fetch(g,{credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[M]:d.nonce},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(o).catch(f);n.fromPromise(x).map(i=>i.json()).ifLeft(i=>{console.error(i)});
import{e as g,d as M}from"./api2.js";import{E as h,r as o,l as f,M as p,n as u,j as c}from"./Either.DDEPhGsy.js";var l;const y={liftEither(i){if(i.isRight())return Promise.resolve(i.extract());throw i.extract()},fromPromise(i){return i.then(y.liftEither)},throwE(i){throw i}};class m{constructor(t){this.runPromise=t,this[l]="EitherAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/alt"]=this.alt,this.then=(r,e)=>this.run().then(r,e)}leftOrDefault(t){return this.run().then(r=>r.leftOrDefault(t))}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return n(async t=>{const r=await this;if(r.isRight()){const e=await r.extract();return t.liftEither(e)}return t.liftEither(r)})}ap(t){return n(async r=>{const e=await t;if(e.isRight()){const a=await this.run();return a.isRight()?e.extract()(a.extract()):r.liftEither(a)}return r.liftEither(e)})}alt(t){return n(async r=>{const e=await this.run();if(e.isRight())return e.extract();{const a=await t;return r.liftEither(a)}})}extend(t){return n(async r=>{const e=await this.run();if(e.isRight()){const a=n.liftEither(e);return r.liftEither(o(t(a)))}return r.liftEither(e)})}async run(){try{return o(await this.runPromise(y))}catch(t){return f(t)}}bimap(t,r){return n(async e=>{const a=await this.run();try{return await e.liftEither(a.bimap(t,r))}catch(P){throw await P}})}map(t){return n(r=>this.runPromise(r).then(t))}mapLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){throw await t(e)}})}chain(t){return n(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}chainLeft(t){return n(async r=>{try{return await this.runPromise(r)}catch(e){return r.fromPromise(t(e))}})}toMaybeAsync(){return s(async({liftMaybe:t})=>{const r=await this.run();return t(r.toMaybe())})}swap(){return n(async t=>{const r=await this.run();return r.isRight()&&t.throwE(r.extract()),t.liftEither(o(r.extract()))})}ifLeft(t){return n(async r=>{const e=await this.run();return e.ifLeft(t),r.liftEither(e)})}ifRight(t){return n(async r=>{const e=await this.run();return e.ifRight(t),r.liftEither(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return n(({fromPromise:r})=>r(this.run().finally(t)))}}l=Symbol.toStringTag;const n=Object.assign(i=>new m(i),{fromPromise:i=>n(({fromPromise:t})=>t(i())),liftEither:i=>n(({liftEither:t})=>t(i)),lefts:i=>Promise.all(i.map(t=>t.run())).then(h.lefts),rights:i=>Promise.all(i.map(t=>t.run())).then(h.rights),sequence:i=>n(async t=>{let r=[];for await(const e of i){if(e.isLeft())return t.liftEither(e);r.push(e.extract())}return t.liftEither(o(r))}),all:i=>n.fromPromise(async()=>Promise.all(i).then(h.sequence))});m.prototype.constructor=n;var w;const E={liftMaybe(i){if(i.isJust())return Promise.resolve(i.extract());throw u},fromPromise(i){return i.then(E.liftMaybe)}};class b{constructor(t){this.runPromise=t,this[w]="MaybeAsync",this["fantasy-land/chain"]=this.chain,this["fantasy-land/filter"]=this.filter,this["fantasy-land/alt"]=this.alt}orDefault(t){return this.run().then(r=>r.orDefault(t))}join(){return s(async t=>{const r=await this.run();if(r.isJust()){const e=await r.extract();return t.liftMaybe(e)}return t.liftMaybe(u)})}ap(t){return s(async r=>{const e=await t;if(e.isJust()){const a=await this.run();return a.isJust()?e.extract()(a.extract()):r.liftMaybe(u)}return r.liftMaybe(u)})}alt(t){return s(async r=>{const e=await this.run();if(e.isJust())return e.extract();{const a=await t;return r.liftMaybe(a)}})}extend(t){return s(async r=>{const e=await this.run();if(e.isJust()){const a=s.liftMaybe(e);return r.liftMaybe(c(t(a)))}return r.liftMaybe(u)})}filter(t){return s(async r=>{const e=await this.run();return r.liftMaybe(e.filter(t))})}async run(){try{return c(await this.runPromise(E))}catch{return u}}map(t){return s(r=>this.runPromise(r).then(t))}chain(t){return s(async r=>{const e=await this.runPromise(r);return r.fromPromise(t(e))})}toEitherAsync(t){return n(async({liftEither:r})=>{const e=await this.run();return r(e.toEither(t))})}ifJust(t){return s(async r=>{const e=await this.run();return e.ifJust(t),r.liftMaybe(e)})}ifNothing(t){return s(async r=>{const e=await this.run();return e.ifNothing(t),r.liftMaybe(e)})}void(){return this.map(t=>{})}caseOf(t){return this.run().then(r=>r.caseOf(t))}finally(t){return s(({fromPromise:r})=>r(this.run().finally(t)))}then(t,r){return this.run().then(t,r)}}w=Symbol.toStringTag;const s=Object.assign(i=>new b(i),{catMaybes:i=>Promise.all(i).then(p.catMaybes),fromPromise:i=>s(({fromPromise:t})=>t(i())),liftMaybe:i=>s(({liftMaybe:t})=>t(i))});b.prototype.constructor=s;const d=_etats,x=()=>fetch(g,{credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[M]:d.nonce},method:"GET",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(o).catch(f);n.fromPromise(x).map(i=>i.json()).ifLeft(i=>{console.error(i)});
//# sourceMappingURL=gestion-panier.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{p as a}from"./index.C9ScFdVV.js";import{r as o}from"./erreurs.js";import{M as i}from"./messages2.js";import{E as s}from"./Either.DDEPhGsy.js";import"./exports.BNibT8R5.js";import"./messages3.js";const E=r=>s.of(a(i,r.data)).ifLeft(e=>{o(e)});export{E as v};
import{p as a}from"./index.DYThEupQ.js";import{r as o}from"./erreurs.js";import{M as i}from"./messages2.js";import{E as s}from"./Either.DDEPhGsy.js";import"./exports.CqgMoAXr.js";import"./messages3.js";const E=r=>s.of(a(i,r.data)).ifLeft(e=>{o(e)});export{E as v};
//# sourceMappingURL=messages.js.map

View file

@ -1,2 +1,2 @@
import{f as s,o as a,n as o,d as r,v as n,s as i}from"./index.C9ScFdVV.js";import{T as e}from"./messages3.js";s(e);const p=a({donnees:o(),type:r(i(),n(e.MiseAJourPanier))});export{p as M};
import{e as s,o as a,n as o,c as r,v as n,s as i}from"./index.DYThEupQ.js";import{T as e}from"./messages3.js";s(e);const p=a({donnees:o(),type:r(i(),n(e.MiseAJourPanier))});export{p as M};
//# sourceMappingURL=messages2.js.map

View file

@ -1,2 +1,2 @@
import{c as e}from"./api2.js";const n=o=>fetch(o.route,{body:o.corps,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[e]:o.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)});export{n as p};
import{d as e}from"./api2.js";const n=o=>fetch(o.route,{body:o.corps,credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[e]:o.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)});export{n as p};
//# sourceMappingURL=reseau.js.map

View file

@ -1 +1 @@
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"remeda\";\nimport { match, P } from \"ts-pattern\";\nimport { type GenericSchema, parse } from \"valibot\";\n\nimport { ENTETE_WC_NONCE } from \"../constantes/api.ts\";\nimport {\n ErreurInconnue,\n leveBadRequestError,\n leveErreur,\n leveNotFoundError,\n leveUnauthorizedError,\n type UnknownError,\n} from \"./erreurs.ts\";\nimport { isWCError } from \"./schemas/erreurs.ts\";\n\ntype ArgumentsPostBackendWC = {\n corps: BodyInit;\n nonce: string;\n route: string;\n};\n\nexport const postBackendWC = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const traiteReponseBackendWCSelonCodesHTTP = (corpsReponse: unknown, schemaReponse: GenericSchema) =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));\n"],"names":["ENTETE_WC_NONCE","postBackendWC","args"],"mappings":"AAqBa,OAAA,KAAAA,MAAA,YAAA,MAAAC,EAAiBC,GAC5B,MACEA,EAAK,MACL,CACE,KAAMA,EAAK,MACX,YAAa,cACb,QAAS,CACP,OAAU,mBACV,eAAgB,mBAChB,CAACF,CAAe,EAAGE,EAAK,KAC1B,EACA,OAAQ,OACR,KAAM,cACN,OAAQ,YAAY,QAAQ,GAAI,CAClC,CACF"}
{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"remeda\";\nimport { match, P } from \"ts-pattern\";\nimport { type GenericSchema, parse } from \"valibot\";\n\nimport { ENTETE_WC_NONCE } from \"../constantes/api.ts\";\nimport {\n ErreurInconnue,\n leveBadRequestError,\n leveErreur,\n leveNotFoundError,\n leveUnauthorizedError,\n type UnknownError,\n} from \"./erreurs.ts\";\nimport { estWCError } from \"./schemas/erreurs.ts\";\n\ntype ArgumentsPostBackendWC = {\n corps: BodyInit;\n nonce: string;\n route: string;\n};\n\nexport const postBackendWC = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const traiteReponseBackendWCSelonCodesHTTP = (corpsReponse: unknown, schemaReponse: GenericSchema) =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>));\n"],"names":["ENTETE_WC_NONCE","postBackendWC","args"],"mappings":"AAqBa,OAAA,KAAAA,MAAA,YAAA,MAAAC,EAAiBC,GAC5B,MACEA,EAAK,MACL,CACE,KAAMA,EAAK,MACX,YAAa,cACb,QAAS,CACP,OAAU,mBACV,eAAgB,mBAChB,CAACF,CAAe,EAAGE,EAAK,KAC1B,EACA,OAAQ,OACR,KAAM,cACN,OAAQ,YAAY,QAAQ,GAAI,CAClC,CACF"}

View file

@ -1,2 +1,2 @@
import{x as n}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{S as i,A as m}from"./dom.js";import{N as a}from"./messages3.js";import{r as s}from"./dom2.js";import{v as N}from"./messages.js";import{r as p}from"./utils.js";import"./erreurs.js";import"./exports.BNibT8R5.js";import"./Either.DDEPhGsy.js";import"./index.C9ScFdVV.js";import"./messages2.js";console.debug("mdr");const E=()=>{const e=n(p(i),s),o=new BroadcastChannel(a);o.onmessage=r=>{N(r).ifRight(t=>{e.textContent=`cart (${String(t.donnees)})`,e.setAttribute(m,String(t.donnees>0))})}};document.addEventListener("DOMContentLoaded",()=>{E()});
import{x as n}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{S as i,A as m}from"./dom.js";import{N as a}from"./messages3.js";import{r as s}from"./dom2.js";import{v as N}from"./messages.js";import{r as p}from"./utils.js";import"./erreurs.js";import"./exports.CqgMoAXr.js";import"./Either.DDEPhGsy.js";import"./index.DYThEupQ.js";import"./messages2.js";const E=()=>{const t=n(p(i),s),r=new BroadcastChannel(a);r.onmessage=o=>{N(o).ifRight(e=>{t.textContent=`cart (${String(e.donnees)})`,t.setAttribute(m,String(e.donnees>0))})}};document.addEventListener("DOMContentLoaded",()=>{E()});
//# sourceMappingURL=scripts-bouton-panier.js.map

View file

@ -1 +1 @@
{"version":3,"file":"scripts-bouton-panier.js","sources":["../../src/scripts/scripts-bouton-panier.ts"],"sourcesContent":["/**\n * Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.\n */\n\nimport { pipe } from \"remeda\";\n\nimport type { MiseAJourPanierMessage } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajPanier } from \"./lib/messages.ts\";\nimport { recupereElementDocumentEither } from \"./lib/utils.ts\";\n\nconsole.debug(\"mdr\");\n\nconst initialiseBoutonPanier = (): void => {\n /** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */\n const BOUTON_PANIER: HTMLAnchorElement = pipe(\n recupereElementDocumentEither<HTMLAnchorElement>(SELECTEUR_BOUTON_PANIER),\n recupereElementOuLeve,\n );\n const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent<unknown>): void => {\n valideMessageMajPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MiseAJourPanierMessage) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees > 0));\n });\n };\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":["x","SELECTEUR_BOUTON_PANIER","ATTRIBUT_CONTIENT_ARTICLES","NOM_CANAL_BOUTON_PANIER","recupereElementOuLeve","valideMessageMajPanier","recupereElementDocumentEither","initialiseBoutonPanier","BOUTON_PANIER","pipe","CANAL_BOUTON_PANIER","evenementMessage","message"],"mappings":"AAcA,OAAA,KAAAA,MAAA,+BAAA,OAAA,KAAAC,EAAA,KAAAC,MAAA,WAAA,OAAA,KAAAC,MAAA,iBAAA,OAAA,KAAAC,MAAA,YAAA,OAAA,KAAAC,MAAA,gBAAA,OAAA,KAAAC,MAAA,aAAA,MAAA,eAAA,MAAA,wBAAA,MAAA,uBAAA,MAAA,sBAAA,MAAA,iBAAA,QAAQ,MAAM,KAAK,EAEnB,MAAMC,EAAyB,IAAY,CAEzC,MAAMC,EAAmCC,EACvCH,EAAiDL,CAAuB,EACxEG,CAAA,EAEIM,EAAwC,IAAI,iBAAiBP,CAAuB,EAEtEO,EAAA,UAAaC,GAAkD,CACjFN,EAAuBM,CAAgB,EAEpC,QAASC,GAAoC,CAC5CJ,EAAc,YAAc,SAAS,OAAOI,EAAQ,OAAO,CAAC,IAC5DJ,EAAc,aAAaN,EAA4B,OAAOU,EAAQ,QAAU,CAAC,CAAC,CAAA,CACnF,CAAA,CAEP,EAEA,SAAS,iBAAiB,mBAAoB,IAAM,CAC3BL,GACzB,CAAC"}
{"version":3,"file":"scripts-bouton-panier.js","sources":["../../src/scripts/scripts-bouton-panier.ts"],"sourcesContent":["/**\n * Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.\n */\n\nimport { pipe } from \"remeda\";\n\nimport type { MiseAJourPanierMessage } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajPanier } from \"./lib/messages.ts\";\nimport { recupereElementDocumentEither } from \"./lib/utils.ts\";\n\nconst initialiseBoutonPanier = (): void => {\n /** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */\n const BOUTON_PANIER: HTMLAnchorElement = pipe(\n recupereElementDocumentEither<HTMLAnchorElement>(SELECTEUR_BOUTON_PANIER),\n recupereElementOuLeve,\n );\n const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent<unknown>): void => {\n valideMessageMajPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MiseAJourPanierMessage) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees > 0));\n });\n };\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":["initialiseBoutonPanier","BOUTON_PANIER","pipe","recupereElementDocumentEither","SELECTEUR_BOUTON_PANIER","recupereElementOuLeve","CANAL_BOUTON_PANIER","NOM_CANAL_BOUTON_PANIER","evenementMessage","valideMessageMajPanier","message","ATTRIBUT_CONTIENT_ARTICLES"],"mappings":"0VAcA,MAAMA,EAAyB,IAAY,CAEzC,MAAMC,EAAmCC,EACvCC,EAAiDC,CAAuB,EACxEC,CAAA,EAEIC,EAAwC,IAAI,iBAAiBC,CAAuB,EAEtED,EAAA,UAAaE,GAAkD,CACjFC,EAAuBD,CAAgB,EAEpC,QAASE,GAAoC,CAC5CT,EAAc,YAAc,SAAS,OAAOS,EAAQ,OAAO,CAAC,IAC5DT,EAAc,aAAaU,EAA4B,OAAOD,EAAQ,QAAU,CAAC,CAAC,CAAA,CACnF,CAAA,CAEP,EAEA,SAAS,iBAAiB,mBAAoB,IAAM,CAC3BV,GACzB,CAAC"}

View file

@ -1,2 +1,2 @@
import{r as u,p as C,z as l,N as E}from"./index.Dxgx1GXj.js";import{x as t}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{p as c}from"./index.C9ScFdVV.js";import{R as f}from"./api2.js";import{a as I,b as S,c as d,d as P,e as L,f as O,A as U}from"./dom.js";import{N as T,T as h}from"./messages3.js";import{a as v,r as _,b as i}from"./dom2.js";import{r as m,D as A,l as B,a as g,b as M,c as b,E as w,d as y}from"./erreurs.js";import{e as D,a as W}from"./gardes.js";import{v as k}from"./messages.js";import{p as j}from"./reseau.js";import{W as X}from"./cart-remove-item.js";import{W as x}from"./cart.js";import{i as N}from"./erreurs2.js";import{a as z,r as G}from"./utils.js";import{M as J,E as Q}from"./Either.DDEPhGsy.js";import"./exports.BNibT8R5.js";import"./messages2.js";const $=_etats,q=t(z(I),v),F=t(G(S),_),H=()=>{q.forEach(e=>{const s=J.fromNullable(e.getAttribute(d));i(e)(P).ifLeft(()=>t(new A(`L'entrée « ${s.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`),m)).ifRight(o=>{o.addEventListener("click",()=>{const p=s.ifNothing(()=>{e.remove()}).orDefault("CLE_PANIER_INEXISTANTE");o.textContent="C= C= C= C= C=┌(;・ω・)┘",Q.encase(()=>c(X,{key:p})).map(R=>{j({corps:JSON.stringify(R),nonce:$.nonce,route:f}).then(async r=>{D(r)&&B("500 Server Error"),t(await r.json(),n=>l(n).with({body:E.select(),status:400},N,g).with({body:E.select(),status:401},N,M).with({body:E.select(),status:404},N,b).with(E._,a=>c(x,a)).otherwise(a=>t(a,w,y)),C("items_count"),u(n=>{new BroadcastChannel(T).postMessage({donnees:n,type:h.MiseAJourPanier}),e.remove()}))}).catch(r=>{W(r)?(m(r),console.error(r)):console.error("e n'est pas une Erreur ?!",r)})})})}),i(e)(L).ifLeft(()=>t(new A(`L'entrée « ${s.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de soustraction.`),m)).ifRight(o=>{o.addEventListener("click",()=>{t(i(e)(O),_)})})})},Y=()=>{const e=new BroadcastChannel(T);e.onmessage=s=>{k(s).ifRight(o=>{F.setAttribute(U,String(o.donnees!==0))})}};document.addEventListener("DOMContentLoaded",()=>{H(),Y()});
import{r as d,p as k,z as p,N as s}from"./index.Dxgx1GXj.js";import{x as i}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{p as A}from"./index.DYThEupQ.js";import{R as D,b as B}from"./api2.js";import{a as W,b as x,c as j,d as q,e as Q,f as z,g as G,A as F}from"./dom.js";import{N as b,T}from"./messages3.js";import{a as H,r as J,b as X}from"./dom2.js";import{l as R,a as f,b as g,c as S,E as O,d as I,r as h}from"./erreurs.js";import{e as P,a as U}from"./gardes.js";import{v as Y}from"./messages.js";import{p as v}from"./reseau.js";import{W as K}from"./cart-remove-item.js";import{W as M}from"./cart-update-item.js";import{W as y}from"./cart.js";import{e as n}from"./erreurs2.js";import{a as V,r as Z}from"./utils.js";import{M as C,E as L}from"./Either.DDEPhGsy.js";import"./exports.CqgMoAXr.js";import"./messages2.js";import"./cart2.js";const w=_etats,$=i(V(W),H),ee=i(Z(x),J),te=E=>u=>i(X(E)(u),J),re=()=>{$.forEach(E=>{const u=te(E),c=C.fromNullable(E.getAttribute(j)).ifNothing(()=>{E.remove()}).orDefault("CLE_PANIER_INEXISTANTE"),m=u(q),_=u(Q),N=u(z),o=u(G);o.addEventListener("click",()=>{o.textContent="C= C= C= C= C=┌(;・ω・)┘",L.encase(()=>A(K,{key:c})).map(l=>{v({corps:JSON.stringify(l),nonce:w.nonce,route:D}).then(async a=>{P(a)&&R("500 Server Error"),i(await a.json(),e=>p(e).with({body:s.select(),status:400},n,f).with({body:s.select(),status:401},n,g).with({body:s.select(),status:404},n,S).with(s._,r=>A(y,r)).otherwise(r=>i(r,O,I)),k("items_count"),d(e=>{console.debug("nombreArticlesPanier",e),new BroadcastChannel(b).postMessage({donnees:e,type:T.MiseAJourPanier}),E.remove()}))}).catch(a=>{U(a)?h(a):console.error("e n'est pas une Erreur ?!",a)})})}),m.addEventListener("click",()=>{C.fromNullable(_.valueAsNumber).filter(l=>l>1).ifJust(l=>{o.textContent="C= C= C= C= C=┌(;・ω・)┘",m.toggleAttribute("disabled"),N.toggleAttribute("disabled"),o.toggleAttribute("disabled"),L.encase(()=>A(M,{key:c,quantity:l-1})).map(a=>{v({corps:JSON.stringify(a),nonce:w.nonce,route:B}).then(async e=>{P(e)&&R("500 Server Error"),i(await e.json(),r=>p(r).with({body:s.select(),status:400},n,f).with({body:s.select(),status:401},n,g).with({body:s.select(),status:404},n,S).with(s._,t=>A(y,t)).otherwise(t=>i(t,O,I)),d(r=>{new BroadcastChannel(b).postMessage({donnees:r.items_count,type:T.MiseAJourPanier})}),d(r=>{C.fromNullable(r.items.find(t=>c===t.key)?.quantity).ifJust(t=>_.setAttribute("value",String(t))),m.toggleAttribute("disabled"),N.toggleAttribute("disabled"),o.toggleAttribute("disabled"),o.textContent="Remove"}))}).catch(e=>{U(e)?h(e):console.error("e n'est pas une Erreur ?!",e)})})})}),N.addEventListener("click",()=>{C.fromNullable(_.valueAsNumber).ifJust(l=>{o.textContent="C= C= C= C= C=┌(;・ω・)┘",m.toggleAttribute("disabled"),N.toggleAttribute("disabled"),o.toggleAttribute("disabled"),L.encase(()=>A(M,{key:c,quantity:l+1})).map(a=>{v({corps:JSON.stringify(a),nonce:w.nonce,route:B}).then(async e=>{P(e)&&R("500 Server Error"),i(await e.json(),r=>p(r).with({body:s.select(),status:400},n,f).with({body:s.select(),status:401},n,g).with({body:s.select(),status:404},n,S).with(s._,t=>A(y,t)).otherwise(t=>i(t,O,I)),d(r=>{new BroadcastChannel(b).postMessage({donnees:r.items_count,type:T.MiseAJourPanier})}),d(r=>{C.fromNullable(r.items.find(t=>c===t.key)?.quantity).ifJust(t=>_.setAttribute("value",String(t))),m.toggleAttribute("disabled"),N.toggleAttribute("disabled"),o.toggleAttribute("disabled"),o.textContent="Remove"}))}).catch(e=>{U(e)?h(e):console.error("e n'est pas une Erreur ?!",e)})})})})})},se=()=>{const E=new BroadcastChannel(b);E.onmessage=u=>{Y(u).ifRight(c=>{ee.setAttribute(F,String(c.donnees!==0))})}};document.addEventListener("DOMContentLoaded",()=>{re(),se()});
//# sourceMappingURL=scripts-page-panier.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{r as u,p as C,z as f,N as n}from"./index.Dxgx1GXj.js";import{x as o}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{p as O}from"./index.C9ScFdVV.js";import{b as I,c as L}from"./api2.js";import{g,h,i as U,j as v,k as m,l as d,m as A}from"./dom.js";import{N as R,T as b}from"./messages3.js";import{r as T,a as p}from"./dom2.js";import{l as P,a as w,b as y,c as B,E as D,d as M,r as J}from"./erreurs.js";import{b as j,e as x,a as W}from"./gardes.js";import{p as G}from"./cart-add-item.js";import{W as k}from"./cart.js";import{i as c}from"./erreurs2.js";import{r as l,a as N}from"./utils.js";import{M as q,E as z}from"./Either.DDEPhGsy.js";import"./exports.BNibT8R5.js";const H=_etats,V=a=>{a.forEach(e=>{e[0].setAttribute(m,"false"),e[1].setAttribute(d,"true")})},s=o(l(g),T),i=o(l(h),T),F=o(N(U),p),Q=o(N(v),p),Y=()=>{const a=new Map;F.forEach((e,t)=>{const r=e.getAttribute("id"),E=Q[t];if(!r)throw new Error("Le lien ne dispose pas d'ID !");if(!E)throw new Error("Le lien ne dispose pas de section correspondante !");a.set(r,[e,E]),e.addEventListener("click",_=>{_.preventDefault();const S=e.getAttribute(m)==="true";V(o(a.values(),Array.from)),!S&&(e.setAttribute(m,"true"),E.removeAttribute(d))})}),i.addEventListener("change",e=>{o(e.target,q.fromNullable,t=>t.filter(j),t=>t.map(r=>r.validity.valid),t=>t.ifJust(r=>s.toggleAttribute(A,!r)))}),s.addEventListener("click",e=>K())},K=()=>{s.textContent="Adding...",z.encase(()=>G({id:Number(i.value),quantity:1})).map(a=>{fetch(I,{body:JSON.stringify(a),credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[L]:H.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(async e=>{x(e)&&P("500 Server Error"),o(await e.json(),t=>f(t).with({body:n.select(),status:400},c,w).with({body:n.select(),status:401},c,y).with({body:n.select(),status:404},c,B).with(n._,r=>O(k,r)).otherwise(r=>o(r,D,M)),u(t=>console.debug("Panier",t)),C("items_count"),u(t=>{s.textContent="Added to cart!",new BroadcastChannel(R).postMessage({donnees:t,type:b.MiseAJourPanier}),setTimeout(()=>{i.value=i.options.item(0)?.value??"--",s.toggleAttribute(A,!0),s.textContent="Add to cart"},3e3)}))}).catch(e=>{W(e)?(J(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e),s.textContent="Add to cart"})})};document.addEventListener("DOMContentLoaded",()=>{Y()});
import{r as u,p as C,z as f,N as n}from"./index.Dxgx1GXj.js";import{x as o}from"./chunk-7BKSRZNG.F4GWJRq9.js";import{p as O}from"./index.DYThEupQ.js";import{c as I,d as L}from"./api2.js";import{h,i as U,j as g,k as v,l as m,m as d,n as A}from"./dom.js";import{N as R,T as b}from"./messages3.js";import{r as p,a as T}from"./dom2.js";import{l as P,a as w,b as y,c as B,E as D,d as M,r as J}from"./erreurs.js";import{b as j,e as x,a as W}from"./gardes.js";import{p as G}from"./cart-add-item.js";import{W as k}from"./cart.js";import{e as c}from"./erreurs2.js";import{r as l,a as N}from"./utils.js";import{M as q,E as z}from"./Either.DDEPhGsy.js";import"./exports.CqgMoAXr.js";import"./cart2.js";const H=_etats,V=a=>{a.forEach(e=>{e[0].setAttribute(m,"false"),e[1].setAttribute(d,"true")})},s=o(l(h),p),i=o(l(U),p),F=o(N(g),T),Q=o(N(v),T),Y=()=>{const a=new Map;F.forEach((e,t)=>{const r=e.getAttribute("id"),E=Q[t];if(!r)throw new Error("Le lien ne dispose pas d'ID !");if(!E)throw new Error("Le lien ne dispose pas de section correspondante !");a.set(r,[e,E]),e.addEventListener("click",_=>{_.preventDefault();const S=e.getAttribute(m)==="true";V(o(a.values(),Array.from)),!S&&(e.setAttribute(m,"true"),E.removeAttribute(d))})}),i.addEventListener("change",e=>{o(e.target,q.fromNullable,t=>t.filter(j),t=>t.map(r=>r.validity.valid),t=>t.ifJust(r=>s.toggleAttribute(A,!r)))}),s.addEventListener("click",e=>K())},K=()=>{s.textContent="Adding...",z.encase(()=>G({id:Number(i.value),quantity:1})).map(a=>{fetch(I,{body:JSON.stringify(a),credentials:"same-origin",headers:{Accept:"application/json","Content-Type":"application/json",[L]:H.nonce},method:"POST",mode:"same-origin",signal:AbortSignal.timeout(5e3)}).then(async e=>{x(e)&&P("500 Server Error"),o(await e.json(),t=>f(t).with({body:n.select(),status:400},c,w).with({body:n.select(),status:401},c,y).with({body:n.select(),status:404},c,B).with(n._,r=>O(k,r)).otherwise(r=>o(r,D,M)),u(t=>console.debug("Panier",t)),C("items_count"),u(t=>{s.textContent="Added to cart!",new BroadcastChannel(R).postMessage({donnees:t,type:b.MiseAJourPanier}),setTimeout(()=>{i.value=i.options.item(0)?.value??"--",s.toggleAttribute(A,!0),s.textContent="Add to cart"},3e3)}))}).catch(e=>{W(e)?(J(e),console.error(e)):console.error("e n'est pas une Erreur ?!",e),s.textContent="Add to cart"})})};document.addEventListener("DOMContentLoaded",()=>{Y()});
//# sourceMappingURL=scripts-page-produit.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
import{c as e,b as r}from"./dom2.js";import"./chunk-7BKSRZNG.F4GWJRq9.js";import"./erreurs.js";import"./exports.BNibT8R5.js";import"./Either.DDEPhGsy.js";const p=e(document),u=r(document);export{p as a,u as r};
import{c as e,b as r}from"./dom2.js";import"./chunk-7BKSRZNG.F4GWJRq9.js";import"./erreurs.js";import"./exports.CqgMoAXr.js";import"./Either.DDEPhGsy.js";const p=e(document),u=r(document);export{p as a,u as r};
//# sourceMappingURL=utils.js.map

View file

@ -4,14 +4,9 @@
/**
* 1. Utilise un meilleur modèle de boîte.
* 2. Rendu spécifique du texte pour Safari/iOS.
* 3. Rendu plus précis du texte.
*/
html {
box-sizing: border-box; /* 1 */
-webkit-font-smoothing: antialiased; /* 2 */
text-size-adjust: none; /* 2 */
text-rendering: geometricprecision; /* 3 */
}
/**

View file

@ -1,8 +1,22 @@
// Styles typographiques de base
/**
* 2. Rendu spécifique du texte pour Safari/iOS.
* 3. Rendu plus précis du texte.
*/
html {
-webkit-font-smoothing: antialiased; /* 2 */
text-size-adjust: none; /* 2 */
text-rendering: geometricprecision; /* 3 */
}
body {
font: 1rem/1.4 Lato;
font-optical-sizing: auto;
font-kerning: normal;
font-variant-ligatures: common-ligatures no-discretionary-ligatures no-historical-ligatures contextual;
color: var(--couleur-noir);
text-decoration-skip-ink: auto;
letter-spacing: 0.5px;
}

View file

@ -16,6 +16,5 @@ button {
&[disabled] {
cursor: not-allowed;
background: repeating-conic-gradient(var(--couleur-noir) 0% 25%, transparent 0% 100%) 1px 0.5px / 2px 2px;
}
}

View file

@ -14,7 +14,7 @@
&__produit {
display: grid;
grid-template-columns: fit-content(100%) auto;
grid-template-columns: max-content auto;
grid-template-rows: 1fr;
border-bottom: 1px solid var(--couleur-noir);
@ -39,6 +39,7 @@
place-content: center;
width: fit-content;
margin: auto;
padding: 0 var(--espace-xl);
font-style: italic;
&__nom-prix {
@ -68,9 +69,15 @@
font-style: initial;
border: 1px solid var(--couleur-noir);
button:disabled {
background: repeating-conic-gradient(var(--couleur-noir) 0% 25%, transparent 0% 100%) 1px 0.5px / 2px 2px;
}
/* Bouton d'addition de quantité */
button:first-of-type {
grid-column: 1;
width: 3rem;
min-width: 3rem;
max-width: 3rem;
}
/**
@ -79,6 +86,7 @@
*/
input[type="number"] {
grid-column: 2;
width: 100%;
text-align: center;
appearance: textfield; /* 1 */
background: initial;
@ -93,9 +101,11 @@
}
}
/* Bouton de suppression de quantité */
button:nth-of-type(2) {
grid-column: 3;
width: 3rem;
min-width: 3rem;
max-width: 3rem;
}
/* Bouton de suppression du Produit du Panier */
@ -191,7 +201,7 @@
// Instructions pour la commande et code promo
.panneau__instructions-code-promo {
width: 100%;
padding: var(--espace-l) 0;
padding: var(--espace-l) var(--espace-xl);
text-align: center;
border-bottom: 1px solid var(--couleur-noir);
@ -202,6 +212,7 @@
&__instructions {
resize: vertical;
display: block; /* 1 */
width: 100%;
margin: auto; /* 1 */
margin-bottom: var(--espace-s); /* 2 */
padding: var(--espace-s);

View file

@ -29,7 +29,8 @@
}
.panneau {
flex-basis: 50%;
flex: 1 1 30rem;
min-width: 30rem;
border-top: 1px solid var(--couleur-noir);
border-bottom: 1px solid var(--couleur-noir);

View file

@ -3,6 +3,7 @@ export const CHEMIN_API_REST = "wp-json";
export const ROUTE_API_PANIER = `/${CHEMIN_API_REST}/wc/store/cart`;
export const ROUTE_API_AJOUTE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/add-item`;
export const ROUTE_API_RETIRE_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/remove-item`;
export const ROUTE_API_MAJ_ARTICLE_PANIER = `/${CHEMIN_API_REST}/wc/store/cart/update-item`;
// En-têtes
export const ENTETE_WC_NONCE = "Nonce";

View file

@ -0,0 +1,4 @@
export const CATALOG_VISIBILITIES = {
INVISIBLE: "invisible",
VISIBLE: "visible",
} as const;

View file

@ -77,6 +77,12 @@ export const leveUnknownError = (erreur: unknown): never => {
throw new UnknownError(erreur);
};
/**
* Reporte une Erreur, sous forme d'erreur console et au service GlitchTip.
*
* @param erreur
* @returns L'ID Sentry de l'évènement capturé.
*/
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Permet d'indiquer
le type d'Erreur à l'appel de la fonction. */
export const reporteErreur = <E extends Error>(erreur: E): string => {
@ -85,12 +91,15 @@ export const reporteErreur = <E extends Error>(erreur: E): string => {
};
/**
* Reporte une Erreur au service GlitchTip puis la lève sous forme d'Exception.
* Reporte une Erreur, sous forme d'erreur console et au service GlitchTip, puis la lève sous forme
* d'Exception.
*
* @param erreur
* @returns never Lève une Erreur et ne retourne donc rien.
*/
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Permet d'indiquer
le type d'Erreur à l'appel de la fonction. */
export const reporteEtLeveErreur = <E extends Error>(erreur: E): never => {
captureException(erreur);
reporteErreur<E>(erreur);
throw erreur;
};

View file

@ -11,7 +11,7 @@ import {
leveUnauthorizedError,
type UnknownError,
} from "./erreurs.ts";
import { isWCError } from "./schemas/erreurs.ts";
import { estWCError } from "./schemas/erreurs.ts";
type ArgumentsPostBackendWC = {
corps: BodyInit;
@ -39,9 +39,9 @@ export const postBackendWC = (args: ArgumentsPostBackendWC) =>
export const traiteReponseBackendWCSelonCodesHTTP = (corpsReponse: unknown, schemaReponse: GenericSchema) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
.with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))
// Réponses inconnues

View file

@ -0,0 +1,8 @@
import * as v from "valibot";
export const WCStoreCartUpdateItemArgsSchema = v.object({
/** Unique identifier (key) for the basket item to update. */
key: v.string(),
/** New quantity of the item in the basket. */
quantity: v.pipe(v.number(), v.minValue(1)),
});

View file

@ -1,27 +1,29 @@
import * as v from "valibot";
const WCStoreCartItemTotalsSchema = v.object({
currency_code: v.string(),
currency_decimal_separator: v.string(),
currency_minor_unit: v.number(),
currency_prefix: v.string(),
currency_suffix: v.string(),
currency_symbol: v.string(),
currency_thousand_separator: v.string(),
total_discount: v.string(),
total_discount_tax: v.string(),
});
import { CATALOG_VISIBILITIES } from "../../constantes/cart.ts";
const WCStoreCartItemShippingRateSchema = v.object({
name: v.string(),
package_id: v.union([v.number(), v.string()]),
});
const WCStoreCartItemSchema = v.object({
code: v.string(),
discount_type: v.string(),
shipping_rates: v.array(WCStoreCartItemShippingRateSchema),
totals: v.array(WCStoreCartItemTotalsSchema),
export const WCStoreCartItemSchema = v.object({
"backorders_allowed": v.boolean(),
"catalog_visibility": v.enum(CATALOG_VISIBILITIES),
"description": v.string(),
"extensions": v.unknown(),
"id": v.number(),
"images": v.array(v.unknown()),
"item_data": v.array(v.unknown()),
"key": v.string(),
"low_stock_remaining": v.union([v.null()]),
"name": v.string(),
"permalink": v.pipe(v.string(), v.url()),
"prices": v.unknown(),
"quantity": v.number(),
"quantity_limits": v.unknown(),
"short_description": v.string(),
"show_backorder_badge": v.boolean(),
"sku": v.string(),
"sold_individually": v.boolean(),
"totals": v.unknown(),
"type": v.string(),
"variation": v.array(v.unknown()),
});
export const WCStoreCartSchema = v.object({
@ -32,7 +34,7 @@ export const WCStoreCartSchema = v.object({
extensions: v.unknown(),
fees: v.unknown(),
has_calculated_shipping: v.unknown(),
items: v.array(v.unknown()),
items: v.array(WCStoreCartItemSchema),
items_count: v.pipe(v.number(), v.integer()),
items_weight: v.unknown(),
needs_payment: v.unknown(),

View file

@ -15,4 +15,4 @@ export const WCErrorSchema = v.object({
status: v.number(),
});
export const isWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);
export const estWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);

View file

@ -0,0 +1,5 @@
import type { InferOutput } from "valibot";
import type { WCStoreCartUpdateItemArgsSchema } from "../../schemas/cart-update-item.ts";
export type WCStoreCartUpdateItemArgs = InferOutput<typeof WCStoreCartUpdateItemArgsSchema>;

View file

@ -1,5 +1,6 @@
import type { InferOutput } from "valibot";
import type { WCStoreCartSchema } from "../../schemas/cart.ts";
import type { WCStoreCartItemSchema, WCStoreCartSchema } from "../../schemas/cart.ts";
export type WCStoreCartItem = InferOutput<typeof WCStoreCartItemSchema>;
export type WCStoreCart = InferOutput<typeof WCStoreCartSchema>;

View file

@ -3,13 +3,16 @@ import { pipe, prop, tap } from "remeda";
import { match, P } from "ts-pattern";
import { parse } from "valibot";
import type { WCStoreCart, WCStoreCartItem } from "./lib/types/api/cart";
import type { WCStoreCartRemoveItemArgs } from "./lib/types/api/cart-remove-item";
import type { WCStoreCartUpdateItemArgs } from "./lib/types/api/cart-update-item";
import type { MiseAJourPanierMessage } from "./lib/types/messages";
import { ROUTE_API_RETIRE_ARTICLE_PANIER } from "./constantes/api.ts";
import { ROUTE_API_MAJ_ARTICLE_PANIER, ROUTE_API_RETIRE_ARTICLE_PANIER } from "./constantes/api.ts";
import {
ATTRIBUT_CLE_PANIER,
ATTRIBUT_CONTIENT_ARTICLES,
SELECTEUR_BOUTON_ADDITION_QUANTITE,
SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE,
SELECTEUR_BOUTON_SUPPRESSION_PANIER,
SELECTEUR_CHAMP_QUANTITE,
@ -17,12 +20,7 @@ import {
SELECTEUR_ENTREES_PANIER,
} from "./constantes/dom.ts";
import { NOM_CANAL_BOUTON_PANIER, TYPES_MESSAGES } from "./constantes/messages.ts";
import {
recupereElementAvecSelecteur,
recupereElementOuLeve,
recupereElementsAvecSelecteur,
recupereElementsOuLeve,
} from "./lib/dom.ts";
import { recupereElementAvecSelecteur, recupereElementOuLeve, recupereElementsOuLeve } from "./lib/dom.ts";
import {
DOMElementAbsentError,
ErreurInconnue,
@ -38,28 +36,11 @@ import { estError, estReponse500 } from "./lib/gardes.ts";
import { valideMessageMajPanier } from "./lib/messages.ts";
import { postBackendWC } from "./lib/reseau.ts";
import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/cart-remove-item.ts";
import { WCStoreCartUpdateItemArgsSchema } from "./lib/schemas/cart-update-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
import { isWCError } from "./lib/schemas/erreurs.ts";
import { estWCError } from "./lib/schemas/erreurs.ts";
import { recupereElementDocumentEither, recupereElementsDocumentEither } from "./lib/utils.ts";
/**
* Récupère les <article> dans le panier
* Itère dessus
* Récupère le button de suppression
* Si n'existe pas pour une raison ou une autre
* Ne rien faire
* Créé un eventListener au click
* Récupère la clé Panier de l'attribut data-cle-panier
* Si n'existe pas pour une raison ou une autre
* Retirer l'élément du DOM
* Réalise une requête API pour supprimer l'entrée du Panier
* Remplacer le texte du bouton remove avec un picto de chargement
* Au retour avec succès, retirer l'élément du DOM
* Sinon, afficher un message à l'Utilisateur avec des pistes de résolution (?)
*
* TODO: Prévoir le cas il n'y a pas de Produits dans le Panier
*/
/** États utiles pour les scripts de la page. */
type EtatsPage = {
/** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */
@ -80,43 +61,130 @@ const CONTENEUR_PANIER: HTMLElement = pipe(
recupereElementOuLeve,
);
/**
* Fonction utilitaire pour rapidement créer et reporter une Erreur DOMElementAbsent.
*
* @param message
* @returns L'ID Sentry de l'évènement capturé.
*/
const reporteErreurDOMElementAbsent = (message: string): string =>
pipe(
new DOMElementAbsentError(message),
reporteErreur,
);
const recupereElementDansEntreePanierOuLeve =
/* eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- Nécessaire pour
documenter le type d'Element attendu */
(entree: HTMLElement) => <E extends Element = Element>(selecteur: string) =>
pipe(
recupereElementAvecSelecteur(entree)<E>(selecteur),
recupereElementOuLeve,
);
const initialiseScriptsPagePanier = (): void => {
ENTREES_PANIER.forEach((entree: HTMLElement) => {
const maybeClePanier: Maybe<string> = Maybe.fromNullable(entree.getAttribute(ATTRIBUT_CLE_PANIER));
const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);
recupereElementAvecSelecteur(entree)<HTMLButtonElement>(SELECTEUR_BOUTON_SUPPRESSION_PANIER)
// Remplace la SyntaxError par une Erreur plus détaillée et parlante
.ifLeft(() =>
pipe(
new DOMElementAbsentError(
`L'entrée « ${maybeClePanier.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de suppression.`,
),
reporteErreur,
)
)
// Créé l'Écouteur d'Événement pour le click sur le Bouton
.ifRight((boutonPanier: HTMLButtonElement) => {
boutonPanier.addEventListener("click", (): void => {
// Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement
const clePanier = maybeClePanier.ifNothing(() => {
entree.remove();
return;
})
.orDefault("CLE_PANIER_INEXISTANTE");
// Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement
const clePanier: string = Maybe
.fromNullable(entree.getAttribute(ATTRIBUT_CLE_PANIER))
.ifNothing(() => {
entree.remove();
return;
})
.orDefault("CLE_PANIER_INEXISTANTE");
// TODO: Créer une boucle d'animation
// Affiche un texte de chargement dans le Bouton
boutonPanier.textContent = "C= C= C= C= C=┌(;・ω・)┘";
// Récupère les attributs et éléments utilisés dans le script
const boutonSoustraction = recupereElementDansEntree<HTMLButtonElement>(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE);
const champQuantite = recupereElementDansEntree<HTMLInputElement>(SELECTEUR_CHAMP_QUANTITE);
const boutonAddition = recupereElementDansEntree<HTMLButtonElement>(SELECTEUR_BOUTON_ADDITION_QUANTITE);
const boutonSuppression = recupereElementDansEntree<HTMLButtonElement>(SELECTEUR_BOUTON_SUPPRESSION_PANIER);
// Supprime la ligne du Panier au clic sur le bouton de suppression
boutonSuppression.addEventListener("click", (): void => {
// TODO: Créer une boucle d'animation
// Affiche un texte de chargement dans le Bouton
boutonSuppression.textContent = "C= C= C= C= C=┌(;・ω・)┘";
Either
.encase<Error, WCStoreCartRemoveItemArgs>(() => parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier }))
.map(
(args: WCStoreCartRemoveItemArgs) => {
postBackendWC({
corps: JSON.stringify(args),
nonce: ETATS_PAGE.nonce,
route: ROUTE_API_RETIRE_ARTICLE_PANIER,
})
.then(async (reponse: Response) => {
// Traite le cas d'erreur 500
if (estReponse500(reponse)) leveServerError("500 Server Error");
pipe(
// Récupère la Réponse
await reponse.json(),
// Traite tous les codes HTTPs possibles
(corpsReponse: unknown) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
// Réponses inconnues
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>)),
prop("items_count"),
tap((nombreArticlesPanier: number) => {
console.debug("nombreArticlesPanier", nombreArticlesPanier);
// Émet un Message avec le nouveau nombre de Produits dans le Panier
const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);
CANAL_BOUTON_PANIER.postMessage({
donnees: nombreArticlesPanier,
type: TYPES_MESSAGES.MiseAJourPanier,
});
// Retire l'entrée du Panier du DOM
entree.remove();
}),
);
})
.catch((e: unknown) => {
if (estError(e)) {
reporteErreur(e);
} else {
console.error("e n'est pas une Erreur ?!", e);
}
});
},
);
});
// Retire une unité à une ligne du Panier au clic sur le bouton de soustraction
boutonSoustraction.addEventListener("click", () => {
Maybe
.fromNullable(champQuantite.valueAsNumber)
.filter((valeur) => valeur > 1)
.ifJust((valeur) => {
// Modifie des éléments du DOM pour signifier le traitement de la requête et empêcher des
// doubles exécutions
boutonSuppression.textContent = "C= C= C= C= C=┌(;・ω・)┘";
boutonSoustraction.toggleAttribute("disabled");
boutonAddition.toggleAttribute("disabled");
boutonSuppression.toggleAttribute("disabled");
// Chaîne de la requête
Either
.encase<Error, WCStoreCartRemoveItemArgs>(() => parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier }))
// Valide les arguments de la requête
.encase<Error, WCStoreCartUpdateItemArgs>(() =>
parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur - 1 })
)
.map(
(args: WCStoreCartRemoveItemArgs) => {
(args: WCStoreCartUpdateItemArgs) => {
// Réalise la requête
postBackendWC({
corps: JSON.stringify(args),
nonce: ETATS_PAGE.nonce,
route: ROUTE_API_RETIRE_ARTICLE_PANIER,
route: ROUTE_API_MAJ_ARTICLE_PANIER,
})
.then(async (reponse: Response) => {
// Traite le cas d'erreur 500
@ -129,30 +197,42 @@ const initialiseScriptsPagePanier = (): void => {
(corpsReponse: unknown) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
.with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
// Réponses inconnues
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>)),
prop("items_count"),
tap((nombreArticlesPanier: number) => {
// Émet un Message avec le nouveau nombre de Produits dans le Panier
tap((reponse: WCStoreCart) => {
// Émet un message pour la mise à jour du bouton du Panier
const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);
CANAL_BOUTON_PANIER.postMessage({
donnees: nombreArticlesPanier,
donnees: reponse.items_count,
type: TYPES_MESSAGES.MiseAJourPanier,
});
// Retire l'entrée du Panier du DOM
entree.remove();
}),
tap((reponse: WCStoreCart) => {
Maybe
.fromNullable(
reponse.items
.find((ligne: WCStoreCartItem) => clePanier === ligne.key)
?.quantity,
)
.ifJust((nouvelleQuantite: number) =>
champQuantite.setAttribute("value", String(nouvelleQuantite))
);
boutonSoustraction.toggleAttribute("disabled");
boutonAddition.toggleAttribute("disabled");
boutonSuppression.toggleAttribute("disabled");
boutonSuppression.textContent = "Remove";
}),
);
})
.catch((e: unknown) => {
if (estError(e)) {
reporteErreur(e);
console.error(e);
} else {
console.error("e n'est pas une Erreur ?!", e);
}
@ -160,27 +240,88 @@ const initialiseScriptsPagePanier = (): void => {
},
);
});
});
});
recupereElementAvecSelecteur(entree)<HTMLButtonElement>(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE)
// Remplace la SyntaxError par une Erreur plus détaillée et parlante
.ifLeft(() =>
pipe(
new DOMElementAbsentError(
`L'entrée « ${maybeClePanier.orDefault("CLE_PANIER_INEXISTANTE")} » n'a pas de Bouton de soustraction.`,
),
reporteErreur,
)
)
.ifRight((bouton: HTMLButtonElement) => {
bouton.addEventListener("click", () => {
const champQuantite: HTMLInputElement = pipe(
recupereElementAvecSelecteur(entree)<HTMLInputElement>(SELECTEUR_CHAMP_QUANTITE),
recupereElementOuLeve,
);
const valeur: number = champQuantite.valueAsNumber;
// Ajoute une unité à une ligne du Panier au clic sur le bouton d'addition
boutonAddition.addEventListener("click", () => {
Maybe
.fromNullable(champQuantite.valueAsNumber)
.ifJust((valeur) => {
// Modifie des éléments du DOM pour signifier le traitement de la requête et empêcher des
// doubles exécutions
boutonSuppression.textContent = "C= C= C= C= C=┌(;・ω・)┘";
boutonSoustraction.toggleAttribute("disabled");
boutonAddition.toggleAttribute("disabled");
boutonSuppression.toggleAttribute("disabled");
Either
// Valide les arguments de la requête
.encase<Error, WCStoreCartUpdateItemArgs>(() =>
parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur + 1 })
)
.map(
(args: WCStoreCartUpdateItemArgs) => {
// Réalise la requête
postBackendWC({
corps: JSON.stringify(args),
nonce: ETATS_PAGE.nonce,
route: ROUTE_API_MAJ_ARTICLE_PANIER,
})
.then(async (reponse: Response) => {
// Traite le cas d'erreur 500
if (estReponse500(reponse)) leveServerError("500 Server Error");
pipe(
// Récupère la Réponse
await reponse.json(),
// Traite tous les codes HTTPs possibles
(corpsReponse: unknown) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
// Réponses inconnues
.otherwise(e => pipe(e, ErreurInconnue, leveErreur<UnknownError>)),
tap((reponse: WCStoreCart) => {
// Émet un message pour la mise à jour du bouton du Panier
const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);
CANAL_BOUTON_PANIER.postMessage({
donnees: reponse.items_count,
type: TYPES_MESSAGES.MiseAJourPanier,
});
}),
tap((reponse: WCStoreCart) => {
Maybe
.fromNullable(
reponse.items
.find((ligne: WCStoreCartItem) => clePanier === ligne.key)
?.quantity,
)
.ifJust((nouvelleQuantite: number) =>
champQuantite.setAttribute("value", String(nouvelleQuantite))
);
boutonSoustraction.toggleAttribute("disabled");
boutonAddition.toggleAttribute("disabled");
boutonSuppression.toggleAttribute("disabled");
boutonSuppression.textContent = "Remove";
}),
);
})
.catch((e: unknown) => {
if (estError(e)) {
reporteErreur(e);
} else {
console.error("e n'est pas une Erreur ?!", e);
}
});
},
);
});
});
});
});
};

View file

@ -14,7 +14,6 @@ import {
ATTRIBUT_DESACTIVE,
ATTRIBUT_HIDDEN,
SELECTEUR_BOUTON_AJOUT_PANIER,
SELECTEUR_BOUTON_PANIER,
SELECTEUR_LIENS_ONGLETS,
SELECTEUR_SECTIONS_CONTENUS,
SELECTEUR_SELECTEUR_QUANTITE,
@ -34,7 +33,7 @@ import {
import { estError, estHTMLSelectElement, estReponse500 } from "./lib/gardes.ts";
import { parseWCStoreCartAddItemArgs } from "./lib/schemas/cart-add-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/cart.ts";
import { isWCError } from "./lib/schemas/erreurs.ts";
import { estWCError } from "./lib/schemas/erreurs.ts";
import { recupereElementDocumentEither, recupereElementsDocumentEither } from "./lib/utils.ts";
/** États utiles pour les scripts de la page. */
@ -182,9 +181,9 @@ const ajouteProduitAuPanier = () => {
(corpsReponse: unknown) =>
match(corpsReponse)
// Réponses problématiques
.with({ body: P.select(), status: 400 }, isWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, isWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, isWCError, leveNotFoundError)
.with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)
.with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)
.with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)
// Réponse OK (201)
.with(P._, corpsOkInconnu => parse(WCStoreCartSchema, corpsOkInconnu))
// Réponses inconnues

View file

@ -95,7 +95,6 @@
<div class="panneau__instructions-code-promo">
<textarea
class="panneau__instructions-code-promo__instructions"
cols="80"
id="instructions"
maxlength="2000"
minlength="10"