origam 2.18.21 → 2.20.0

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 (187) hide show
  1. package/CHANGELOG.md +138 -0
  2. package/dist/src/assets/css/main.css +1 -1
  3. package/dist/src/assets/css/tokens/dark.css +0 -6
  4. package/dist/src/assets/css/tokens/light.css +0 -3
  5. package/dist/src/assets/scss/tokens/_dark.scss +0 -6
  6. package/dist/src/assets/scss/tokens/_light.scss +0 -3
  7. package/dist/src/components/Alert/OrigamAlert.vue +20 -0
  8. package/dist/src/components/App/OrigamAppBar.vue +20 -0
  9. package/dist/src/components/Audio/OrigamAudio.vue +20 -0
  10. package/dist/src/components/Avatar/OrigamAvatar.vue +20 -0
  11. package/dist/src/components/Avatar/OrigamAvatarGroup.vue +20 -0
  12. package/dist/src/components/Badge/OrigamBadge.vue +12 -0
  13. package/dist/src/components/Blockquote/OrigamBlockquote.vue +20 -0
  14. package/dist/src/components/BottomNav/OrigamBottomNav.vue +20 -0
  15. package/dist/src/components/Bracket/OrigamBracket.vue +12 -0
  16. package/dist/src/components/Bracket/OrigamBracketCompetitor.vue +20 -0
  17. package/dist/src/components/Bracket/OrigamBracketMatch.vue +33 -5
  18. package/dist/src/components/Breadcrumb/OrigamBreadcrumb.vue +20 -0
  19. package/dist/src/components/Breadcrumb/OrigamBreadcrumbDivider.vue +8 -0
  20. package/dist/src/components/Breadcrumb/OrigamBreadcrumbItem.vue +20 -0
  21. package/dist/src/components/Btn/OrigamBtn.vue +20 -0
  22. package/dist/src/components/Btn/OrigamBtnGroup.vue +20 -0
  23. package/dist/src/components/Btn/OrigamBtnToggle.vue +20 -0
  24. package/dist/src/components/Calendar/OrigamCalendar.vue +21 -1
  25. package/dist/src/components/Card/OrigamCard.vue +20 -0
  26. package/dist/src/components/Card/OrigamCardHeader.vue +20 -0
  27. package/dist/src/components/Card/OrigamCardText.vue +20 -0
  28. package/dist/src/components/Carousel/OrigamCarousel.vue +20 -0
  29. package/dist/src/components/Carousel/OrigamCarouselItem.vue +20 -0
  30. package/dist/src/components/Chart/OrigamChart.vue +25 -1
  31. package/dist/src/components/Chart/OrigamChartBoxPlot.vue +12 -0
  32. package/dist/src/components/Chart/OrigamChartBullet.vue +12 -0
  33. package/dist/src/components/Chart/OrigamChartCandlestick.vue +12 -0
  34. package/dist/src/components/Chart/OrigamChartCartesian.vue +12 -0
  35. package/dist/src/components/Chart/OrigamChartGauge.vue +12 -0
  36. package/dist/src/components/Chart/OrigamChartHeatmap.vue +12 -0
  37. package/dist/src/components/Chart/OrigamChartHoneycomb.vue +12 -0
  38. package/dist/src/components/Chart/OrigamChartMap.vue +12 -0
  39. package/dist/src/components/Chart/OrigamChartPareto.vue +12 -0
  40. package/dist/src/components/Chart/OrigamChartPictorial.vue +12 -0
  41. package/dist/src/components/Chart/OrigamChartPolar.vue +12 -0
  42. package/dist/src/components/Chart/OrigamChartPolarBar.vue +12 -0
  43. package/dist/src/components/Chart/OrigamChartPyramid.vue +12 -0
  44. package/dist/src/components/Chart/OrigamChartRadar.vue +12 -0
  45. package/dist/src/components/Chart/OrigamChartSankey.vue +12 -0
  46. package/dist/src/components/Chart/OrigamChartSparkline.vue +12 -0
  47. package/dist/src/components/Chart/OrigamChartStreamgraph.vue +12 -0
  48. package/dist/src/components/Chart/OrigamChartSunburst.vue +12 -0
  49. package/dist/src/components/Chart/OrigamChartTreemap.vue +12 -0
  50. package/dist/src/components/Chart/OrigamChartVariwide.vue +12 -0
  51. package/dist/src/components/Chart/OrigamChartWordCloud.vue +12 -0
  52. package/dist/src/components/Checkbox/OrigamCheckbox.vue +20 -0
  53. package/dist/src/components/Checkbox/OrigamCheckboxBtn.vue +12 -0
  54. package/dist/src/components/Checkbox/OrigamCheckboxGroup.vue +20 -0
  55. package/dist/src/components/Chip/OrigamChip.vue +20 -0
  56. package/dist/src/components/Chip/OrigamChipGroup.vue +20 -0
  57. package/dist/src/components/Clipboard/OrigamClipboard.vue +20 -0
  58. package/dist/src/components/Code/OrigamCode.vue +20 -0
  59. package/dist/src/components/ColorPicker/OrigamColorPicker.vue +20 -0
  60. package/dist/src/components/ColorPickerField/OrigamColorPickerField.vue +20 -0
  61. package/dist/src/components/ConfirmWrapper/OrigamConfirmWrapper.vue +4 -0
  62. package/dist/src/components/ContextualMenu/OrigamContextualMenu.vue +20 -0
  63. package/dist/src/components/Counter/OrigamCounter.vue +20 -0
  64. package/dist/src/components/DataList/OrigamDataList.vue +20 -0
  65. package/dist/src/components/DataList/OrigamDataText.vue +8 -0
  66. package/dist/src/components/DataList/OrigamDataTitle.vue +8 -0
  67. package/dist/src/components/DataTable/OrigamDataTable.vue +20 -0
  68. package/dist/src/components/DataTable/OrigamDataTableColumnCell.vue +5 -1
  69. package/dist/src/components/DataTable/OrigamDataTableFooter.vue +4 -0
  70. package/dist/src/components/DatePicker/OrigamDatePicker.vue +20 -0
  71. package/dist/src/components/DatePickerField/OrigamDatePickerField.vue +20 -0
  72. package/dist/src/components/Dialog/OrigamDialog.vue +20 -0
  73. package/dist/src/components/Dialog/OrigamDialogConfirmation.vue +20 -0
  74. package/dist/src/components/Divider/OrigamDivider.vue +4 -0
  75. package/dist/src/components/Drawer/OrigamDrawer.vue +20 -0
  76. package/dist/src/components/ExpansionPanel/OrigamExpansionPanel.vue +20 -0
  77. package/dist/src/components/ExpansionPanel/OrigamExpansionPanelContent.vue +20 -0
  78. package/dist/src/components/ExpansionPanel/OrigamExpansionPanelHeader.vue +20 -0
  79. package/dist/src/components/ExpansionPanel/OrigamExpansionPanels.vue +20 -0
  80. package/dist/src/components/Field/OrigamField.vue +20 -0
  81. package/dist/src/components/FileField/OrigamFileField.vue +20 -0
  82. package/dist/src/components/Grid/OrigamGrid.vue +21 -1
  83. package/dist/src/components/Grids/OrigamCol.vue +16 -0
  84. package/dist/src/components/Grids/OrigamContainer.vue +17 -1
  85. package/dist/src/components/Grids/OrigamRow.vue +16 -0
  86. package/dist/src/components/Icon/OrigamClassIcon.vue +21 -1
  87. package/dist/src/components/Icon/OrigamComponentIcon.vue +21 -1
  88. package/dist/src/components/Icon/OrigamIcon.vue +21 -1
  89. package/dist/src/components/Icon/OrigamLigatureIcon.vue +21 -1
  90. package/dist/src/components/Icon/OrigamSvgIcon.vue +21 -1
  91. package/dist/src/components/Img/OrigamImg.vue +20 -0
  92. package/dist/src/components/Input/OrigamInput.vue +20 -0
  93. package/dist/src/components/Kbd/OrigamKbd.vue +35 -41
  94. package/dist/src/components/Label/OrigamLabel.vue +20 -0
  95. package/dist/src/components/Layout/OrigamLayout.vue +21 -1
  96. package/dist/src/components/List/OrigamList.vue +21 -1
  97. package/dist/src/components/List/OrigamListGroup.vue +20 -0
  98. package/dist/src/components/List/OrigamListItem.vue +20 -0
  99. package/dist/src/components/List/OrigamListSubheader.vue +20 -0
  100. package/dist/src/components/Main/OrigamMain.vue +20 -0
  101. package/dist/src/components/Masonry/OrigamMasonry.vue +21 -1
  102. package/dist/src/components/Media/OrigamMediaScrubber.vue +5 -1
  103. package/dist/src/components/Media/OrigamMediaVolumeControl.vue +4 -0
  104. package/dist/src/components/Menu/OrigamMenu.vue +20 -0
  105. package/dist/src/components/Messages/OrigamMessages.vue +20 -0
  106. package/dist/src/components/NumberField/OrigamNumberField.vue +20 -0
  107. package/dist/src/components/OtpInputField/OrigamOtpInputField.vue +20 -0
  108. package/dist/src/components/Pagination/OrigamPagination.vue +16 -0
  109. package/dist/src/components/Parallax/OrigamParallax.vue +20 -0
  110. package/dist/src/components/Parallax/OrigamParallaxElement.vue +20 -0
  111. package/dist/src/components/PasswordField/OrigamPasswordField.vue +20 -0
  112. package/dist/src/components/Picker/OrigamPicker.vue +20 -0
  113. package/dist/src/components/Progress/OrigamProgress.vue +12 -0
  114. package/dist/src/components/Progress/OrigamProgressCircular.vue +8 -0
  115. package/dist/src/components/Progress/OrigamProgressLinear.vue +12 -0
  116. package/dist/src/components/QrCode/OrigamQrCode.vue +21 -1
  117. package/dist/src/components/Radio/OrigamRadio.vue +20 -0
  118. package/dist/src/components/Radio/OrigamRadioBtn.vue +12 -0
  119. package/dist/src/components/Radio/OrigamRadioGroup.vue +20 -0
  120. package/dist/src/components/RatingField/OrigamRatingField.vue +20 -0
  121. package/dist/src/components/RatingField/OrigamRatingFieldItem.vue +20 -0
  122. package/dist/src/components/Responsive/OrigamResponsive.vue +21 -1
  123. package/dist/src/components/Select/OrigamSelect.vue +20 -0
  124. package/dist/src/components/SelectionControl/OrigamSelectionControl.vue +12 -0
  125. package/dist/src/components/Sheet/OrigamSheet.vue +20 -0
  126. package/dist/src/components/Skeleton/OrigamSkeleton.vue +5 -1
  127. package/dist/src/components/Slide/OrigamSlideGroup.vue +20 -0
  128. package/dist/src/components/SliderField/OrigamSliderField.vue +20 -0
  129. package/dist/src/components/SliderField/OrigamSliderFieldTrack.vue +5 -1
  130. package/dist/src/components/Snackbar/OrigamSnackbar.vue +20 -0
  131. package/dist/src/components/Stepper/OrigamStepper.vue +21 -1
  132. package/dist/src/components/Switch/OrigamSwitch.vue +20 -0
  133. package/dist/src/components/Switch/OrigamSwitchTrack.vue +12 -0
  134. package/dist/src/components/SystemBar/OrigamSystemBar.vue +12 -0
  135. package/dist/src/components/Table/OrigamTable.vue +20 -0
  136. package/dist/src/components/Tabs/OrigamTabs.vue +4 -0
  137. package/dist/src/components/TextField/OrigamTextField.vue +20 -0
  138. package/dist/src/components/TextareaField/OrigamTextareaField.vue +20 -0
  139. package/dist/src/components/Title/OrigamTitle.vue +16 -0
  140. package/dist/src/components/Toolbar/OrigamToolbar.vue +20 -0
  141. package/dist/src/components/Video/OrigamVideo.vue +20 -0
  142. package/dist/src/components/Window/OrigamWindow.vue +20 -0
  143. package/dist/src/composables/Commons/border.composable.cjs +24 -16
  144. package/dist/src/composables/Commons/border.composable.d.ts +31 -10
  145. package/dist/src/composables/Commons/border.composable.js +21 -17
  146. package/dist/src/composables/Commons/margin.composable.cjs +7 -0
  147. package/dist/src/composables/Commons/margin.composable.d.ts +7 -1
  148. package/dist/src/composables/Commons/margin.composable.js +5 -1
  149. package/dist/src/composables/Commons/padding.composable.cjs +7 -0
  150. package/dist/src/composables/Commons/padding.composable.d.ts +15 -1
  151. package/dist/src/composables/Commons/padding.composable.js +5 -1
  152. package/dist/src/composables/Commons/rounded.composable.cjs +7 -0
  153. package/dist/src/composables/Commons/rounded.composable.d.ts +14 -1
  154. package/dist/src/composables/Commons/rounded.composable.js +5 -1
  155. package/dist/src/composables/Commons/stateEffect.composable.cjs +60 -0
  156. package/dist/src/composables/Commons/stateEffect.composable.js +60 -0
  157. package/dist/src/consts/Commons/border.const.cjs +19 -2
  158. package/dist/src/consts/Commons/border.const.d.ts +65 -4
  159. package/dist/src/consts/Commons/border.const.js +16 -2
  160. package/dist/src/consts/Commons/spacing.const.cjs +40 -1
  161. package/dist/src/consts/Commons/spacing.const.d.ts +68 -1
  162. package/dist/src/consts/Commons/spacing.const.js +19 -1
  163. package/dist/src/consts/Commons/variant-preset.const.cjs +4 -1
  164. package/dist/src/consts/Commons/variant-preset.const.d.ts +22 -13
  165. package/dist/src/consts/Commons/variant-preset.const.js +4 -1
  166. package/dist/src/consts/Kbd/kbd.const.cjs +22 -0
  167. package/dist/src/consts/Kbd/kbd.const.d.ts +102 -0
  168. package/dist/src/consts/Kbd/kbd.const.js +16 -0
  169. package/dist/src/consts/index.cjs +11 -0
  170. package/dist/src/consts/index.d.ts +1 -0
  171. package/dist/src/consts/index.js +1 -0
  172. package/dist/src/interfaces/Bracket/bracket-match-component.interface.d.ts +2 -2
  173. package/dist/src/interfaces/Bracket/bracket-surface.interface.d.ts +39 -0
  174. package/dist/src/interfaces/Bracket/bracket.interface.d.ts +25 -4
  175. package/dist/src/interfaces/Commons/border.interface.d.ts +123 -0
  176. package/dist/src/interfaces/Commons/margin.interface.d.ts +35 -1
  177. package/dist/src/interfaces/Commons/padding.interface.d.ts +41 -1
  178. package/dist/src/interfaces/Commons/rounded.interface.d.ts +47 -4
  179. package/dist/src/interfaces/Kbd/kbd.interface.d.ts +2 -1
  180. package/dist/src/types/Bracket/bracket.type.d.ts +82 -0
  181. package/dist/src/types/Commons/anchor.type.d.ts +48 -0
  182. package/dist/src/types/Commons/variant-preset.type.d.ts +22 -4
  183. package/dist/src/types/tokens.type.d.ts +1 -1
  184. package/dist/src/utils/Bracket/bracket-surface.util.cjs +19 -0
  185. package/dist/src/utils/Bracket/bracket-surface.util.js +10 -0
  186. package/dist/src/utils/Commons/border.util.d.ts +16 -8
  187. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -18,6 +18,144 @@ This project follows [Semantic Versioning](https://semver.org).
18
18
 
19
19
  ## [Unreleased]
20
20
 
21
+ ## [2.20.0] - 2026-10-01
22
+
23
+ ### Added — la grille de props LOGIQUES PAR CÔTÉ, les 20 qui manquaient
24
+
25
+ Trois grilles de props directionnelles coexistent dans ce DS. Deux étaient complètes — la
26
+ **physique par côté** (`borderLeft`, `paddingLeft`, `marginLeft`, `roundedTopLeft`) et la
27
+ **logique par axe** (`borderInline`, `borderBlock`, `paddingInline`, `paddingBlock`,
28
+ `marginInline`, `marginBlock`). La troisième, **logique par côté**, était vide : **0 occurrence
29
+ sur 20**, mesurée.
30
+
31
+ C'était le dernier endroit où le dépôt faisait « moitié », ce que la directive conservée dans
32
+ `adr-007-directional-props.md` interdit : *« si un format existe, il existe partout »*.
33
+
34
+ | interface | props ajoutées | n |
35
+ |---|---|---|
36
+ | `IBorderProps` | `borderInlineStart/End`, `borderBlockStart/End` + leurs 4 `*Color` | 8 |
37
+ | `IPaddingProps` | `paddingInlineStart/End`, `paddingBlockStart/End` | 4 |
38
+ | `IMarginProps` | `marginInlineStart/End`, `marginBlockStart/End` | 4 |
39
+ | `IRoundedProps` | `roundedStartStart/StartEnd/EndStart/EndEnd` | 4 |
40
+
41
+ Câblage par **extension de table** : les cinq maps existantes (`BORDER_POSITION_MAP`,
42
+ `BORDER_LOGICAL_AXIS_MAP`, `PADDING_POSITION_MAP`, `MARGIN_POSITION_MAP`, `ROUNDED_CORNER_MAP`)
43
+ sont uniformément façonnées et leur corps de boucle fonctionne verbatim avec un côté logique.
44
+ Aucune grammaire nouvelle. Le vocabulaire partagé (`TLogicalSide`, `TLogicalCorner`) dérive des
45
+ enums existants `START_END` et `BORDER_LOGICAL_AXIS` — aucun enum créé.
46
+
47
+ **Précédence** : une arête physique et son équivalent logique sont deux orthographes de la même
48
+ arête, donc à spécificité identique. Les composables accumulent des déclarations rendues en style
49
+ **inline**, donc l'ordre de `push` *est* la précédence — le physique passe en dernier et gagne,
50
+ reproduisant le seul précédent déjà écrit dans le dépôt (`spacing.const.ts:85-88`).
51
+
52
+ ### Changed — ⚠️ `OrigamBracket` n'expose plus les props logiques qu'il n'honore pas
53
+
54
+ Rupture assumée, et elle ne retire rien qui peignait quoi que ce soit.
55
+
56
+ `OrigamBracket` ne peint pas sa propre racine : il route sa surface vers la carte de match par une
57
+ cascade de custom properties **entièrement physique, sans gestion RTL**. Le fait bloquant :
58
+ **aucune chaîne `var()` ne peut exprimer « le physique bat le logique »**, parce que la
59
+ substitution `var()` est aveugle au mode d'écriture alors que le mapping de la propriété ne l'est
60
+ pas. Les quatre combinaisons ont été dépliées ; chacune casse soit une prop physique existante,
61
+ soit le RTL.
62
+
63
+ Les interfaces à **zéro appel réel** sont donc restreintes par `Omit<>` — plutôt que de déclarer
64
+ une prop que la couche laisse tomber en silence, ce que le dépôt interdit nommément.
65
+
66
+ ⛔ **Restreindre par famille de composant aurait retiré des props qui fonctionnent** :
67
+ `OrigamBracketCompetitor` appelle réellement `useStateEffect`, et `OrigamBracketMatch` /
68
+ `OrigamBracketCompetitor` appellent `useRounded` côté rayon. Seules les interfaces sans aucun
69
+ appel sont touchées ; les autres gardent la surface complète.
70
+
71
+ **L'axe bloc est câblé, pas retiré.** `block-start` / `block-end` valent invariablement `top` /
72
+ `bottom` en `horizontal-tb`, Bracket ne déclare jamais `writing-mode`, et sa feuille faisait déjà
73
+ cette hypothèse pour `borderBlock` : les 4 props d'axe bloc sont donc **honorées**, pas omises.
74
+
75
+ La complétude de Bracket — convertir sa cascade en longhands logiques avec une vraie gestion RTL
76
+ — est suivie séparément. Un commentaire dans l'interface indique que *retirer l'`Omit<>` suffira*.
77
+
78
+ ### Documentation — le pattern `variant` = preset de props est figé
79
+
80
+ L'ADR-005 exigeait, après validation du pilote `OrigamKbd`, de *« freeze the pattern in
81
+ `CLAUDE.md` »*. Cette seconde moitié n'avait jamais été faite. Elle l'est, dérivée du pilote
82
+ réellement mergé et non de l'intention de l'ADR, avec la convention d'emplacement tranchée : une
83
+ table de preset vit dans le **fichier de consts existant** du composant.
84
+
85
+ ⚠️ **Quatre clauses de D7 étaient fausses** et sont corrigées, l'ancien état conservé en toutes
86
+ lettres. La principale : l'ADR pose un harnais de régression visuelle en « hard prerequisite »
87
+ pour `OrigamBtn` et affirme qu'il n'existe pas. **Il existe depuis le commit `876d675d9` du
88
+ 2026-08-12** et couvre les 7 valeurs de `variant` de Btn avec leurs baselines committées — soit
89
+ quatre mois avant la rédaction de la clause qui le déclare absent.
90
+
91
+ Les chiffres dérivés sont remesurés : **262** specs e2e (et non 175), **14** specs assertant sur
92
+ une classe `--variant-*` (et non 8), **7** baselines PNG committées (et non zéro).
93
+
94
+ ## [2.19.0] - 2026-09-30
95
+
96
+ ### Changed — ADR-005 lot 2 : `OrigamKbd` converti, ⚠️ deux ruptures
97
+
98
+ Le lot 1 avait posé le mécanisme et laissé le registre **vide**. Premier
99
+ composant converti : le variant de Kbd n'est plus un bloc SCSS, c'est
100
+ `KBD_VARIANT_PRESETS`. La garde `no-variant-css` passe de **36 à 32**.
101
+
102
+ Kbd n'était pas convertible mécaniquement, et la cause tient en une phrase :
103
+ **une propriété custom hérite.** `&--combination` posait
104
+ `--origam-kbd---border-width: 0` pour désépaissir l'enveloppe, la valeur
105
+ descendait dans chaque `__key` — dont le mixin `key-surface` lit précisément
106
+ `var(--origam-kbd---border-width, …)` — et les touches perdaient leur bordure.
107
+ C'est **pour la rattraper** que chaque règle de variant devait se redéclarer une
108
+ seconde fois en `&--variant-x &__key`, et c'est ce doublon qui rendait le variant
109
+ inconvertible : une prop de racine ne peut pas peindre un descendant. La
110
+ neutralisation passe donc par `border-width: 0`, propriété physique, qui n'hérite
111
+ pas ; et le composant lie ses déclarations de surface à l'élément qui **est** une
112
+ touche — la racine en forme simple, chaque `__key` en combinaison, les deux ne
113
+ coexistant jamais.
114
+
115
+ Bénéfice non prévu, relevé par une garde : la règle `&--variant-outlined`, **toujours
116
+ active** puisque `outlined` est le défaut de `withDefaults`, **confisquait**
117
+ `--origam-kbd---border-width` à tout thème de marque.
118
+ `theme-channel-confiscation` passe de **37 à 36**.
119
+
120
+ ⚠️ **Rupture 1** — sur une combinaison, les props de surface (`bgColor`, `color`,
121
+ `border`, `elevation`) peignent désormais **les touches** et non l'enveloppe.
122
+ `<origam-kbd :combination="['Ctrl','S']" bg-color="primary">` rendait un cadre
123
+ coloré autour de touches non colorées ; il colore les touches.
124
+
125
+ ⚠️ **Rupture 2** — `--origam-kbd--outlined---border-width`,
126
+ `--origam-kbd__filled---border-width` et `--origam-kbd__tonal---border-width`
127
+ sont **supprimés**. Ils ne portaient aucune valeur propre : les deux premiers
128
+ valaient `{border.width.thin}`, déjà le défaut de `--origam-kbd---border-width`,
129
+ et le troisième `{border.width.0}`. Pour régler la largeur d'un variant, passer
130
+ par `--origam-kbd---border-width` ou par le prop `border`.
131
+
132
+ `OrigamKbd` gagne `elevation` (`IElevationProps`) — c'est le canal sur lequel
133
+ voyage l'ombre d'embossage de chaque variant.
134
+
135
+ Non-régression **mesurée** et non affirmée : un harnais neuf
136
+ (`pnpm -F @origam/tests audit:kbd-preset`) monte le composant sous les **8
137
+ identités × 2 modes** et relève 11 longhands sur chaque surface peinte, `__key`
138
+ compris — Histoire étant épinglé `data-theme="light"` et n'enregistrant aucune
139
+ marque, l'axe des identités y est immesurable. Sur le variant **nu**, zéro écart
140
+ sur `background-color`, `border-*`, `color`, `border-radius`, `padding`,
141
+ `font-size` et `min-width`. Seul `box-shadow` bouge, en deux familles **prouvées
142
+ non-peignantes au pixel** : la sérialisation du blanc
143
+ (`rgba(255,255,255,a)` → `color(srgb 1 1 1 / a)`, même couleur) et, sur `tonal`,
144
+ le mot-clé `none` → `rgba(0,0,0,0) 0px 0px 0px 0px` — étendue et alpha nuls,
145
+ `elevation` ne pouvant pas émettre le mot-clé.
146
+
147
+ ⚠️ La limite du canal `border` découverte en chemin — un
148
+ `border="var(--…---border-width, 1px)"` matchait le groupe `color` de
149
+ `BORDER_REGEX` et émettait un `border-color` — **a été corrigée depuis, en
150
+ 2.18.21** (section juste en dessous). Ce qui reste : `IBorderProps` n'expose
151
+ toujours pas de `borderWidth` autonome, et une largeur `var()` **contenant une
152
+ espace** ne voyage que par une prop par côté ou d'axe, la prop globale `border`
153
+ la coupant à son `split(' ')`. Ajouter `borderWidth` avait par ailleurs été
154
+ rejeté sur la mesure, indépendamment de la regex : 24 composants déclarent
155
+ `IBorderProps` sans consommer ses props autonomes, et `unconsumed-props` passait
156
+ de 0 à 24. La suppression des trois tokens de largeur ne repose de toute façon
157
+ pas sur cette limite, mais sur le fait qu'ils ne portaient **aucune valeur
158
+ propre**.
21
159
  ## [2.18.21] - 2026-09-30
22
160
 
23
161
  ### Fixed — `useBorder` supprimait silencieusement une largeur en `var()`