@aceshooting/lyra-ui 10.0.1 → 11.1.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 (83) hide show
  1. package/CHANGELOG.md +271 -0
  2. package/custom-elements.json +1 -1
  3. package/design-tokens.json +13 -0
  4. package/dist/cli/migrate-wa.mjs +164 -1
  5. package/dist/cli/migration-contract.json +1 -1
  6. package/dist/components/charts/chart/box-plot.class.d.ts +27 -0
  7. package/dist/components/charts/chart/box-plot.class.js +14 -4
  8. package/dist/components/charts/chart/box-plot.styles.js +28 -0
  9. package/dist/components/charts/chart/chart.class.d.ts +27 -0
  10. package/dist/components/charts/chart/chart.class.js +15 -5
  11. package/dist/components/charts/chart/chart.styles.js +28 -0
  12. package/dist/components/charts/chart/lite-chart.class.d.ts +32 -0
  13. package/dist/components/charts/chart/lite-chart.class.js +17 -4
  14. package/dist/components/charts/chart/lite-chart.styles.js +29 -0
  15. package/dist/components/data/heatmap/heatmap.class.d.ts +35 -2
  16. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  17. package/dist/components/data/table/table.class.d.ts +19 -0
  18. package/dist/components/data/table/table.class.js +3 -3
  19. package/dist/components/forms/combobox/combobox.class.d.ts +71 -3
  20. package/dist/components/forms/combobox/combobox.class.js +4 -2
  21. package/dist/components/forms/combobox/combobox.styles.js +9 -0
  22. package/dist/components/forms/date-picker/date-input.class.d.ts +12 -1
  23. package/dist/components/forms/date-picker/date-input.class.js +4 -2
  24. package/dist/components/forms/date-picker/date-picker.class.d.ts +72 -0
  25. package/dist/components/forms/date-picker/date-picker.class.js +15 -3
  26. package/dist/components/forms/date-picker/date-picker.styles.js +46 -0
  27. package/dist/components/media/flag/flag.class.d.ts +3 -1
  28. package/dist/components/media/flag/flag.class.js +1 -1
  29. package/dist/components/media/map/map.class.d.ts +39 -2
  30. package/dist/components/media/map/map.class.js +1 -1
  31. package/dist/components/overlays/dialog/dialog.class.d.ts +20 -0
  32. package/dist/components/overlays/overlay/popover.class.d.ts +19 -3
  33. package/dist/components/overlays/overlay/popover.class.js +1 -1
  34. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
  35. package/dist/custom-elements-jsx.d.ts +31 -16
  36. package/dist/internal/canvas.js +1 -1
  37. package/dist/internal/package-metadata.d.ts +1 -1
  38. package/dist/internal/package-metadata.js +1 -1
  39. package/dist/internal/tokens.styles.js +1 -0
  40. package/dist/lyra.d.ts +1 -1
  41. package/dist/svelte.d.ts +31 -16
  42. package/dist/theme.css +32 -0
  43. package/dist/vue.d.ts +31 -16
  44. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  45. package/llms/components/lr-agent-workspace.md +1 -1
  46. package/llms/components/lr-bar-chart.md +4 -3
  47. package/llms/components/lr-box-plot.md +15 -4
  48. package/llms/components/lr-bubble-chart.md +4 -3
  49. package/llms/components/lr-chart.md +13 -3
  50. package/llms/components/lr-chunk-inspector.md +1 -1
  51. package/llms/components/lr-combobox.md +42 -6
  52. package/llms/components/lr-date-input.md +40 -4
  53. package/llms/components/lr-date-picker.md +40 -4
  54. package/llms/components/lr-dialog.md +2 -1
  55. package/llms/components/lr-doughnut-chart.md +4 -3
  56. package/llms/components/lr-entity-dossier.md +1 -1
  57. package/llms/components/lr-eval-run.md +1 -1
  58. package/llms/components/lr-flag.md +10 -3
  59. package/llms/components/lr-grounding-summary.md +1 -1
  60. package/llms/components/lr-heatmap.md +20 -2
  61. package/llms/components/lr-histogram.md +4 -3
  62. package/llms/components/lr-line-chart.md +4 -3
  63. package/llms/components/lr-lite-chart.md +19 -3
  64. package/llms/components/lr-map.md +21 -4
  65. package/llms/components/lr-memory-panel.md +1 -1
  66. package/llms/components/lr-option.md +41 -5
  67. package/llms/components/lr-pie-chart.md +4 -3
  68. package/llms/components/lr-polar-area-chart.md +4 -3
  69. package/llms/components/lr-popover.md +20 -1
  70. package/llms/components/lr-provenance-panel.md +1 -1
  71. package/llms/components/lr-radar-chart.md +4 -3
  72. package/llms/components/lr-rag-answer.md +1 -1
  73. package/llms/components/lr-rag-eval-dashboard.md +1 -1
  74. package/llms/components/lr-retrieval-results.md +1 -1
  75. package/llms/components/lr-retrieval-trace.md +1 -1
  76. package/llms/components/lr-scatter-chart.md +4 -3
  77. package/llms/peers.md +8 -8
  78. package/llms/tokens.md +27 -1
  79. package/llms-full.txt +231 -28
  80. package/package.json +1 -1
  81. package/vscode-css-data.json +70 -0
  82. package/vscode-html-data.json +131 -20
  83. package/web-types.json +190 -23
@@ -51,7 +51,26 @@ A click-triggered, light-dismiss floating surface positioned with the shared Flo
51
51
  - `accessibleLabel: string = ''` (attribute **`aria-label`**) — names the popup. An authored host
52
52
  attribute wins by presence, including `aria-label=""`; only when it is absent does the property
53
53
  or localized "Popover" ("Menu" when `popupRole` is `menu`) fallback apply
54
- - `popupRole: 'dialog'|'menu' = 'dialog'` (attribute `popup-role`)
54
+ - `popupRole: 'dialog'|'menu'|'none' = 'dialog'` (attribute `popup-role`). `none` (new in 11.0.0)
55
+ renders **no** `role` and no generated `aria-label` on the popup surface, and leaves
56
+ `aria-haspopup` off the trigger, so slotted content owns its own semantics and accessible name.
57
+ It exists for the WAI-ARIA **disclosure navigation** pattern: a flyout of links is not an
58
+ application action menu (`menu` announces "menu, menu item" and expects `menuitem` children) and
59
+ is not an interruptive surface (`dialog`). The `aria-expanded`/`aria-controls` wiring that pattern
60
+ requires is unchanged, as are light dismiss, Escape, focus return, and positioning:
61
+
62
+ ```html
63
+ <lr-popover popup-role="none">
64
+ <button slot="trigger">Products</button>
65
+ <nav aria-label="Products">
66
+ <ul><li><a href="/overview">Overview</a></li><li><a href="/pricing">Pricing</a></li></ul>
67
+ </nav>
68
+ </lr-popover>
69
+ ```
70
+
71
+ Note there is deliberately no `aria-haspopup="none"` — that is an invalid attribute value, not a
72
+ neutral one, and axe reports it as a critical violation. `lr-dropdown` still pins `popupRole` to
73
+ `menu`; the escape hatch lives on the general-purpose primitive.
55
74
  - `disabled: boolean = false` (reflected, new in 10.0.0) — prevents opening the popover; pointer,
56
75
  keyboard, and programmatic `show()`/`open = true` are all refused while set. Becoming disabled also
57
76
  closes an already-open popover, and initial `disabled` plus `open` normalizes closed in either
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/retrieval/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
- - **Optional peers** `d3-drag`, `d3-force`, `d3-selection`, `d3-zoom` — see `llms/peers.md`
10
+ - **Optional peers** none
11
11
  - **Themeable via** 7 parts, 1 custom property — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
13
13
 
@@ -8,7 +8,7 @@
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
10
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
11
- - **Themeable via** 15 parts, 33 custom properties — see this component's own `@csspart`/`@cssprop` list below
11
+ - **Themeable via** 16 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Documented with** `lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-polar-area-chart`, `lr-bubble-chart`, `lr-scatter-chart` (same section below)
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
@@ -44,7 +44,7 @@ complete `hiddenDatasets` snapshot).
44
44
  **Slots:** default JSON configuration script, `data-table`, `center`.
45
45
 
46
46
  **CSS parts:** `base`, `plot`, `canvas`, `legend`, `legend-item`, `legend-item-hidden`, `legend-swatch`,
47
- `reset-zoom-button`, `description`, `notices`, `data-table`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
47
+ `reset-zoom-button`, `description`, `notices`, `data-table`, `data-table-toggle`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
48
48
  rendered in place of `canvas` when the optional `chart.js` peer dependency fails to load; the
49
49
  failure transition is announced through the shared document-level light-DOM assertive sink — see
50
50
  `llms/components/lr-chart.md`).
@@ -53,7 +53,8 @@ failure transition is announced through the shared document-level light-DOM asse
53
53
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
54
54
  `--lr-chart-tooltip-text`, `--lr-chart-legend-item-hover-bg`,
55
55
  `--lr-chart-legend-item-active-bg`, `--lr-chart-data-table-button-hover-bg`,
56
- `--lr-chart-data-table-button-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
56
+ `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
57
+ `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
57
58
  `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
58
59
  `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
59
60
  `lr-chart` above); each of the eight variants below reads the same set, so one rule retunes them
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/retrieval/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `6.2.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
- - **Optional peers** `d3-drag`, `d3-force`, `d3-selection`, `d3-zoom`, `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
10
+ - **Optional peers** `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
11
11
  - **Themeable via** 11 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
13
13
 
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/retrieval/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `7.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
- - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
10
+ - **Optional peers** none
11
11
  - **Themeable via** 13 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
13
13
 
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/retrieval/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.1.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
- - **Optional peers** `d3-drag`, `d3-force`, `d3-selection`, `d3-zoom` — see `llms/peers.md`
10
+ - **Optional peers** none
11
11
  - **Themeable via** 29 parts, 1 custom property — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
13
13
 
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/retrieval/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.1.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
- - **Optional peers** `d3-drag`, `d3-force`, `d3-selection`, `d3-zoom` — see `llms/peers.md`
10
+ - **Optional peers** none
11
11
  - **Themeable via** 13 parts, 1 custom property — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
13
13
 
@@ -8,7 +8,7 @@
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
10
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
11
- - **Themeable via** 15 parts, 33 custom properties — see this component's own `@csspart`/`@cssprop` list below
11
+ - **Themeable via** 16 parts, 35 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Documented with** `lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart` (same section below)
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
@@ -44,7 +44,7 @@ complete `hiddenDatasets` snapshot).
44
44
  **Slots:** default JSON configuration script, `data-table`, `center`.
45
45
 
46
46
  **CSS parts:** `base`, `plot`, `canvas`, `legend`, `legend-item`, `legend-item-hidden`, `legend-swatch`,
47
- `reset-zoom-button`, `description`, `notices`, `data-table`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
47
+ `reset-zoom-button`, `description`, `notices`, `data-table`, `data-table-toggle`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
48
48
  rendered in place of `canvas` when the optional `chart.js` peer dependency fails to load; the
49
49
  failure transition is announced through the shared document-level light-DOM assertive sink — see
50
50
  `llms/components/lr-chart.md`).
@@ -53,7 +53,8 @@ failure transition is announced through the shared document-level light-DOM asse
53
53
  `--lr-chart-tick-color`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
54
54
  `--lr-chart-tooltip-text`, `--lr-chart-legend-item-hover-bg`,
55
55
  `--lr-chart-legend-item-active-bg`, `--lr-chart-data-table-button-hover-bg`,
56
- `--lr-chart-data-table-button-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
56
+ `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
57
+ `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
57
58
  `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
58
59
  `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
59
60
  `lr-chart` above); each of the eight variants below reads the same set, so one rule retunes them
package/llms/peers.md CHANGED
@@ -40,14 +40,14 @@ for the page.
40
40
  | `@aceshooting/lyra-flags` | `workspace:^2.0.0` | `lr-flag`, `lr-locale-picker`, `lr-phone-input` |
41
41
  | `@aiden0z/pptx-renderer` | `^1.2.4` | `lr-pptx-viewer` |
42
42
  | `@sgratzl/chartjs-chart-boxplot` | `^4.4.5` | `lr-box-plot` |
43
- | `chart.js` | `^4.5.1` | `lr-agent-eval-dashboard`, `lr-bar-chart`, `lr-box-plot`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-lite-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-rag-eval-dashboard`, `lr-scatter-chart` |
44
- | `chartjs-plugin-annotation` | `^3.1.0` | `lr-agent-eval-dashboard`, `lr-bar-chart`, `lr-box-plot`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-lite-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-rag-eval-dashboard`, `lr-scatter-chart` |
45
- | `chartjs-plugin-datalabels` | `^2.2.0` | `lr-agent-eval-dashboard`, `lr-bar-chart`, `lr-box-plot`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-lite-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-rag-eval-dashboard`, `lr-scatter-chart` |
46
- | `chartjs-plugin-zoom` | `^2.2.0` | `lr-agent-eval-dashboard`, `lr-bar-chart`, `lr-box-plot`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-lite-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-rag-eval-dashboard`, `lr-scatter-chart` |
47
- | `d3-drag` | `^3.0.0` | `lr-agent-workspace`, `lr-chunk-inspector`, `lr-entity-dossier`, `lr-eval-run`, `lr-graph`, `lr-grounding-summary`, `lr-knowledge-graph-explorer`, `lr-memory-panel`, `lr-provenance-panel`, `lr-rag-answer`, `lr-retrieval-results`, `lr-retrieval-trace` |
48
- | `d3-force` | `^3.0.0` | `lr-agent-workspace`, `lr-chunk-inspector`, `lr-entity-dossier`, `lr-eval-run`, `lr-graph`, `lr-grounding-summary`, `lr-knowledge-graph-explorer`, `lr-memory-panel`, `lr-provenance-panel`, `lr-rag-answer`, `lr-retrieval-results`, `lr-retrieval-trace` |
49
- | `d3-selection` | `^3.0.0` | `lr-agent-workspace`, `lr-chunk-inspector`, `lr-entity-dossier`, `lr-eval-run`, `lr-graph`, `lr-grounding-summary`, `lr-knowledge-graph-explorer`, `lr-memory-panel`, `lr-provenance-panel`, `lr-rag-answer`, `lr-retrieval-results`, `lr-retrieval-trace` |
50
- | `d3-zoom` | `^3.0.0` | `lr-agent-workspace`, `lr-chunk-inspector`, `lr-entity-dossier`, `lr-eval-run`, `lr-graph`, `lr-grounding-summary`, `lr-knowledge-graph-explorer`, `lr-memory-panel`, `lr-provenance-panel`, `lr-rag-answer`, `lr-retrieval-results`, `lr-retrieval-trace` |
43
+ | `chart.js` | `^4.5.1` | `lr-bar-chart`, `lr-box-plot`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-scatter-chart` |
44
+ | `chartjs-plugin-annotation` | `^3.1.0` | `lr-bar-chart`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-scatter-chart` |
45
+ | `chartjs-plugin-datalabels` | `^2.2.0` | `lr-bar-chart`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-scatter-chart` |
46
+ | `chartjs-plugin-zoom` | `^2.2.0` | `lr-bar-chart`, `lr-bubble-chart`, `lr-chart`, `lr-doughnut-chart`, `lr-histogram`, `lr-line-chart`, `lr-pie-chart`, `lr-polar-area-chart`, `lr-radar-chart`, `lr-scatter-chart` |
47
+ | `d3-drag` | `^3.0.0` | `lr-graph`, `lr-knowledge-graph-explorer` |
48
+ | `d3-force` | `^3.0.0` | `lr-graph`, `lr-knowledge-graph-explorer` |
49
+ | `d3-selection` | `^3.0.0` | `lr-graph`, `lr-knowledge-graph-explorer` |
50
+ | `d3-zoom` | `^3.0.0` | `lr-graph`, `lr-knowledge-graph-explorer` |
51
51
  | `dompurify` | `^3.4.13` | `lr-agent-workspace`, `lr-command-palette`, `lr-condition-builder`, `lr-dashboard-grid`, `lr-docx-viewer`, `lr-email-viewer`, `lr-eval-run`, `lr-html-viewer`, `lr-icon`, `lr-icon-button`, `lr-include`, `lr-markdown`, `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`, `lr-streaming-text`, `lr-svg-viewer`, `lr-video`, `lr-video-playlist`, `lr-widget-renderer` |
52
52
  | `emoji-picker-element-data` | `^1.8.0` | `lr-emoji-picker` |
53
53
  | `epubjs` | `^0.3.93` | `lr-ebook-viewer` |
package/llms/tokens.md CHANGED
@@ -17,6 +17,31 @@ For a ready-made light/dark base, import `@aceshooting/lyra-ui/theme.css` once a
17
17
  Per-component `--lr-<component>-*` custom properties (listed in each component's own section)
18
18
  override a single element without touching the shared layer.
19
19
 
20
+ **Consumer-scope exception: the focus ring.** `--lr-focus-ring` and its three parts
21
+ (`-width`/`-color`/`-offset`) are the one layer-2 group `theme.css` also declares at document
22
+ scope, on `:root` and on both mode selectors. They exist to serve a CONSUMER-authored idiom —
23
+ the Web Awesome `outline: var(--wa-focus-ring)` that migrating projects already have — and that
24
+ rule is written against the consumer's own element, where a `:host`-only token resolves to
25
+ nothing. An empty `var()` makes the whole `outline` declaration invalid at computed-value time,
26
+ and because `outline` does not inherit, the ring did not degrade: it DISAPPEARED, silently, with
27
+ no console warning. So `outline: var(--lr-focus-ring); outline-offset:
28
+ var(--lr-focus-ring-offset);` now works wherever you write it, provided `theme.css` is imported.
29
+ Every component still re-derives all four on its own `:host`, so component rendering is
30
+ unchanged.
31
+
32
+ > **Why layer 1 is not merely *preferred* but *required*: an ancestor `--lr-*` override does
33
+ > not survive a nested component boundary.** Every component re-derives the whole `--lr-*` layer
34
+ > from `--lr-theme-*` on its **own** `:host` (that is what `LyraElement`'s shared token
35
+ > stylesheet does). So setting, say, `--lr-color-warning-quiet` on an application element does
36
+ > apply to that element and to plain nested markup — it looks right in review and in a shallow
37
+ > `getComputedStyle` probe — but it is **reset at the first `lr-*` element inside another
38
+ > `lr-*` element's shadow root** (a badge inside a table cell, say), which re-derives it back to
39
+ > the library fallback. The override degrades silently, the deeper it is consumed, with no
40
+ > warning. Always set the `--lr-theme-*` input instead: that layer is read through `var()` at
41
+ > every level, so it inherits across every boundary. Per-component `--lr-<component>-*`
42
+ > properties are the other safe lever, because no component re-declares another component's
43
+ > namespace.
44
+
20
45
  ## Direct theme-backed tokens (263)
21
46
 
22
47
  | Internal token | `--lr-theme-*` input | Light/default fallback | Mode overrides |
@@ -285,7 +310,7 @@ override a single element without touching the shared layer.
285
310
  | `--lr-transition-base` | `--lr-theme-transition-normal` | `var(--lr-duration-base) var(--lr-easing-standard)` | reducedMotion: `0.001ms linear` |
286
311
  | `--lr-transition-fast` | `--lr-theme-transition-fast` | `var(--lr-duration-fast) var(--lr-easing-standard)` | reducedMotion: `0.001ms linear` |
287
312
 
288
- ## Derived and fixed tokens (75)
313
+ ## Derived and fixed tokens (76)
289
314
 
290
315
  These do not directly read a `--lr-theme-*` input. Aliases and computed values still follow
291
316
  the tokens or environment values they reference; fixed contract constants are intentionally
@@ -307,6 +332,7 @@ not theme inputs.
307
332
  | `--lr-color-success-quiet` | `var(--lr-color-success-fill-quiet)` | forcedColors: `Canvas` |
308
333
  | `--lr-color-warning` | `var(--lr-color-warning-fill-loud)` | forcedColors: `CanvasText` |
309
334
  | `--lr-color-warning-quiet` | `var(--lr-color-warning-fill-quiet)` | forcedColors: `Canvas` |
335
+ | `--lr-focus-ring` | `var(--lr-focus-ring-width) solid var(--lr-focus-ring-color)` | — |
310
336
  | `--lr-mask-opaque` | `#000` | — |
311
337
  | `--lr-ramp-brand-05` | `#000002` | — |
312
338
  | `--lr-ramp-brand-10` | `#00030f` | — |