origam 2.18.18 → 2.18.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +124 -6
  4. package/dist/src/assets/css/tokens/light.css +62 -3
  5. package/dist/src/assets/scss/tokens/_dark.scss +124 -6
  6. package/dist/src/assets/scss/tokens/_light.scss +62 -3
  7. package/dist/src/components/Audio/OrigamAudio.vue +66 -2
  8. package/dist/src/components/Chip/OrigamChip.vue +34 -0
  9. package/dist/src/components/Field/OrigamField.vue +76 -3
  10. package/dist/src/components/List/OrigamList.vue +90 -3
  11. package/dist/src/components/Main/OrigamMain.vue +2 -2
  12. package/dist/src/components/Media/OrigamMediaScrubber.vue +11 -1
  13. package/dist/src/components/SliderField/OrigamSliderField.vue +138 -3
  14. package/dist/src/components/SliderField/OrigamSliderFieldTrack.vue +12 -1
  15. package/dist/src/components/Snackbar/OrigamSnackbar.vue +2 -2
  16. package/dist/src/components/Switch/OrigamSwitch.vue +32 -0
  17. package/dist/src/components/TextField/OrigamTextField.vue +3 -1
  18. package/dist/src/components/Video/OrigamVideo.vue +11 -1
  19. package/dist/src/composables/Commons/layout.composable.cjs +2 -2
  20. package/dist/src/composables/Commons/layout.composable.d.ts +16 -2
  21. package/dist/src/composables/Commons/layout.composable.js +1 -1
  22. package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +44 -9
  23. package/dist/src/composables/Commons/theme-props-resolver.composable.d.ts +33 -1
  24. package/dist/src/composables/Commons/theme-props-resolver.composable.js +42 -10
  25. package/dist/src/consts/Commons/variant-preset.const.cjs +8 -0
  26. package/dist/src/consts/Commons/variant-preset.const.d.ts +60 -0
  27. package/dist/src/consts/Commons/variant-preset.const.js +2 -0
  28. package/dist/src/consts/index.cjs +11 -0
  29. package/dist/src/consts/index.d.ts +1 -0
  30. package/dist/src/consts/index.js +1 -0
  31. package/dist/src/interfaces/Commons/theme.interface.d.ts +33 -0
  32. package/dist/src/interfaces/Masonry/masonry.interface.d.ts +2 -2
  33. package/dist/src/origam.cjs +2 -1
  34. package/dist/src/origam.js +8 -2
  35. package/dist/src/types/Commons/variant-preset.type.cjs +1 -0
  36. package/dist/src/types/Commons/variant-preset.type.d.ts +73 -0
  37. package/dist/src/types/Commons/variant-preset.type.js +0 -0
  38. package/dist/src/types/index.cjs +11 -0
  39. package/dist/src/types/index.d.ts +1 -0
  40. package/dist/src/types/index.js +1 -0
  41. package/dist/src/types/tokens.type.d.ts +1 -1
  42. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -18,6 +18,148 @@ This project follows [Semantic Versioning](https://semver.org).
18
18
 
19
19
  ## [Unreleased]
20
20
 
21
+ ## [2.18.19] - 2026-09-30
22
+
23
+ ### Changed — ⚠️ RUPTURE : `useLayout` renommé `useLayoutMain`
24
+
25
+ Le DS exportait `useLayout`, **le même nom que l'auto-import natif de Nuxt**
26
+ (`#app/composables/layout`). Chez tout consommateur Nuxt, c'est le nôtre qui
27
+ gagnait et celui du framework qui était ignoré — relevé dans le journal d'un
28
+ serveur de dev, pas par un test :
29
+
30
+ ```
31
+ WARN [NUXT_B6002] useLayout is already auto-imported by Nuxt as a built-in
32
+ WARN Duplicated imports "useLayout", the one from "#app/composables/layout"
33
+ has been ignored
34
+ ```
35
+
36
+ ⛔ Ce n'était pas cosmétique : notre version **lève une exception** sans provider
37
+ Origam (`throw new Error('[Origam] Could not find injected layout')`). Tout code
38
+ Nuxt appelant `useLayout` hors d'un `OrigamLayout` plantait au lieu de recevoir
39
+ le composable du framework.
40
+
41
+ Le nouveau nom dit ce qu'il fait — il expose la zone **main** (`mainRect`,
42
+ `mainStyles`, `mainId`) — et s'aligne sur `useLayoutItem` et `useCreateLayout`,
43
+ avec lesquels il partage le contrat `ORIGAM_LAYOUT_KEY`. Rupture d'API publique
44
+ assumée, livrée en mineure conformément à la politique du dépôt.
45
+
46
+ ### Added — ADR-005 lot 1 : le variant devient un preset de props
47
+
48
+ Le mécanisme que l'ADR décrivait depuis des mois **n'avait jamais été
49
+ construit** : ni `variant-preset.type.ts`, ni table de presets, ni code
50
+ d'application. Seule la garde `no-variant-css` existait, et elle ne faisait que
51
+ **geler** 36 violations sans jamais en retirer une.
52
+
53
+ Ce lot pose le mécanisme, pas les conversions : le type, le registre, le **rang
54
+ dans le resolver** (site d'appel > thème > preset > `withDefaults`, l'ordre
55
+ arbitré en round 2 de l'ADR), la clé `IOrigamTheme.variants` et sa fusion à
56
+ l'installation. 19 specs, dont deux qui épinglent des **no-op silencieux** que le
57
+ lot risquait : l'early-out qui ne patchait rien sans thème enregistré — le cas
58
+ par défaut depuis #360 — et l'union des clés limitée au variant actif, qui gelait
59
+ un basculement à l'exécution.
60
+
61
+ La preuve de non-régression est une VRT : les 7 variants d'`OrigamBtn` restent
62
+ **pixel-identiques** à leurs références.
63
+
64
+ Mesure conservée dans l'en-tête de la garde : chaque `!important` d'un bloc
65
+ variant n'existait que pour battre la déclaration **inline**, jamais l'utilitaire
66
+ tokenisé que la règle scopée battait déjà sur la spécificité. Une fois le variant
67
+ résolu au rang des props, la bataille de cascade **n'a plus lieu**.
68
+
69
+ ### Fixed — le menu de navigation était disproportionné sur les 8 identités
70
+
71
+ Signalé par le propriétaire. Mesuré sur la section « Features » (10 items), en
72
+ mesurant la **pastille** et non le texte :
73
+
74
+ | | avant | après |
75
+ |---|---|---|
76
+ | rangée | 48px | **36px** |
77
+ | côtés gauche/droite | 12-15px | **8-11px** |
78
+ | haut/bas | 5-7px | **8-11px** |
79
+ | écart entre pastilles | **0px** sur 7 identités sur 8 | **2px** |
80
+ | largeur du menu | **180px fixes** pour 114px de contenu | **128-140px** |
81
+ | hauteur du menu | ~590px | **394px** |
82
+
83
+ Quatre causes distinctes :
84
+
85
+ - `--origam-list---padding-block-*` valait **0 sur sept identités** — la matrice
86
+ runtime l'émet à zéro pour chaque marque, et `origam` n'y échappait que par le
87
+ reset généré qu'elle traîne encore (#609) ;
88
+ - l'indent `-8px` du mode nav ne s'applique qu'au côté *start*, d'où une
89
+ asymétrie gauche/droite sur cinq identités ;
90
+ - aucun écart entre items, et la liste étant un conteneur **bloc**, `gap` n'était
91
+ pas disponible sans la passer en flex — ce qui toucherait ~200 consommateurs ;
92
+ - `layouts/default.vue` posait `min-width: 180px` **et** `width: 180px`, une
93
+ largeur figée pour 114px de contenu utile.
94
+
95
+ ⚠️ La rangée à 36px passe **sous la cible tactile 44×44** de WCAG 2.5.5.
96
+ Compromis assumé par le propriétaire pour un menu d'en-tête pointé à la souris,
97
+ et confiné à `&--nav` : une liste de contenu garde ses 48px. Les trois valeurs
98
+ sont des **tokens déclarés**, pas des littéraux.
99
+
100
+ ### Fixed — le catalogue marketing vendait un pipeline supprimé (#960)
101
+
102
+ Le tableau de tokens de **chaque** page composant affichait une légende
103
+ promettant `--origam-<composant>---<propriété>` au-dessus d'un bouton **Copier**
104
+ qui livrait `alert.background-color` pour `{color.surface.disabled}`.
105
+
106
+ 523 des 603 lignes re-dérivées ; **80 abandonnées sans qu'aucune soit inventée**
107
+ — repointer vers un token voisin aurait remplacé un nom qui ne résout rien par un
108
+ nom qui résout *la mauvaise chose*. Vérifié par un second analyseur de feuilles
109
+ écrit indépendamment : 3204 déclarations des deux côtés, 0 divergence.
110
+ `pipelineNote` supprimé partout, baseline 230 → 0.
111
+
112
+ ### Fixed — trois attributs ARIA morts sur tout `OrigamSelect` (#938)
113
+
114
+ `OrigamTextField` appelait `filterInputAttrs(attrs)` **une seule fois dans le
115
+ corps de `setup()`**, ce qui **copie** les clés hors du proxy `$attrs` et fige la
116
+ distribution au montage. `aria-expanded` restait donc à `"false"` listbox ouvert,
117
+ et `aria-controls` / `aria-activedescendant` n'étaient **jamais posés** : un
118
+ lecteur d'écran annonçait le select comme toujours replié, et la navigation
119
+ clavier était muette de bout en bout.
120
+
121
+ C'est la règle « un prop lu *eagerly* dans `setup()` ne voit jamais le thème »
122
+ appliquée aux `$attrs`. Le spec qui gardait ce contrat expirait à **45,7 s** sans
123
+ jamais atteindre son assertion ; il passe en **796 ms** et tient 25/25 en
124
+ `--repeat-each=5`.
125
+
126
+ ⛔ Ce spec **ne tournait pas en CI** : il figurait parmi les 174 enregistrées
127
+ comme non exécutées. La garantie n'existait donc pas. Il entre dans `GREEN_SPECS`
128
+ (81 → 82 specs réellement exécutées).
129
+
130
+ ### Fixed — #597, #596 : 58 canaux de thème morts résorbés
131
+
132
+ Btn, DataTable, Grid, List (#597) puis Tabs, Toolbar, Pagination (#596).
133
+ **Aucune** variante ni état de `Tabs` n'était déclaré — 17 canaux, donc toute
134
+ édition de thème sur eux était un **no-op silencieux**.
135
+
136
+ 13 alias de nommage DataTable **renommés au lieu d'être dupliqués** : net nul au
137
+ lieu de +13 tokens, confirmé par l'ensemble émetteur passant de 3142 à 3129.
138
+
139
+ ## [2.18.18] - 2026-09-30
140
+
141
+ ### Fixed — #596 : Tabs, Toolbar et Pagination (26 canaux morts)
142
+
143
+ 299 → 273 canaux de thème morts. Le constat qui justifie le tag à lui seul :
144
+ **aucune** des variantes ni des états de `Tabs` n'était déclarée (17 canaux), donc
145
+ toute édition de thème sur eux était un no-op silencieux.
146
+
147
+ Zéro changement de rendu, **mesuré par canal** : Playwright/Chromium contre le
148
+ Histoire statique, light et dark, A (livré) vs B (token neutralisé à `initial`,
149
+ donc le repli reconstitue le rendu d'avant) vs C (sonde) — 52 lignes, A==B
150
+ partout, C!=A partout.
151
+
152
+ ### Fixed — six versions publiées sans entrée de changelog
153
+
154
+ `v2.18.12` à `v2.18.17` étaient **taguées et publiées sur npm** mais absentes de
155
+ ce document — et donc de la page publique `/changelog`, qui annonçait 2.18.11
156
+ quand npm servait 2.18.16.
157
+
158
+ ⚠️ Le job « Changelog drift check » ne pouvait pas le voir : il vérifie que la
159
+ constante marketing colle au document, **jamais que le document couvre les
160
+ tags**. Angle mot documenté dans l'en-tête de `generate-changelog.mjs`.
161
+
162
+
21
163
  ## [2.18.17] - 2026-09-29
22
164
 
23
165
  Dix-huit commits, dont la réparation qui débloquait `Type-check (vue-tsc)` sur