origam 2.17.1 → 2.18.1
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 +895 -0
- package/dist/src/assets/css/main.css +1 -1
- package/dist/src/assets/css/tokens/dark.css +193 -26
- package/dist/src/assets/css/tokens/light.css +78 -11
- package/dist/src/assets/locales/en.json +21 -6
- package/dist/src/assets/locales/fr.json +21 -6
- package/dist/src/assets/scss/main.scss +10 -2
- package/dist/src/assets/scss/tokens/_dark.scss +2914 -13
- package/dist/src/assets/scss/tokens/_light.scss +78 -11
- package/dist/src/components/Alert/OrigamAlert.vue +6 -6
- package/dist/src/components/Avatar/OrigamAvatar.vue +15 -2
- package/dist/src/components/Badge/OrigamBadge.vue +7 -7
- package/dist/src/components/Breadcrumb/OrigamBreadcrumbItem.vue +23 -4
- package/dist/src/components/Btn/OrigamBtn.vue +22 -16
- package/dist/src/components/Btn/OrigamBtnGroup.vue +1 -1
- package/dist/src/components/Calendar/OrigamCalendar.vue +1 -1
- package/dist/src/components/Card/OrigamCard.vue +2 -0
- package/dist/src/components/Card/OrigamCardHeader.vue +7 -7
- package/dist/src/components/Carousel/OrigamCarousel.vue +14 -1
- package/dist/src/components/Chart/OrigamChartBoxPlot.vue +1 -1
- package/dist/src/components/Chart/OrigamChartBullet.vue +3 -2
- package/dist/src/components/Chart/OrigamChartCandlestick.vue +2 -2
- package/dist/src/components/Chart/OrigamChartCartesian.vue +49 -4
- package/dist/src/components/Chart/OrigamChartLegend.vue +39 -18
- package/dist/src/components/Chart/OrigamChartPareto.vue +7 -1
- package/dist/src/components/Chart/OrigamChartPictorial.vue +2 -2
- package/dist/src/components/Chart/OrigamChartRadar.vue +3 -1
- package/dist/src/components/Chart/OrigamChartSparkline.vue +3 -1
- package/dist/src/components/Chart/OrigamChartStreamgraph.vue +2 -1
- package/dist/src/components/Checkbox/OrigamCheckbox.vue +2 -0
- package/dist/src/components/Checkbox/OrigamCheckboxGroup.vue +36 -11
- package/dist/src/components/Chip/OrigamChip.vue +19 -4
- package/dist/src/components/Code/OrigamCode.vue +20 -3
- package/dist/src/components/ColorPickerField/OrigamColorPickerField.vue +30 -5
- package/dist/src/components/CommandPalette/OrigamCommandPalette.vue +3 -3
- package/dist/src/components/ConfirmWrapper/OrigamConfirmWrapper.vue +6 -6
- package/dist/src/components/ContextualMenu/OrigamContextualMenu.vue +0 -4
- package/dist/src/components/DataList/OrigamDataList.vue +2 -0
- package/dist/src/components/DataList/OrigamDataText.vue +6 -6
- package/dist/src/components/DataList/OrigamDataTitle.vue +6 -6
- package/dist/src/components/DataTable/OrigamDataTableHeaderCell.vue +1 -1
- package/dist/src/components/DataTable/OrigamDataTableHeadersCell.vue +4 -1
- package/dist/src/components/DatePicker/OrigamDatePicker.vue +2 -0
- package/dist/src/components/DatePicker/OrigamDatePickerHeader.vue +6 -6
- package/dist/src/components/DatePickerField/OrigamDatePickerField.vue +21 -1
- package/dist/src/components/Dialog/OrigamDialog.vue +25 -0
- package/dist/src/components/Dialog/OrigamDialogConfirmation.vue +6 -0
- package/dist/src/components/ExpansionPanel/OrigamExpansionPanel.vue +2 -0
- package/dist/src/components/ExpansionPanel/OrigamExpansionPanelHeader.vue +6 -6
- package/dist/src/components/Field/OrigamField.vue +47 -15
- package/dist/src/components/FileField/OrigamFileField.vue +5 -1
- package/dist/src/components/Icon/OrigamSvgIcon.vue +3 -1
- package/dist/src/components/Img/OrigamImg.vue +9 -2
- package/dist/src/components/InfiniteScroll/OrigamInfiniteScroll.vue +34 -18
- package/dist/src/components/InlineEdit/OrigamInlineEdit.vue +46 -5
- package/dist/src/components/Input/OrigamInput.vue +6 -6
- package/dist/src/components/List/OrigamListGroup.vue +4 -0
- package/dist/src/components/List/OrigamListItem.vue +68 -4
- package/dist/src/components/Masonry/OrigamMasonry.vue +18 -2
- package/dist/src/components/Menu/OrigamMenu.vue +79 -9
- package/dist/src/components/NumberField/OrigamNumberField.vue +13 -3
- package/dist/src/components/OtpInputField/OrigamOtpInputField.vue +35 -11
- package/dist/src/components/PasswordField/OrigamPasswordField.vue +5 -1
- package/dist/src/components/Radio/OrigamRadio.vue +2 -0
- package/dist/src/components/Radio/OrigamRadioGroup.vue +36 -11
- package/dist/src/components/RatingField/OrigamRatingField.vue +58 -7
- package/dist/src/components/RatingField/OrigamRatingFieldItem.vue +78 -30
- package/dist/src/components/Select/OrigamSelect.vue +44 -21
- package/dist/src/components/SliderField/OrigamSliderField.vue +20 -10
- package/dist/src/components/Snackbar/OrigamSnackbarGroup.vue +1 -1
- package/dist/src/components/Switch/OrigamSwitch.vue +2 -0
- package/dist/src/components/Tabs/OrigamTab.vue +7 -4
- package/dist/src/components/Tabs/OrigamTabPanel.vue +4 -2
- package/dist/src/components/Tabs/OrigamTabs.vue +7 -5
- package/dist/src/components/TextField/OrigamTextField.vue +5 -1
- package/dist/src/components/TextareaField/OrigamTextareaField.vue +5 -1
- package/dist/src/components/Transition/OrigamExpandX.vue +19 -3
- package/dist/src/components/Transition/OrigamExpandY.vue +19 -3
- package/dist/src/components/Transition/OrigamTranslateScale.vue +26 -4
- package/dist/src/components/Video/OrigamVideo.vue +3 -2
- package/dist/src/components/Window/OrigamWindow.vue +20 -3
- package/dist/src/composables/Commons/accessibleCommand.composable.cjs +26 -0
- package/dist/src/composables/Commons/accessibleCommand.composable.d.ts +78 -0
- package/dist/src/composables/Commons/accessibleCommand.composable.js +20 -0
- package/dist/src/composables/Commons/activator.composable.cjs +10 -1
- package/dist/src/composables/Commons/activator.composable.js +11 -2
- package/dist/src/composables/Commons/adjacent.composable.cjs +17 -0
- package/dist/src/composables/Commons/adjacent.composable.d.ts +12 -0
- package/dist/src/composables/Commons/adjacent.composable.js +17 -0
- package/dist/src/composables/Commons/adjacentInner.composable.cjs +20 -0
- package/dist/src/composables/Commons/adjacentInner.composable.d.ts +24 -5
- package/dist/src/composables/Commons/adjacentInner.composable.js +20 -0
- package/dist/src/composables/Commons/audio.composable.cjs +14 -1
- package/dist/src/composables/Commons/audio.composable.js +14 -1
- package/dist/src/composables/Commons/backButton.composable.cjs +3 -1
- package/dist/src/composables/Commons/backButton.composable.js +3 -1
- package/dist/src/composables/Commons/border.composable.d.ts +13 -0
- package/dist/src/composables/Commons/colorEffect.composable.cjs +58 -46
- package/dist/src/composables/Commons/colorEffect.composable.d.ts +10 -5
- package/dist/src/composables/Commons/colorEffect.composable.js +70 -46
- package/dist/src/composables/Commons/createLayout.composable.cjs +21 -12
- package/dist/src/composables/Commons/createLayout.composable.js +21 -12
- package/dist/src/composables/Commons/delay.composable.d.ts +16 -0
- package/dist/src/composables/Commons/dimension.composable.d.ts +11 -0
- package/dist/src/composables/Commons/elevation.composable.cjs +6 -2
- package/dist/src/composables/Commons/elevation.composable.d.ts +37 -1
- package/dist/src/composables/Commons/elevation.composable.js +7 -2
- package/dist/src/composables/Commons/goTo.composable.cjs +4 -2
- package/dist/src/composables/Commons/goTo.composable.js +5 -3
- package/dist/src/composables/Commons/group.composable.cjs +14 -14
- package/dist/src/composables/Commons/group.composable.js +14 -14
- package/dist/src/composables/Commons/hotkey.composable.d.ts +18 -7
- package/dist/src/composables/Commons/hydration.composable.d.ts +8 -0
- package/dist/src/composables/Commons/link.composable.d.ts +20 -0
- package/dist/src/composables/Commons/locationStrategies.composable.d.ts +17 -0
- package/dist/src/composables/Commons/message.composable.d.ts +19 -5
- package/dist/src/composables/Commons/position.composable.d.ts +17 -6
- package/dist/src/composables/Commons/refs.composable.d.ts +11 -5
- package/dist/src/composables/Commons/rounded.composable.d.ts +11 -1
- package/dist/src/composables/Commons/scrolling.composable.cjs +15 -12
- package/dist/src/composables/Commons/scrolling.composable.js +15 -12
- package/dist/src/composables/Commons/size.composable.d.ts +15 -0
- package/dist/src/composables/Commons/ssrBoot.composable.cjs +9 -1
- package/dist/src/composables/Commons/ssrBoot.composable.js +10 -2
- package/dist/src/composables/Commons/stack.composable.cjs +13 -1
- package/dist/src/composables/Commons/stack.composable.js +13 -1
- package/dist/src/composables/Commons/theme-props-resolver.composable.cjs +41 -32
- package/dist/src/composables/Commons/theme-props-resolver.composable.js +41 -32
- package/dist/src/composables/Commons/validation.composable.cjs +3 -3
- package/dist/src/composables/Commons/validation.composable.js +3 -3
- package/dist/src/composables/Commons/virtual.composable.cjs +24 -8
- package/dist/src/composables/Commons/virtual.composable.js +24 -8
- package/dist/src/composables/Masonry/masonry.composable.cjs +18 -11
- package/dist/src/composables/Masonry/masonry.composable.js +18 -11
- package/dist/src/composables/Parallax/parallax.composable.cjs +1 -1
- package/dist/src/composables/Parallax/parallax.composable.js +1 -1
- package/dist/src/composables/index.cjs +36 -0
- package/dist/src/composables/index.d.ts +3 -0
- package/dist/src/composables/index.js +3 -0
- package/dist/src/consts/Chart/chart-cartesian.const.cjs +5 -2
- package/dist/src/consts/Chart/chart-cartesian.const.d.ts +42 -0
- package/dist/src/consts/Chart/chart-cartesian.const.js +3 -0
- package/dist/src/consts/Commons/elevation.const.cjs +5 -1
- package/dist/src/consts/Commons/elevation.const.d.ts +52 -2
- package/dist/src/consts/Commons/elevation.const.js +4 -0
- package/dist/src/consts/Commons/ripple.const.cjs +13 -3
- package/dist/src/consts/Commons/ripple.const.js +13 -3
- package/dist/src/consts/RatingField/rating-field.const.cjs +10 -0
- package/dist/src/consts/RatingField/rating-field.const.d.ts +36 -0
- package/dist/src/consts/RatingField/rating-field.const.js +12 -0
- package/dist/src/consts/index.cjs +11 -0
- package/dist/src/consts/index.d.ts +1 -0
- package/dist/src/consts/index.js +1 -0
- package/dist/src/directives/ClickOutside/clickOutside.directive.cjs +2 -0
- package/dist/src/directives/ClickOutside/clickOutside.directive.js +2 -0
- package/dist/src/directives/Ripple/ripple.directive.cjs +2 -0
- package/dist/src/directives/Ripple/ripple.directive.js +2 -0
- package/dist/src/enums/Commons/color.enum.cjs +0 -1
- package/dist/src/enums/Commons/color.enum.d.ts +14 -5
- package/dist/src/enums/Commons/color.enum.js +0 -1
- package/dist/src/enums/Sheet/sheet.enum.d.ts +1 -1
- package/dist/src/interfaces/Btn/btn.interface.d.ts +7 -10
- package/dist/src/interfaces/Chart/chart-cartesian.interface.d.ts +6 -2
- package/dist/src/interfaces/Commons/activator.interface.d.ts +3 -2
- package/dist/src/interfaces/Commons/adjacent.interface.d.ts +29 -0
- package/dist/src/interfaces/Commons/group.interface.d.ts +13 -2
- package/dist/src/interfaces/Commons/ripple.interface.d.ts +16 -0
- package/dist/src/interfaces/Commons/scroll.interface.d.ts +3 -2
- package/dist/src/interfaces/DataTable/data-table-header.interface.d.ts +2 -2
- package/dist/src/interfaces/DatePicker/date-picker-month.interface.d.ts +2 -1
- package/dist/src/interfaces/Menu/menu.interface.d.ts +28 -1
- package/dist/src/interfaces/OtpInputField/otp-input-field.interface.d.ts +21 -1
- package/dist/src/interfaces/RatingField/rating-field-item.interface.d.ts +16 -1
- package/dist/src/interfaces/index.cjs +11 -0
- package/dist/src/interfaces/index.d.ts +1 -0
- package/dist/src/interfaces/index.js +1 -0
- package/dist/src/nuxt/module.cjs +2 -1
- package/dist/src/nuxt/module.js +2 -1
- package/dist/src/origam.cjs +1 -2
- package/dist/src/origam.js +1 -2
- package/dist/src/themes/origam.theme.cjs +8 -14
- package/dist/src/themes/origam.theme.js +6 -8
- package/dist/src/types/Commons/color.type.d.ts +4 -3
- package/dist/src/types/Commons/commons.type.d.ts +33 -0
- package/dist/src/types/Commons/theme.type.d.ts +2 -1
- package/dist/src/types/Sheet/sheet.type.d.ts +2 -1
- package/dist/src/types/index.cjs +22 -0
- package/dist/src/types/index.d.ts +2 -0
- package/dist/src/types/index.js +2 -0
- package/dist/src/types/tokens.type.d.ts +1 -1
- package/dist/src/utils/Commons/a11y.util.cjs +35 -0
- package/dist/src/utils/Commons/a11y.util.d.ts +63 -0
- package/dist/src/utils/Commons/a11y.util.js +33 -0
- package/dist/src/utils/Commons/clickOutside.util.cjs +5 -1
- package/dist/src/utils/Commons/clickOutside.util.js +5 -1
- package/dist/src/utils/Commons/color.util.cjs +10 -15
- package/dist/src/utils/Commons/color.util.d.ts +34 -28
- package/dist/src/utils/Commons/color.util.js +9 -16
- package/dist/src/utils/Commons/goTo.util.cjs +31 -14
- package/dist/src/utils/Commons/goTo.util.d.ts +1 -1
- package/dist/src/utils/Commons/goTo.util.js +31 -16
- package/dist/src/utils/Commons/location.util.cjs +18 -3
- package/dist/src/utils/Commons/location.util.js +18 -3
- package/dist/src/utils/Commons/ripple.util.cjs +5 -1
- package/dist/src/utils/Commons/ripple.util.js +5 -1
- package/dist/src/utils/index.cjs +11 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.js +1 -0
- package/package.json +13 -2
- package/dist/src/consts/Btn/btn.const.cjs +0 -7
- package/dist/src/consts/Btn/btn.const.d.ts +0 -32
- package/dist/src/consts/Btn/btn.const.js +0 -1
- package/dist/src/types/Commons/locale.type.cjs +0 -1
- package/dist/src/types/Commons/locale.type.d.ts +0 -0
- package/dist/src/types/Commons/locale.type.js +0 -0
|
@@ -11,8 +11,169 @@
|
|
|
11
11
|
* This file is now HAND-MAINTAINED SOURCE: edit it directly. There is no
|
|
12
12
|
* regeneration step, and no "do not edit" rule any more. A design-token
|
|
13
13
|
* pipeline may be reintroduced later, once the DS is stable.
|
|
14
|
+
*
|
|
15
|
+
* ── TWO BLOCKS, ONE DECLARATION SET ────────────────────────────────────────
|
|
16
|
+
* 1. `[data-theme="dark"], :root:not([data-theme])[data-mode="dark"]`
|
|
17
|
+
* — the theme asked for EXPLICITLY, on
|
|
18
|
+
* EITHER axis (see #807 below).
|
|
19
|
+
* 2. `@media (prefers-color-scheme: dark) {
|
|
20
|
+
* :root:not([data-theme]):not([data-mode]) }`
|
|
21
|
+
* — AUTO mode: the OS preference, and
|
|
22
|
+
* only while the page has expressed no
|
|
23
|
+
* preference of its own, ON EITHER AXIS.
|
|
24
|
+
*
|
|
25
|
+
* ⛔ BOTH guards are load-bearing, and the second one is not optional.
|
|
26
|
+
* This DS is TWO-AXIS (see `useTheme`): `data-theme` carries the brand and
|
|
27
|
+
* `data-mode` carries light/dark. `applyModeToDocument()` ALWAYS writes a
|
|
28
|
+
* CONCRETE `data-mode`, and the Nuxt plugin OMITS `data-theme` when the
|
|
29
|
+
* brand resolves to `'auto'`. A page that pinned light therefore looks like
|
|
30
|
+
* `<html data-mode="light">` — no `data-theme` at all. With `:not([data-theme])`
|
|
31
|
+
* alone this media query MATCHES that page and repaints it dark against an
|
|
32
|
+
* explicit choice. Measured in Chromium before adding `:not([data-mode])`:
|
|
33
|
+
* OS dark + `data-mode="light"` → `rgb(10,10,10)` (the dark surface) instead
|
|
34
|
+
* of `rgb(255,255,255)`. The same shape is already used by `OrigamCode.vue`.
|
|
35
|
+
*
|
|
36
|
+
* Specificity: `:root:not([data-theme]):not([data-mode])` is (0,3,0) — enough
|
|
37
|
+
* to outrank light.css's `:root, [data-theme="light"]` (0,1,0) when nothing is
|
|
38
|
+
* pinned — while failing to match at all as soon as either axis is written.
|
|
39
|
+
*
|
|
40
|
+
* ── #807 — `data-mode="dark"` SEUL NE PEIGNAIT RIEN ────────────────────────
|
|
41
|
+
* Avant ce correctif, seule la matrice runtime (`apply-theme.util.ts`)
|
|
42
|
+
* émettait des règles `[data-mode="…"]` — les feuilles statiques n'en
|
|
43
|
+
* avaient AUCUNE. Un consommateur qui appelle `useTheme().setMode('dark')`
|
|
44
|
+
* sans avoir enregistré de thème de marque obtenait `<html data-mode="dark">`
|
|
45
|
+
* et restait en clair : les deux setters de `useTheme()` ne faisaient pas la
|
|
46
|
+
* même chose. Mesuré en Chromium sur `dist/src/assets/css/main.css` :
|
|
47
|
+
* `data-mode="dark"` seul → `rgb(255,255,255)` (surface claire) au lieu de
|
|
48
|
+
* `rgb(10,10,10)`.
|
|
49
|
+
*
|
|
50
|
+
* Le correctif AJOUTE UN SÉLECTEUR à la liste du bloc 1 existant plutôt que
|
|
51
|
+
* de dupliquer un troisième bloc de ~2730 déclarations (le coût que #807
|
|
52
|
+
* chiffrait pour l'approche naïve — `main.css` était déjà passé de 364 ko à
|
|
53
|
+
* 538 ko avec le second bloc). `:root:not([data-theme])[data-mode="dark"]`
|
|
54
|
+
* a la même spécificité (0,3,0) que le sélecteur du bloc média ci-dessus et
|
|
55
|
+
* matche exactement le même monde que lui côté "explicite" : `data-theme`
|
|
56
|
+
* absent, `data-mode="dark"` posé. Les deux blocs restent mutuellement
|
|
57
|
+
* exclusifs sur l'attribut `data-mode` (présent ici, absent là) donc ne se
|
|
58
|
+
* recouvrent jamais. `data-theme="light" data-mode="dark"` reste clair : la
|
|
59
|
+
* marque (`data-theme`) gouverne dès qu'elle est posée, `data-mode` seul ne
|
|
60
|
+
* bascule que l'absence de marque.
|
|
61
|
+
*
|
|
62
|
+
* ⛔ Le sélecteur 1 (bloc explicite) et le sélecteur du bloc média restent
|
|
63
|
+
* BYTE-DIFFÉRENTS de propos : le bloc 1 est INCONDITIONNEL (s'applique quel
|
|
64
|
+
* que soit `prefers-color-scheme`) tandis que le bloc média ne s'active que
|
|
65
|
+
* si NI `data-theme` NI `data-mode` ne sont posés. Ne pas les fusionner.
|
|
66
|
+
*
|
|
67
|
+
* ⚠️ Cette phrase disait « le deuxième bloc reste volontairement un
|
|
68
|
+
* SOUS-ENSEMBLE de 11 déclarations ». C'est FAUX depuis #794 : recompté le
|
|
69
|
+
* 2026-09-22 en parsant la feuille, les deux blocs portent **2731
|
|
70
|
+
* déclarations chacun**. La note décrivait un état antérieur que plus rien ne
|
|
71
|
+
* remesurait.
|
|
72
|
+
*
|
|
73
|
+
* ── #871 — POURQUOI `[data-mode="dark"]` REMPLACE `:root:not([data-theme])…` ─
|
|
74
|
+
* Le sélecteur précédent, `:root:not([data-theme])[data-mode="dark"]`, était
|
|
75
|
+
* ancré à la RACINE. Or les ~1 761 déclarations DÉRIVÉES de ce bloc
|
|
76
|
+
* (`--origam-title---color: var(--origam-color__text---primary)`) ne se
|
|
77
|
+
* ré-évaluent QUE sur un élément que le sélecteur matche : ailleurs, la
|
|
78
|
+
* valeur héritée est déjà SUBSTITUÉE. Un sous-arbre
|
|
79
|
+
* `<OrigamThemeProvider mode="dark">` — avec ou sans marque —
|
|
80
|
+
* basculait donc bien les ~60 tokens sémantiques (bloc runtime
|
|
81
|
+
* `[data-mode="dark"]` / `[data-theme="X"][data-mode="dark"]`) mais gardait
|
|
82
|
+
* les 1 761 dérivés GELÉS sur les valeurs CLAIRES de la racine. D'où le motif
|
|
83
|
+
* dominant de #871 : `rgb(10,10,10)` sur `rgb(10,10,10)`, texte et fond
|
|
84
|
+
* identiques.
|
|
85
|
+
*
|
|
86
|
+
* `[data-mode="dark"]` matche aussi bien la racine que n'importe quel
|
|
87
|
+
* sous-arbre, et subsume donc l'ancien sélecteur (une racine sans
|
|
88
|
+
* `data-theme` portant `data-mode="dark"` le matche).
|
|
89
|
+
*
|
|
90
|
+
* ⛔ Le `:not([data-theme="light"])` n'est PAS décoratif : il préserve la
|
|
91
|
+
* règle de #807 — « la marque gouverne dès qu'elle est posée » — pour la
|
|
92
|
+
* seule combinaison où les deux axes se contredisent,
|
|
93
|
+
* `data-theme="light" data-mode="dark"`, épinglée par le contrôle négatif de
|
|
94
|
+
* `packages/tests/e2e/tokens-prefers-color-scheme.spec.ts`.
|
|
95
|
+
*
|
|
96
|
+
* ⛔ Spécificité (0,2,0). Elle doit rester ≥ celle de `light.css`
|
|
97
|
+
* (`:root` / `[data-theme="light"]` / `[data-mode="light"]`, toutes (0,1,0))
|
|
98
|
+
* et ≤ celle du bloc runtime d'une marque sombre
|
|
99
|
+
* (`[data-theme="X"][data-mode="dark"]`, (0,2,0), injecté plus tard donc
|
|
100
|
+
* gagnant à égalité). Monter ou descendre ce sélecteur casse l'un des deux
|
|
101
|
+
* côtés.
|
|
102
|
+
*
|
|
103
|
+
* ⛔ The two blocks carry the SAME declarations, and this file is BYTE-IDENTICAL
|
|
104
|
+
* to its twin — the whole file, header included. The pair is
|
|
105
|
+
* `src/assets/css/tokens/dark.css` ⇄ `src/assets/scss/tokens/_dark.scss`, and
|
|
106
|
+
* the same holds for every other token pair.
|
|
107
|
+
*
|
|
108
|
+
* Why it matters here in particular: `main.css` — the `./styles` export, the
|
|
109
|
+
* entry a consumer gets by default — is compiled from the SCSS side. A block
|
|
110
|
+
* present in the CSS file and missing from the SCSS one ships a bundle with NO
|
|
111
|
+
* auto dark mode, while this file and the documentation both say otherwise.
|
|
112
|
+
* That was #794. `scripts/guards/token-twins.mjs` now fails on any divergence.
|
|
113
|
+
*
|
|
114
|
+
* ── #789 — CONTRASTE : POURQUOI CES PALIERS-LÀ ─────────────────────────────
|
|
115
|
+
* Mêmes couples `bg`/`fg` blanc qu'en clair, mêmes valeurs (success
|
|
116
|
+
* `green-700`, warning `amber-700`, info `#2563eb`). S'y ajoutent deux
|
|
117
|
+
* paliers PROPRES au sombre, mesurés en Chromium, alpha composité :
|
|
118
|
+
*
|
|
119
|
+
* action--primary---bg primary-500 #8b5cf6 4.23 → primary-600 5.70
|
|
120
|
+
* action--primary---bgHover primary-400 #a78bfa 2.72 → primary-700 7.10
|
|
121
|
+
*
|
|
122
|
+
* ⛔ Le `bgHover` sombre était la pire paire du jeu — 2.72:1 en texte blanc,
|
|
123
|
+
* pire que le fond au repos — et n'était signalé nulle part.
|
|
124
|
+
*
|
|
125
|
+
* ⚠️ CONTRAINTE DE PALETTE, mesurée : sur la surface sombre `#0a0a0a`, le
|
|
126
|
+
* SEUL palier violet qui tienne À LA FOIS le texte blanc à 4.5:1 et les 3:1
|
|
127
|
+
* non textuels de 1.4.11 contre la page est `primary---600` (blanc 5.70,
|
|
128
|
+
* page 3.47). Deux paliers distincts pour repos ET survol sont donc
|
|
129
|
+
* impossibles avec du texte blanc : `bgHover` à `primary---700` tombe à
|
|
130
|
+
* 2.79 contre la page. Arbitrage assumé — le survol est transitoire et
|
|
131
|
+
* désigné par le curseur, l'état au repos reste à 3.47. L'alternative
|
|
132
|
+
* (garder `#8b5cf6` et passer `primary---fg` à l'encre en sombre) tient les
|
|
133
|
+
* deux critères mais fait du primaire la seule intention à texte foncé.
|
|
134
|
+
*
|
|
135
|
+
* Mesure, témoins et non-régression :
|
|
136
|
+
* `packages/tests/e2e/token-intent-contrast.spec.ts`.
|
|
137
|
+
*
|
|
138
|
+
* ── #871 — SURFACE QUI NE BASCULE PAS × PREMIER PLAN QUI BASCULE ───────────
|
|
139
|
+
* Deuxième famille de défauts trouvée en rejouant le chiffrage, INDÉPENDANTE
|
|
140
|
+
* du mécanisme de sélecteur ci-dessus : elle se voit aussi bien en theming
|
|
141
|
+
* RACINE qu'en sous-arbre.
|
|
142
|
+
*
|
|
143
|
+
* `--origam-color__text---inverse` est défini comme l'opposé de
|
|
144
|
+
* `text---primary` : blanc en clair, encre en sombre. Posé sur une surface
|
|
145
|
+
* qui, elle, est épinglée à une PRIMITIVE (donc identique dans les deux
|
|
146
|
+
* modes), il est correct en clair et illisible en sombre :
|
|
147
|
+
*
|
|
148
|
+
* system-bar fond neutral-700 (#404040) · fg text---inverse → 1.91:1
|
|
149
|
+
* tooltip fond neutral-800 (#262626) · fg text---inverse → 1.31:1
|
|
150
|
+
*
|
|
151
|
+
* Le correctif se fait DANS CETTE FEUILLE UNIQUEMENT : `text---primary`, qui
|
|
152
|
+
* est clair en sombre par définition, sur une surface sombre. `light.css`
|
|
153
|
+
* n'est pas touché et garde `text---inverse`, qui y vaut blanc.
|
|
154
|
+
*
|
|
155
|
+
* ⛔ Premier essai, ÉCARTÉ PAR LA MESURE : passer les deux feuilles à
|
|
156
|
+
* `text---onColor`. Blanc dans les deux modes pour l'identité native, donc
|
|
157
|
+
* NO-OP apparent en clair — sauf qu'une marque est libre de redéfinir
|
|
158
|
+
* `onColor`, et `cartoon` le pose à `#3a2a2e` (brun foncé). Le « no-op » a
|
|
159
|
+
* mesuré **+2 violations en mode CLAIR** (system-bar cartoon, 1.31:1). La
|
|
160
|
+
* leçon vaut au-delà de ce ticket : sur cette famille, un token sémantique
|
|
161
|
+
* n'est jamais « le même dans les deux modes » — seules les 8 identités
|
|
162
|
+
* mesurées le disent.
|
|
163
|
+
*
|
|
164
|
+
* Symétriquement, `--origam-bottom-nav---background` était épinglé à
|
|
165
|
+
* `neutral---200` (#e6e6e6) dans les DEUX modes : une dalle claire au milieu
|
|
166
|
+
* d'une UI sombre, avec un `text---primary` presque blanc par-dessus
|
|
167
|
+
* (1.03:1). Il passe au token sémantique `surface---overlay`, qui bascule.
|
|
168
|
+
* Le bloc clair n'est pas touché.
|
|
169
|
+
*
|
|
170
|
+
* ⚠️ Non traité ici : `video__controls`, `video--error`, `audio__cover-label`,
|
|
171
|
+
* `media-scrubber__tooltip`, `media-volume-control__tooltip` sont eux aussi
|
|
172
|
+
* épinglés à une primitive neutre sombre — mais leur premier plan ne bascule
|
|
173
|
+
* pas, donc aucun d'eux n'est ressorti de la mesure. Non vérifié un par un.
|
|
14
174
|
*/
|
|
15
|
-
[data-theme="dark"]
|
|
175
|
+
[data-theme="dark"],
|
|
176
|
+
[data-mode="dark"]:not([data-theme="light"]) {
|
|
16
177
|
--origam-color__surface---default: var(--origam-color__neutral---950);
|
|
17
178
|
--origam-color__surface---raised: var(--origam-color__neutral---900);
|
|
18
179
|
--origam-color__surface---overlay: var(--origam-color__neutral---800);
|
|
@@ -22,15 +183,15 @@
|
|
|
22
183
|
--origam-color__text---primary: var(--origam-color__neutral---50);
|
|
23
184
|
--origam-color__text---secondary: var(--origam-color__neutral---400);
|
|
24
185
|
--origam-color__text---disabled: var(--origam-color__neutral---600);
|
|
25
|
-
--origam-color__text---inverse: var(--origam-color__neutral---
|
|
186
|
+
--origam-color__text---inverse: var(--origam-color__neutral---950); /* #615 — voir light.css : le bloc runtime de `origamDarkTheme` pose #0a0a0a */
|
|
26
187
|
--origam-color__text---onColor: var(--origam-color__neutral---0);
|
|
27
188
|
--origam-color__border---default: var(--origam-color__neutral---700);
|
|
28
189
|
--origam-color__border---subtle: var(--origam-color__neutral---800);
|
|
29
190
|
--origam-color__border---strong: var(--origam-color__neutral---400);
|
|
30
191
|
--origam-color__border---focus: var(--origam-color__primary---400);
|
|
31
|
-
--origam-color__action--primary---bg: var(--origam-color__primary---
|
|
192
|
+
--origam-color__action--primary---bg: var(--origam-color__primary---600);
|
|
32
193
|
--origam-color__accent---base: var(--origam-color__action--primary---bg);
|
|
33
|
-
--origam-color__action--primary---bgHover: var(--origam-color__primary---
|
|
194
|
+
--origam-color__action--primary---bgHover: var(--origam-color__primary---700);
|
|
34
195
|
--origam-color__action--primary---bgSubtle: var(--origam-color__primary---900);
|
|
35
196
|
--origam-color__action--primary---bgDisabled: var(--origam-color__neutral---800);
|
|
36
197
|
--origam-color__action--primary---fg: var(--origam-color__neutral---0);
|
|
@@ -47,12 +208,12 @@
|
|
|
47
208
|
--origam-color__action--ghost---bgDisabled: rgba(0, 0, 0, 0);
|
|
48
209
|
--origam-color__action--ghost---fg: var(--origam-color__primary---400);
|
|
49
210
|
--origam-color__action--ghost---fgDisabled: var(--origam-color__neutral---600);
|
|
50
|
-
--origam-color__feedback--success---bg: var(--origam-color__green---
|
|
211
|
+
--origam-color__feedback--success---bg: var(--origam-color__green---700);
|
|
51
212
|
--origam-color__feedback--success---bgSubtle: var(--origam-color__neutral---900);
|
|
52
213
|
--origam-color__feedback--success---fg: var(--origam-color__neutral---0);
|
|
53
214
|
--origam-color__feedback--success---fgSubtle: var(--origam-color__green---400);
|
|
54
215
|
--origam-color__feedback--success---border: var(--origam-color__green---500);
|
|
55
|
-
--origam-color__feedback--warning---bg: var(--origam-color__amber---
|
|
216
|
+
--origam-color__feedback--warning---bg: var(--origam-color__amber---700);
|
|
56
217
|
--origam-color__feedback--warning---bgSubtle: var(--origam-color__neutral---900);
|
|
57
218
|
--origam-color__feedback--warning---fg: var(--origam-color__neutral---0);
|
|
58
219
|
--origam-color__feedback--warning---fgSubtle: var(--origam-color__amber---400);
|
|
@@ -62,7 +223,7 @@
|
|
|
62
223
|
--origam-color__feedback--danger---fg: var(--origam-color__neutral---0);
|
|
63
224
|
--origam-color__feedback--danger---fgSubtle: var(--origam-color__red---400);
|
|
64
225
|
--origam-color__feedback--danger---border: var(--origam-color__red---400);
|
|
65
|
-
--origam-color__feedback--info---bg:
|
|
226
|
+
--origam-color__feedback--info---bg: #2563eb;
|
|
66
227
|
--origam-color__feedback--info---bgSubtle: var(--origam-color__neutral---900);
|
|
67
228
|
--origam-color__feedback--info---fg: var(--origam-color__neutral---0);
|
|
68
229
|
--origam-color__feedback--info---fgSubtle: var(--origam-color__blue---400);
|
|
@@ -88,7 +249,7 @@
|
|
|
88
249
|
--origam-btn---border-style: solid;
|
|
89
250
|
--origam-btn---border-color: currentColor;
|
|
90
251
|
--origam-btn---position: relative;
|
|
91
|
-
--origam-btn---density:
|
|
252
|
+
--origam-btn---density: 0px;
|
|
92
253
|
--origam-btn---width: auto;
|
|
93
254
|
--origam-btn---min-width: 64px;
|
|
94
255
|
--origam-btn---max-width: 100%;
|
|
@@ -582,7 +743,7 @@
|
|
|
582
743
|
--origam-bottom-nav---density: 0px;
|
|
583
744
|
--origam-bottom-nav---max-width: 100%;
|
|
584
745
|
--origam-bottom-nav---height: var(--origam-space---12);
|
|
585
|
-
--origam-bottom-nav---background: var(--origam-
|
|
746
|
+
--origam-bottom-nav---background: var(--origam-color__surface---overlay);
|
|
586
747
|
--origam-bottom-nav---color: var(--origam-color__text---primary);
|
|
587
748
|
--origam-bottom-nav---box-shadow: var(--origam-shadow---none);
|
|
588
749
|
--origam-bottom-nav---padding-block-start: var(--origam-space---2);
|
|
@@ -852,7 +1013,7 @@
|
|
|
852
1013
|
--origam-system-bar---height-window: 32px;
|
|
853
1014
|
--origam-system-bar---padding-inline: var(--origam-space---2);
|
|
854
1015
|
--origam-system-bar---background: var(--origam-color__neutral---700);
|
|
855
|
-
--origam-system-bar---color: var(--origam-color__text---
|
|
1016
|
+
--origam-system-bar---color: var(--origam-color__text---primary);
|
|
856
1017
|
--origam-system-bar---font-size: var(--origam-font__size---sm);
|
|
857
1018
|
--origam-system-bar---font-weight: var(--origam-font__weight---regular);
|
|
858
1019
|
--origam-system-bar---letter-spacing: var(--origam-font__letterSpacing---wide);
|
|
@@ -919,8 +1080,8 @@
|
|
|
919
1080
|
--origam-field__input---padding-block-filled: 20px;
|
|
920
1081
|
--origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
|
|
921
1082
|
--origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
|
|
922
|
-
--origam-field__input---padding-start:
|
|
923
|
-
--origam-field__input---padding-end:
|
|
1083
|
+
--origam-field__input---padding-start: 0px;
|
|
1084
|
+
--origam-field__input---padding-end: 0px;
|
|
924
1085
|
--origam-field__input---opacity: 0.7;
|
|
925
1086
|
--origam-field__label---font-size: 0.75em;
|
|
926
1087
|
--origam-field__label---transition-duration: var(--origam-motion__duration---normal);
|
|
@@ -1370,7 +1531,7 @@
|
|
|
1370
1531
|
--origam-menu---offset-left: var(--origam-space---0);
|
|
1371
1532
|
--origam-menu---offset-right: var(--origam-space---0);
|
|
1372
1533
|
--origam-tooltip---background-color: var(--origam-color__neutral---800);
|
|
1373
|
-
--origam-tooltip---color: var(--origam-color__text---
|
|
1534
|
+
--origam-tooltip---color: var(--origam-color__text---primary);
|
|
1374
1535
|
--origam-tooltip---backdrop-filter: none;
|
|
1375
1536
|
--origam-tooltip---font-size: var(--origam-font__size---sm);
|
|
1376
1537
|
--origam-tooltip---font-weight: var(--origam-font__weight---medium);
|
|
@@ -1430,6 +1591,9 @@
|
|
|
1430
1591
|
--origam-table__header-cell---padding-inline: var(--origam-space---4);
|
|
1431
1592
|
--origam-table__header-cell---border-bottom-color: var(--origam-color__border---default);
|
|
1432
1593
|
--origam-table__header-cell---border-bottom-width: var(--origam-border__width---2);
|
|
1594
|
+
/* #840 — see light.css: derived from the density-aware padding-block
|
|
1595
|
+
token so it can't drift out of sync with it. */
|
|
1596
|
+
--origam-table__header-cell---height: calc((2 * var(--origam-table__header-cell---padding-block, 12px)) + var(--origam-table__header-cell---border-bottom-width, 2px) + 18px);
|
|
1433
1597
|
--origam-table__cell---padding-block: var(--origam-space---3);
|
|
1434
1598
|
--origam-table__cell---padding-inline: var(--origam-space---4);
|
|
1435
1599
|
--origam-table__cell---border-color: var(--origam-color__border---subtle);
|
|
@@ -2745,7 +2909,7 @@
|
|
|
2745
2909
|
--origam-tab-panels__panel--focus---outline-color: currentColor;
|
|
2746
2910
|
}
|
|
2747
2911
|
@media (prefers-color-scheme: dark) {
|
|
2748
|
-
:root:not([data-theme]) {
|
|
2912
|
+
:root:not([data-theme]):not([data-mode]) {
|
|
2749
2913
|
--origam-color__surface---default: var(--origam-color__neutral---950);
|
|
2750
2914
|
--origam-color__surface---raised: var(--origam-color__neutral---900);
|
|
2751
2915
|
--origam-color__surface---overlay: var(--origam-color__neutral---800);
|
|
@@ -2755,15 +2919,15 @@
|
|
|
2755
2919
|
--origam-color__text---primary: var(--origam-color__neutral---50);
|
|
2756
2920
|
--origam-color__text---secondary: var(--origam-color__neutral---400);
|
|
2757
2921
|
--origam-color__text---disabled: var(--origam-color__neutral---600);
|
|
2758
|
-
--origam-color__text---inverse: var(--origam-color__neutral---
|
|
2922
|
+
--origam-color__text---inverse: var(--origam-color__neutral---950); /* #615 — voir light.css : le bloc runtime de `origamDarkTheme` pose #0a0a0a */
|
|
2759
2923
|
--origam-color__text---onColor: var(--origam-color__neutral---0);
|
|
2760
2924
|
--origam-color__border---default: var(--origam-color__neutral---700);
|
|
2761
2925
|
--origam-color__border---subtle: var(--origam-color__neutral---800);
|
|
2762
2926
|
--origam-color__border---strong: var(--origam-color__neutral---400);
|
|
2763
2927
|
--origam-color__border---focus: var(--origam-color__primary---400);
|
|
2764
|
-
--origam-color__action--primary---bg: var(--origam-color__primary---
|
|
2928
|
+
--origam-color__action--primary---bg: var(--origam-color__primary---600);
|
|
2765
2929
|
--origam-color__accent---base: var(--origam-color__action--primary---bg);
|
|
2766
|
-
--origam-color__action--primary---bgHover: var(--origam-color__primary---
|
|
2930
|
+
--origam-color__action--primary---bgHover: var(--origam-color__primary---700);
|
|
2767
2931
|
--origam-color__action--primary---bgSubtle: var(--origam-color__primary---900);
|
|
2768
2932
|
--origam-color__action--primary---bgDisabled: var(--origam-color__neutral---800);
|
|
2769
2933
|
--origam-color__action--primary---fg: var(--origam-color__neutral---0);
|
|
@@ -2780,12 +2944,12 @@
|
|
|
2780
2944
|
--origam-color__action--ghost---bgDisabled: rgba(0, 0, 0, 0);
|
|
2781
2945
|
--origam-color__action--ghost---fg: var(--origam-color__primary---400);
|
|
2782
2946
|
--origam-color__action--ghost---fgDisabled: var(--origam-color__neutral---600);
|
|
2783
|
-
--origam-color__feedback--success---bg: var(--origam-color__green---
|
|
2947
|
+
--origam-color__feedback--success---bg: var(--origam-color__green---700);
|
|
2784
2948
|
--origam-color__feedback--success---bgSubtle: var(--origam-color__neutral---900);
|
|
2785
2949
|
--origam-color__feedback--success---fg: var(--origam-color__neutral---0);
|
|
2786
2950
|
--origam-color__feedback--success---fgSubtle: var(--origam-color__green---400);
|
|
2787
2951
|
--origam-color__feedback--success---border: var(--origam-color__green---500);
|
|
2788
|
-
--origam-color__feedback--warning---bg: var(--origam-color__amber---
|
|
2952
|
+
--origam-color__feedback--warning---bg: var(--origam-color__amber---700);
|
|
2789
2953
|
--origam-color__feedback--warning---bgSubtle: var(--origam-color__neutral---900);
|
|
2790
2954
|
--origam-color__feedback--warning---fg: var(--origam-color__neutral---0);
|
|
2791
2955
|
--origam-color__feedback--warning---fgSubtle: var(--origam-color__amber---400);
|
|
@@ -2795,7 +2959,7 @@
|
|
|
2795
2959
|
--origam-color__feedback--danger---fg: var(--origam-color__neutral---0);
|
|
2796
2960
|
--origam-color__feedback--danger---fgSubtle: var(--origam-color__red---400);
|
|
2797
2961
|
--origam-color__feedback--danger---border: var(--origam-color__red---400);
|
|
2798
|
-
--origam-color__feedback--info---bg:
|
|
2962
|
+
--origam-color__feedback--info---bg: #2563eb;
|
|
2799
2963
|
--origam-color__feedback--info---bgSubtle: var(--origam-color__neutral---900);
|
|
2800
2964
|
--origam-color__feedback--info---fg: var(--origam-color__neutral---0);
|
|
2801
2965
|
--origam-color__feedback--info---fgSubtle: var(--origam-color__blue---400);
|
|
@@ -2821,7 +2985,7 @@
|
|
|
2821
2985
|
--origam-btn---border-style: solid;
|
|
2822
2986
|
--origam-btn---border-color: currentColor;
|
|
2823
2987
|
--origam-btn---position: relative;
|
|
2824
|
-
--origam-btn---density:
|
|
2988
|
+
--origam-btn---density: 0px;
|
|
2825
2989
|
--origam-btn---width: auto;
|
|
2826
2990
|
--origam-btn---min-width: 64px;
|
|
2827
2991
|
--origam-btn---max-width: 100%;
|
|
@@ -3315,7 +3479,7 @@
|
|
|
3315
3479
|
--origam-bottom-nav---density: 0px;
|
|
3316
3480
|
--origam-bottom-nav---max-width: 100%;
|
|
3317
3481
|
--origam-bottom-nav---height: var(--origam-space---12);
|
|
3318
|
-
--origam-bottom-nav---background: var(--origam-
|
|
3482
|
+
--origam-bottom-nav---background: var(--origam-color__surface---overlay);
|
|
3319
3483
|
--origam-bottom-nav---color: var(--origam-color__text---primary);
|
|
3320
3484
|
--origam-bottom-nav---box-shadow: var(--origam-shadow---none);
|
|
3321
3485
|
--origam-bottom-nav---padding-block-start: var(--origam-space---2);
|
|
@@ -3585,7 +3749,7 @@
|
|
|
3585
3749
|
--origam-system-bar---height-window: 32px;
|
|
3586
3750
|
--origam-system-bar---padding-inline: var(--origam-space---2);
|
|
3587
3751
|
--origam-system-bar---background: var(--origam-color__neutral---700);
|
|
3588
|
-
--origam-system-bar---color: var(--origam-color__text---
|
|
3752
|
+
--origam-system-bar---color: var(--origam-color__text---primary);
|
|
3589
3753
|
--origam-system-bar---font-size: var(--origam-font__size---sm);
|
|
3590
3754
|
--origam-system-bar---font-weight: var(--origam-font__weight---regular);
|
|
3591
3755
|
--origam-system-bar---letter-spacing: var(--origam-font__letterSpacing---wide);
|
|
@@ -3652,8 +3816,8 @@
|
|
|
3652
3816
|
--origam-field__input---padding-block-filled: 20px;
|
|
3653
3817
|
--origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
|
|
3654
3818
|
--origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
|
|
3655
|
-
--origam-field__input---padding-start:
|
|
3656
|
-
--origam-field__input---padding-end:
|
|
3819
|
+
--origam-field__input---padding-start: 0px;
|
|
3820
|
+
--origam-field__input---padding-end: 0px;
|
|
3657
3821
|
--origam-field__input---opacity: 0.7;
|
|
3658
3822
|
--origam-field__label---font-size: 0.75em;
|
|
3659
3823
|
--origam-field__label---transition-duration: var(--origam-motion__duration---normal);
|
|
@@ -4103,7 +4267,7 @@
|
|
|
4103
4267
|
--origam-menu---offset-left: var(--origam-space---0);
|
|
4104
4268
|
--origam-menu---offset-right: var(--origam-space---0);
|
|
4105
4269
|
--origam-tooltip---background-color: var(--origam-color__neutral---800);
|
|
4106
|
-
--origam-tooltip---color: var(--origam-color__text---
|
|
4270
|
+
--origam-tooltip---color: var(--origam-color__text---primary);
|
|
4107
4271
|
--origam-tooltip---backdrop-filter: none;
|
|
4108
4272
|
--origam-tooltip---font-size: var(--origam-font__size---sm);
|
|
4109
4273
|
--origam-tooltip---font-weight: var(--origam-font__weight---medium);
|
|
@@ -4163,6 +4327,9 @@
|
|
|
4163
4327
|
--origam-table__header-cell---padding-inline: var(--origam-space---4);
|
|
4164
4328
|
--origam-table__header-cell---border-bottom-color: var(--origam-color__border---default);
|
|
4165
4329
|
--origam-table__header-cell---border-bottom-width: var(--origam-border__width---2);
|
|
4330
|
+
/* #840 — see light.css: derived from the density-aware padding-block
|
|
4331
|
+
token so it can't drift out of sync with it. */
|
|
4332
|
+
--origam-table__header-cell---height: calc((2 * var(--origam-table__header-cell---padding-block, 12px)) + var(--origam-table__header-cell---border-bottom-width, 2px) + 18px);
|
|
4166
4333
|
--origam-table__cell---padding-block: var(--origam-space---3);
|
|
4167
4334
|
--origam-table__cell---padding-inline: var(--origam-space---4);
|
|
4168
4335
|
--origam-table__cell---border-color: var(--origam-color__border---subtle);
|
|
@@ -11,16 +11,78 @@
|
|
|
11
11
|
* This file is now HAND-MAINTAINED SOURCE: edit it directly. There is no
|
|
12
12
|
* regeneration step, and no "do not edit" rule any more. A design-token
|
|
13
13
|
* pipeline may be reintroduced later, once the DS is stable.
|
|
14
|
+
*
|
|
15
|
+
* ── #789 — CONTRASTE : POURQUOI CES PALIERS-LÀ ─────────────────────────────
|
|
16
|
+
* `feedback--{success,warning,info}---bg` portent tous un `---fg` BLANC. Le
|
|
17
|
+
* couple doit donc tenir 4.5:1 (WCAG AA, texte). Mesuré en Chromium, alpha
|
|
18
|
+
* composité, avec témoins calculables à la main :
|
|
19
|
+
*
|
|
20
|
+
* success green-500 #4caf50 2.78 → green-700 #15803d 5.02
|
|
21
|
+
* warning amber-600 #fb8c00 2.37 → amber-700 #b45309 5.02
|
|
22
|
+
* info blue-500 #2196f3 3.12 → #2563eb 5.17
|
|
23
|
+
*
|
|
24
|
+
* ⛔ Ne pas « re-éclaircir » ces trois paliers sans remesurer : sur cette
|
|
25
|
+
* palette, aucun palier plus clair ne tient AA avec du texte blanc. La
|
|
26
|
+
* mesure et ses témoins vivent dans
|
|
27
|
+
* `packages/tests/e2e/token-intent-contrast.spec.ts` — elle rougit ici.
|
|
28
|
+
*
|
|
29
|
+
* `info---bg` est le seul littéral du lot : `#2563eb` n'existe pas dans la
|
|
30
|
+
* palette primitive (son `blue---600` vaut `#1d4ed8`, soit le 700 de
|
|
31
|
+
* Tailwind). La valeur est celle de `origam.theme.ts`, ce qui ferme du même
|
|
32
|
+
* coup la divergence feuille ↔ thème que #793 suit.
|
|
33
|
+
*
|
|
34
|
+
* ── #871 — POURQUOI `[data-mode="light"]` DANS LA LISTE ────────────────────
|
|
35
|
+
* Les ~1 792 déclarations DÉRIVÉES de ce bloc — la forme
|
|
36
|
+
* `--origam-title---color: var(--origam-color__text---primary)` —
|
|
37
|
+
* ne se ré-évaluent QUE sur un élément que ce sélecteur matche. Sur tout autre
|
|
38
|
+
* élément, la valeur héritée est déjà SUBSTITUÉE — c'est la sémantique des
|
|
39
|
+
* custom properties, pas un bug : `--a: var(--b)` posé à `:root`, `--b`
|
|
40
|
+
* réécrit sur un enfant, et `--a` garde sur l'enfant la valeur calculée à la
|
|
41
|
+
* racine.
|
|
42
|
+
*
|
|
43
|
+
* Sans `[data-mode="light"]`, un sous-arbre `<OrigamThemeProvider mode="light">`
|
|
44
|
+
* à l'intérieur d'une page sombre gardait donc les 1 792 dérivés GELÉS sur les
|
|
45
|
+
* valeurs sombres de la racine. C'est le pendant clair du défaut mesuré en
|
|
46
|
+
* sombre par #871.
|
|
47
|
+
*
|
|
48
|
+
* ⛔ SPÉCIFICITÉ (0,1,0), VOLONTAIREMENT. Le bloc runtime d'une marque claire
|
|
49
|
+
* (`applyThemes()` sérialise `[data-theme="cartoon"]` sans `data-mode`) est
|
|
50
|
+
* lui aussi (0,1,0) et est injecté dans `<head>` APRÈS cette feuille : à
|
|
51
|
+
* égalité, l'ordre source tranche et la marque gagne. Monter ce sélecteur à
|
|
52
|
+
* (0,2,0) (p. ex. `[data-mode="light"]:not([data-theme="dark"])`) le ferait
|
|
53
|
+
* perdre, et cette feuille repeindrait par-dessus chaque marque claire.
|
|
54
|
+
*
|
|
55
|
+
* ── #871 — `system-bar` / `tooltip` : RIEN NE CHANGE ICI ──────────────────
|
|
56
|
+
* Ces deux composants peignent une surface SOMBRE dans les deux modes
|
|
57
|
+
* (`neutral---700` / `neutral---800`) et lisent `text---inverse`, qui vaut
|
|
58
|
+
* blanc EN CLAIR — correct, donc inchangé. C'est en SOMBRE que le même token
|
|
59
|
+
* vaut de l'encre et rend le texte illisible ; le correctif est donc dans
|
|
60
|
+
* `dark.css` seul. Voir son en-tête, y compris la piste écartée (passer les
|
|
61
|
+
* DEUX feuilles à `text---onColor`, qui a mesuré +2 violations en clair sur
|
|
62
|
+
* la marque `cartoon`).
|
|
14
63
|
*/
|
|
15
64
|
:root,
|
|
16
|
-
[data-theme="light"]
|
|
65
|
+
[data-theme="light"],
|
|
66
|
+
[data-mode="light"] {
|
|
17
67
|
--origam-color__surface---default: var(--origam-color__neutral---0);
|
|
18
68
|
--origam-color__surface---raised: var(--origam-color__neutral---0);
|
|
19
69
|
--origam-color__surface---overlay: var(--origam-color__neutral---100);
|
|
20
70
|
--origam-color__surface---sunken: var(--origam-color__neutral---50);
|
|
21
71
|
--origam-color__surface---disabled: var(--origam-color__neutral---200);
|
|
22
72
|
--origam-color__surface---inverse: var(--origam-color__neutral---900);
|
|
23
|
-
|
|
73
|
+
/* #615 — `950`, PAS `900`. Cette feuille NE gagne PAS la cascade au niveau
|
|
74
|
+
document : `createOrigam()` appelle `applyThemes()`, qui serialise
|
|
75
|
+
`origamLightTheme` (src/themes/origam.theme.ts) en un bloc `:root { … }`
|
|
76
|
+
injecte dans <head> APRES cette feuille. A specificite egale (0,1,0) c'est
|
|
77
|
+
l'ordre source qui tranche, donc le bloc runtime gagne — et il pose
|
|
78
|
+
`#0a0a0a`, soit neutral-950. Tant que cette ligne disait `900`, le meme
|
|
79
|
+
theme « light » peignait DEUX couleurs : `#0a0a0a` a la racine et
|
|
80
|
+
`#171717` dans un sous-arbre `<OrigamThemeProvider theme="light">` (ou
|
|
81
|
+
`[data-theme="light"]` matche alors que `:root` ne matche plus). Les deux
|
|
82
|
+
valeurs mesurees en Chromium ; le contraste sur `surface.default` passe de
|
|
83
|
+
17.93:1 a 19.80:1. Si cette ligne doit revenir a `900`, c'est
|
|
84
|
+
`origam.theme.ts` qu'il faut changer AVEC, sinon la divergence revient. */
|
|
85
|
+
--origam-color__text---primary: var(--origam-color__neutral---950);
|
|
24
86
|
--origam-color__text---secondary: var(--origam-color__neutral---600);
|
|
25
87
|
--origam-color__text---disabled: var(--origam-color__neutral---400);
|
|
26
88
|
--origam-color__text---inverse: var(--origam-color__neutral---0);
|
|
@@ -48,26 +110,26 @@
|
|
|
48
110
|
--origam-color__action--ghost---bgDisabled: rgba(0, 0, 0, 0);
|
|
49
111
|
--origam-color__action--ghost---fg: var(--origam-color__primary---600);
|
|
50
112
|
--origam-color__action--ghost---fgDisabled: var(--origam-color__neutral---400);
|
|
51
|
-
--origam-color__feedback--success---bg: var(--origam-color__green---
|
|
113
|
+
--origam-color__feedback--success---bg: var(--origam-color__green---700);
|
|
52
114
|
--origam-color__feedback--success---bgSubtle: var(--origam-color__green---50);
|
|
53
115
|
--origam-color__feedback--success---fg: var(--origam-color__neutral---0);
|
|
54
116
|
--origam-color__feedback--success---fgSubtle: var(--origam-color__green---700);
|
|
55
|
-
--origam-color__feedback--success---border: var(--origam-color__green---
|
|
56
|
-
--origam-color__feedback--warning---bg: var(--origam-color__amber---
|
|
117
|
+
--origam-color__feedback--success---border: var(--origam-color__green---700);
|
|
118
|
+
--origam-color__feedback--warning---bg: var(--origam-color__amber---700);
|
|
57
119
|
--origam-color__feedback--warning---bgSubtle: var(--origam-color__amber---50);
|
|
58
120
|
--origam-color__feedback--warning---fg: var(--origam-color__neutral---0);
|
|
59
121
|
--origam-color__feedback--warning---fgSubtle: var(--origam-color__amber---700);
|
|
60
|
-
--origam-color__feedback--warning---border: var(--origam-color__amber---
|
|
122
|
+
--origam-color__feedback--warning---border: var(--origam-color__amber---700);
|
|
61
123
|
--origam-color__feedback--danger---bg: var(--origam-color__red---600);
|
|
62
124
|
--origam-color__feedback--danger---bgSubtle: var(--origam-color__red---50);
|
|
63
125
|
--origam-color__feedback--danger---fg: var(--origam-color__neutral---0);
|
|
64
126
|
--origam-color__feedback--danger---fgSubtle: var(--origam-color__red---700);
|
|
65
127
|
--origam-color__feedback--danger---border: var(--origam-color__red---400);
|
|
66
|
-
--origam-color__feedback--info---bg:
|
|
128
|
+
--origam-color__feedback--info---bg: #2563eb;
|
|
67
129
|
--origam-color__feedback--info---bgSubtle: var(--origam-color__blue---50);
|
|
68
130
|
--origam-color__feedback--info---fg: var(--origam-color__neutral---0);
|
|
69
131
|
--origam-color__feedback--info---fgSubtle: var(--origam-color__blue---700);
|
|
70
|
-
--origam-color__feedback--info---border:
|
|
132
|
+
--origam-color__feedback--info---border: #2563eb;
|
|
71
133
|
--origam-color__overlay---scrim: var(--origam-color---white);
|
|
72
134
|
--origam-gradient---sunset: linear-gradient(135deg, #ff7e5f, #feb47b);
|
|
73
135
|
--origam-gradient---ocean: linear-gradient(135deg, #2193b0, #6dd5ed);
|
|
@@ -89,7 +151,7 @@
|
|
|
89
151
|
--origam-btn---border-style: solid;
|
|
90
152
|
--origam-btn---border-color: currentColor;
|
|
91
153
|
--origam-btn---position: relative;
|
|
92
|
-
--origam-btn---density:
|
|
154
|
+
--origam-btn---density: 0px;
|
|
93
155
|
--origam-btn---width: auto;
|
|
94
156
|
--origam-btn---min-width: 64px;
|
|
95
157
|
--origam-btn---max-width: 100%;
|
|
@@ -920,8 +982,8 @@
|
|
|
920
982
|
--origam-field__input---padding-block-filled: 20px;
|
|
921
983
|
--origam-field__input---padding-top: var(--origam-field__input---padding-block-md);
|
|
922
984
|
--origam-field__input---padding-bottom: var(--origam-field__input---padding-block-md);
|
|
923
|
-
--origam-field__input---padding-start:
|
|
924
|
-
--origam-field__input---padding-end:
|
|
985
|
+
--origam-field__input---padding-start: 0px;
|
|
986
|
+
--origam-field__input---padding-end: 0px;
|
|
925
987
|
--origam-field__input---opacity: 0.7;
|
|
926
988
|
--origam-field__label---font-size: 0.75em;
|
|
927
989
|
--origam-field__label---transition-duration: var(--origam-motion__duration---normal);
|
|
@@ -1431,6 +1493,11 @@
|
|
|
1431
1493
|
--origam-table__header-cell---padding-inline: var(--origam-space---4);
|
|
1432
1494
|
--origam-table__header-cell---border-bottom-color: var(--origam-color__border---default);
|
|
1433
1495
|
--origam-table__header-cell---border-bottom-width: var(--origam-border__width---2);
|
|
1496
|
+
/* #840 — derived from the SAME density-aware padding-block token, so it
|
|
1497
|
+
never drifts out of sync with it: 2 * padding-block + border-bottom
|
|
1498
|
+
+ 18px (measured content-box line height of a single-line header
|
|
1499
|
+
cell in Chromium, constant across the 3 density rungs). */
|
|
1500
|
+
--origam-table__header-cell---height: calc((2 * var(--origam-table__header-cell---padding-block, 12px)) + var(--origam-table__header-cell---border-bottom-width, 2px) + 18px);
|
|
1434
1501
|
--origam-table__cell---padding-block: var(--origam-space---3);
|
|
1435
1502
|
--origam-table__cell---padding-inline: var(--origam-space---4);
|
|
1436
1503
|
--origam-table__cell---border-color: var(--origam-color__border---subtle);
|
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
"pause": "Pause the carousel",
|
|
84
84
|
"play": "Play the carousel",
|
|
85
85
|
"slide": "slide",
|
|
86
|
+
"role_description": "carousel",
|
|
86
87
|
"aria_label": {
|
|
87
88
|
"delimiter": "Carousel slide {0} of {1}"
|
|
88
89
|
}
|
|
@@ -286,7 +287,9 @@
|
|
|
286
287
|
"command_palette": {
|
|
287
288
|
"aria_label": "Command palette",
|
|
288
289
|
"placeholder": "Search…",
|
|
289
|
-
"empty_text": "No results"
|
|
290
|
+
"empty_text": "No results",
|
|
291
|
+
"footer_navigate": "Navigate",
|
|
292
|
+
"footer_select": "Select"
|
|
290
293
|
},
|
|
291
294
|
"chart": {
|
|
292
295
|
"aria_label": "Chart",
|
|
@@ -303,17 +306,22 @@
|
|
|
303
306
|
"box_plot": {
|
|
304
307
|
"aria_label": "box plot chart",
|
|
305
308
|
"desc_one": "Box plot with {count} category.",
|
|
306
|
-
"desc_other": "Box plot with {count} categories."
|
|
309
|
+
"desc_other": "Box plot with {count} categories.",
|
|
310
|
+
"box_aria_label": "{0}: min={1} Q1={2} median={3} Q3={4} max={5}"
|
|
307
311
|
},
|
|
308
312
|
"bullet": {
|
|
309
313
|
"aria_label": "bullet chart",
|
|
310
314
|
"desc_one": "Bullet chart with {count} indicator.",
|
|
311
|
-
"desc_other": "Bullet chart with {count} indicators."
|
|
315
|
+
"desc_other": "Bullet chart with {count} indicators.",
|
|
316
|
+
"bullet_aria_label": "{0}: value {1}, target {2}, {3}% achievement"
|
|
312
317
|
},
|
|
313
318
|
"candlestick": {
|
|
314
319
|
"aria_label": "candlestick chart",
|
|
315
320
|
"desc_one": "Candlestick chart with {count} candle.",
|
|
316
|
-
"desc_other": "Candlestick chart with {count} candles."
|
|
321
|
+
"desc_other": "Candlestick chart with {count} candles.",
|
|
322
|
+
"direction_bullish": "bullish",
|
|
323
|
+
"direction_bearish": "bearish",
|
|
324
|
+
"candle_aria_label": "{0}: {1}, open {2}, high {3}, low {4}, close {5}"
|
|
317
325
|
},
|
|
318
326
|
"gauge": {
|
|
319
327
|
"aria_label": "gauge chart",
|
|
@@ -344,12 +352,15 @@
|
|
|
344
352
|
"aria_label": "Pareto chart",
|
|
345
353
|
"cumulative_label": "Cumulative %",
|
|
346
354
|
"desc_one": "Pareto chart with {count} category, sorted descending by value.",
|
|
347
|
-
"desc_other": "Pareto chart with {count} categories, sorted descending by value."
|
|
355
|
+
"desc_other": "Pareto chart with {count} categories, sorted descending by value.",
|
|
356
|
+
"bar_aria_label": "{0}: {1} ({2}%, cumulative {3}%)"
|
|
348
357
|
},
|
|
349
358
|
"pictorial": {
|
|
350
359
|
"aria_label": "pictorial chart",
|
|
351
360
|
"desc_one": "Pictorial chart with {count} column.",
|
|
352
|
-
"desc_other": "Pictorial chart with {count} columns."
|
|
361
|
+
"desc_other": "Pictorial chart with {count} columns.",
|
|
362
|
+
"fill_column_aria_label": "{0}: {1} — {2}% of maximum",
|
|
363
|
+
"column_aria_label": "{0}: {1} ({2} of {3} icons)"
|
|
353
364
|
},
|
|
354
365
|
"range_selector": {
|
|
355
366
|
"aria_label": "Chart range selector"
|
|
@@ -477,6 +488,10 @@
|
|
|
477
488
|
"treeview": {
|
|
478
489
|
"aria_label": "File tree",
|
|
479
490
|
"node_children_aria_label": "{0} contents"
|
|
491
|
+
},
|
|
492
|
+
"slider_field": {
|
|
493
|
+
"thumb_start_aria_label": "{0} (start)",
|
|
494
|
+
"thumb_end_aria_label": "{0} (end)"
|
|
480
495
|
}
|
|
481
496
|
}
|
|
482
497
|
}
|