origam 2.18.18 → 2.18.20

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