origam 2.18.1 → 2.18.2
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.
package/CHANGELOG.md
CHANGED
|
@@ -177,10 +177,52 @@ conclure qu'elle ne l'est plus par défaut.
|
|
|
177
177
|
|
|
178
178
|
Rejoué sur 30 composants × 8 identités × 2 modes × 2 portées (racine ET
|
|
179
179
|
sous-arbre), soit **1 664 instances**, Chromium, contrôles positif et négatif
|
|
180
|
-
verts : **
|
|
181
|
-
**
|
|
182
|
-
palettes de marque de `packages/marketing`, aucune au DS
|
|
183
|
-
`pnpm -F @origam/tests audit:dark-contrast`.
|
|
180
|
+
verts : **185 → 7 violations AA**, dont sombre **182 → 4** et clair
|
|
181
|
+
**3 → 3** (aucune régression). Les 7 restantes appartiennent toutes aux
|
|
182
|
+
palettes de marque de `packages/marketing`, aucune au DS, et aucune ne
|
|
183
|
+
descend sous 2:1. Harnais : `pnpm -F @origam/tests audit:dark-contrast`.
|
|
184
|
+
|
|
185
|
+
⚠️ **Ces bornes ont d'abord été publiées à `189 → 11`, et les deux étaient
|
|
186
|
+
fausses de 4.** Le parseur de couleurs du harnais ne connaissait pas
|
|
187
|
+
`color(srgb …)`, que la palette `apple` émet : le fond translucide du
|
|
188
|
+
tooltip était pris pour « pas de fond », la remontée d'ancêtres sautait
|
|
189
|
+
jusqu'à la surface opaque et rapportait du noir sur noir à 1.00 — quatre
|
|
190
|
+
violations **fabriquées**, présentes des DEUX côtés de la mesure. Le
|
|
191
|
+
**delta de 178 n'a jamais été faux** ; seules les bornes l'étaient. Détail
|
|
192
|
+
et garde de non-récidive plus bas.
|
|
193
|
+
|
|
194
|
+
- **#871 — le harnais de contraste ne savait pas lire `color(srgb …)`, et
|
|
195
|
+
FABRIQUAIT donc des violations.** Son `parse()` ne reconnaissait que
|
|
196
|
+
`rgb()` / `rgba()`. Un fond qu'il ne sait pas lire n'est pas « ignoré » : il
|
|
197
|
+
est traité comme **non peint**, la remontée d'ancêtres saute l'élément et
|
|
198
|
+
composite contre une couche qui n'est pas celle que voit l'œil. Sur le
|
|
199
|
+
tooltip `apple` — `color(srgb 0.898 0.898 0.906 / 0.94)` sur une surface
|
|
200
|
+
noire — cela donnait du noir sur noir à **1.00** là où le rendu réel est
|
|
201
|
+
~`rgb(215,215,217)` sur noir. 4 instances (root + sous-arbre × clair +
|
|
202
|
+
sombre), des deux côtés de la mesure.
|
|
203
|
+
|
|
204
|
+
`parse()` reconnaît désormais `color(srgb r g b [/ a])`, avec **la même
|
|
205
|
+
expression régulière que `srgbToRgb` dans `contrast.directive.ts`** — la
|
|
206
|
+
vraie directive gérait déjà cette forme, et son commentaire le disait :
|
|
207
|
+
*« design tokens resolve to exactly this form in several themes »*.
|
|
208
|
+
|
|
209
|
+
⛔ **Un quatrième contrôle, parce que le correctif ponctuel ne suffit pas.**
|
|
210
|
+
Le harnais échoue maintenant (`$? = 1`) dès qu'une chaîne de couleur non
|
|
211
|
+
vide lui est illisible, en listant les formes rencontrées. Sans lui, la
|
|
212
|
+
prochaine syntaxe (`oklch()`, `lab()`, résidu de `color-mix()`) décalerait
|
|
213
|
+
le chiffre en silence exactement de la même façon. Contrôle positif du
|
|
214
|
+
garde lui-même : branche `srgb` désactivée → `$? = 1`, 8 formes listées, et
|
|
215
|
+
le compte réaffiche l'ancien **11** ; branche active → `$? = 0`, tout lu,
|
|
216
|
+
**7**.
|
|
217
|
+
|
|
218
|
+
⚠️ #871 listait déjà ce risque sous « non vérifié » — *« les couleurs
|
|
219
|
+
`oklch()` / `color(srgb …)` — aucun token actuel n'en emploie, mais un futur
|
|
220
|
+
thème invaliderait l'instrumentation »*. Un thème le faisait **déjà** au
|
|
221
|
+
moment où la phrase a été écrite. Écart signalé en marge de la **PR #882**
|
|
222
|
+
(#869, `v-contrast`) par l'agent qui rejouait ce harnais avec la vraie
|
|
223
|
+
directive au lieu du stub ; reproduit, remesuré et corrigé ici. Aucun ticket
|
|
224
|
+
propre n'a été ouvert : le défaut est dans l'instrumentation de #871, donc
|
|
225
|
+
il se règle sous #871.
|
|
184
226
|
|
|
185
227
|
- **#871 — `system-bar` et `tooltip` illisibles en sombre.** Les deux peignent
|
|
186
228
|
une surface sombre dans les DEUX modes (`neutral---700` / `neutral---800`)
|
|
@@ -220,6 +262,43 @@ conclure qu'elle ne l'est plus par défaut.
|
|
|
220
262
|
chacun. L'affirmation décrivait un état antérieur à #794 que plus rien ne
|
|
221
263
|
remesurait.
|
|
222
264
|
|
|
265
|
+
### Fixed
|
|
266
|
+
|
|
267
|
+
- **#371 (point 3) — le sélecteur « Items per page » du footer
|
|
268
|
+
DataTable n'avait aucun nom accessible**, déjà corrigé par `3f063d727`
|
|
269
|
+
(2026-09-10) — ce commit **citait #371 sans le fermer**, sixième
|
|
270
|
+
occurrence cette semaine du même motif (cf. #570, #682, #537, #371
|
|
271
|
+
point 1, #371 point 2/ADR-005). Re-mesuré ici avant tout travail sur les
|
|
272
|
+
points restants du ticket : le `<span>` visible est désormais associé au
|
|
273
|
+
`<origam-select>` via `aria-labelledby`, et la suite unitaire complète
|
|
274
|
+
reste verte (7120/7120) — aucun code de production retouché sur ce point,
|
|
275
|
+
seule la mesure manquait au tableau.
|
|
276
|
+
|
|
277
|
+
- **`<OrigamDataTableRow>` ne fuit plus `index` / `mobile` en attributs DOM**
|
|
278
|
+
(#371, point 4). `itemSlotProps()` (`OrigamDataTableRows.vue`) construisait
|
|
279
|
+
la ligne d'item avec deux clés qu'`IDataTableRowProps` ne déclare pas —
|
|
280
|
+
`index`, jamais lu par le composant, et `mobile`, un résidu d'avant
|
|
281
|
+
l'ajout du forwarding de `mobileBreakpoint` (chaque ligne calcule déjà son
|
|
282
|
+
propre `mobile` à partir de ce dernier). Une clé non déclarée tombe dans
|
|
283
|
+
`$attrs`, et le `v-bind="$attrs"` du `<tr>` racine la posait en attribut
|
|
284
|
+
DOM littéral sur **chaque** ligne rendue — `index="0" mobile="false"`.
|
|
285
|
+
Même mécanisme que le point 1 de ce ticket (déjà corrigé, `08c30693a`),
|
|
286
|
+
une famille plus loin. `aria-rowindex`, seul attribut voulu de ce canal,
|
|
287
|
+
continue de passer.
|
|
288
|
+
|
|
289
|
+
### Added
|
|
290
|
+
|
|
291
|
+
- **`mobileBreakpoint` a désormais un contrôle de story sur
|
|
292
|
+
`<OrigamDataTable>`** (#371, point 5). La prop — dont le défaut `'xs'`
|
|
293
|
+
corrige un bug de production documenté en commentaire
|
|
294
|
+
(`OrigamDataTable.vue:190-199` : sans lui, `useDisplay` retombait sur le
|
|
295
|
+
seuil global `'lg'` et forçait le rendu mobile empilé sur tout viewport
|
|
296
|
+
sous 1280px) — n'apparaissait dans aucune des 30 Variants de
|
|
297
|
+
`OrigamDataTable.story.vue`. Ajout de la Variant « Prop —
|
|
298
|
+
mobileBreakpoint » (même jeu d'options que celui déjà utilisé par
|
|
299
|
+
`OrigamDataTableRow.story.vue`) et d'une section « Responsive » +
|
|
300
|
+
ligne de table dans `OrigamDataTable.md`.
|
|
301
|
+
|
|
223
302
|
---
|
|
224
303
|
|
|
225
304
|
## [2.18.0] - 2026-09-19
|
|
@@ -136,7 +136,6 @@
|
|
|
136
136
|
import OrigamDataTableGroupHeaderRow from "./OrigamDataTableGroupHeaderRow.vue";
|
|
137
137
|
import OrigamDataTableRow from "./OrigamDataTableRow.vue";
|
|
138
138
|
import OrigamSkeleton from "../Skeleton/OrigamSkeleton.vue";
|
|
139
|
-
import { useDisplay } from "../../composables/Commons/display.composable";
|
|
140
139
|
import { useExpanded } from "../../composables/DataTable/expand.composable";
|
|
141
140
|
import { useGroupBy } from "../../composables/DataTable/group.composable";
|
|
142
141
|
import { useHeaders } from "../../composables/DataTable/headers.composable";
|
|
@@ -186,7 +185,6 @@ const { columns } = useHeaders();
|
|
|
186
185
|
const { expandOnClick, toggleExpand, isExpanded } = useExpanded();
|
|
187
186
|
const { isSelected, toggleSelect } = useSelection();
|
|
188
187
|
const { toggleGroup, isGroupOpen } = useGroupBy();
|
|
189
|
-
const { mobile } = useDisplay(props);
|
|
190
188
|
const { startIndex } = usePagination();
|
|
191
189
|
const slotProps = (item, index) => {
|
|
192
190
|
return {
|
|
@@ -235,20 +233,32 @@ const itemSlotProps = (item, index) => {
|
|
|
235
233
|
onClick: expandOnClick.value ? () => {
|
|
236
234
|
toggleExpand(item);
|
|
237
235
|
} : void 0,
|
|
238
|
-
index,
|
|
239
236
|
item,
|
|
240
237
|
cellProps: props.cellProps,
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
238
|
+
/*********************************************************
|
|
239
|
+
* Forward `mobileBreakpoint` — never `mobile` (#371)
|
|
240
|
+
*
|
|
241
|
+
* @description
|
|
242
|
+
* `IDataTableRowProps` (extends `IDisplayProps`)
|
|
243
|
+
* declares `mobileBreakpoint`, not `index` or
|
|
244
|
+
* `mobile`. Each row resolves its OWN `mobile` from
|
|
245
|
+
* `mobileBreakpoint` via its own `useDisplay(props)`
|
|
246
|
+
* call — passing a precomputed `mobile` here was
|
|
247
|
+
* always dead weight, and passing `index` was never
|
|
248
|
+
* read by the row at all. Both fell through
|
|
249
|
+
* `<OrigamDataTableRow>`'s undeclared-key path
|
|
250
|
+
* straight into `$attrs`, which its
|
|
251
|
+
* `v-bind="$attrs"` root then serialised as literal
|
|
252
|
+
* DOM attributes on every rendered `<tr>`:
|
|
253
|
+
* `index="0" mobile="false"`.
|
|
254
|
+
*
|
|
255
|
+
* @description
|
|
256
|
+
* A prior fix (mobileBreakpoint forwarding) added
|
|
257
|
+
* the correct key without removing the stale one it
|
|
258
|
+
* replaced — same shape as the point-1 closure leak
|
|
259
|
+
* in this same file's `groupHeaderRowProps()`.
|
|
260
|
+
********************************************************/
|
|
250
261
|
mobileBreakpoint: props.mobileBreakpoint,
|
|
251
|
-
mobile: mobile.value,
|
|
252
262
|
"aria-rowindex": startIndex.value + index + 2
|
|
253
263
|
},
|
|
254
264
|
getPrefixedEventHandlers(attrs, ":row", () => slotPropsLocal),
|