@aceshooting/lyra-ui 11.0.0 → 11.2.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 (135) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +8 -0
  3. package/custom-elements.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
  5. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
  6. package/dist/components/agent-tools/agent-run/agent-run.class.js +1 -1
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
  8. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +1 -1
  9. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -1
  10. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +1 -1
  11. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  12. package/dist/components/agent-tools/test-results/test-results.class.js +1 -1
  13. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +1 -1
  14. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  15. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +1 -0
  16. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
  17. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  18. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
  19. package/dist/components/charts/chart/bar-chart.class.js +1 -1
  20. package/dist/components/charts/chart/bubble-chart.class.js +1 -1
  21. package/dist/components/charts/chart/chart.class.js +1 -1
  22. package/dist/components/charts/chart/doughnut-chart.class.js +1 -1
  23. package/dist/components/charts/chart/histogram.class.js +1 -1
  24. package/dist/components/charts/chart/line-chart.class.js +1 -1
  25. package/dist/components/charts/chart/lite-chart.class.d.ts +32 -0
  26. package/dist/components/charts/chart/lite-chart.class.js +17 -4
  27. package/dist/components/charts/chart/lite-chart.styles.js +29 -0
  28. package/dist/components/charts/chart/pie-chart.class.js +1 -1
  29. package/dist/components/charts/chart/polar-area-chart.class.js +1 -1
  30. package/dist/components/charts/chart/radar-chart.class.js +1 -1
  31. package/dist/components/charts/chart/scatter-chart.class.js +1 -1
  32. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  33. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  34. package/dist/components/conversation/model-select/model-select.class.d.ts +1 -0
  35. package/dist/components/conversation/model-select/model-select.class.js +1 -1
  36. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  37. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +1 -0
  38. package/dist/components/conversation/voice-picker/voice-picker.class.js +1 -1
  39. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +1 -0
  40. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  41. package/dist/components/data/heatmap/heatmap.class.d.ts +36 -1
  42. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  43. package/dist/components/data/table/table.class.d.ts +19 -0
  44. package/dist/components/data/table/table.class.js +3 -3
  45. package/dist/components/forms/checkbox/checkbox.class.d.ts +1 -0
  46. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  47. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +1 -0
  48. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  49. package/dist/components/forms/combobox/combobox.class.d.ts +1 -0
  50. package/dist/components/forms/combobox/combobox.class.js +1 -1
  51. package/dist/components/forms/date-picker/date-input.class.d.ts +12 -1
  52. package/dist/components/forms/date-picker/date-input.class.js +4 -2
  53. package/dist/components/forms/date-picker/date-picker.class.d.ts +30 -4
  54. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  55. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +1 -0
  56. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  57. package/dist/components/forms/radio/radio-group.class.d.ts +1 -0
  58. package/dist/components/forms/radio/radio-group.class.js +1 -1
  59. package/dist/components/forms/radio/radio.class.d.ts +1 -0
  60. package/dist/components/forms/radio/radio.class.js +1 -1
  61. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +1 -0
  62. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  63. package/dist/components/forms/select/select.class.d.ts +1 -0
  64. package/dist/components/forms/select/select.class.js +1 -1
  65. package/dist/components/forms/slider/slider.class.d.ts +1 -0
  66. package/dist/components/forms/slider/slider.class.js +1 -1
  67. package/dist/components/forms/switch/switch.class.d.ts +1 -0
  68. package/dist/components/forms/switch/switch.class.js +1 -1
  69. package/dist/components/forms/time-range/time-range.class.d.ts +1 -0
  70. package/dist/components/forms/time-range/time-range.class.js +1 -1
  71. package/dist/components/forms/token-input/token-input.class.d.ts +1 -0
  72. package/dist/components/forms/token-input/token-input.class.js +1 -1
  73. package/dist/components/media/attachment-chip/attachment-chip.class.js +2 -2
  74. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +2 -2
  75. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  76. package/dist/components/media/file-input/file-input.class.d.ts +1 -0
  77. package/dist/components/media/file-input/file-input.class.js +1 -1
  78. package/dist/components/media/flag/flag-peer-bulk.d.ts +12 -0
  79. package/dist/components/media/flag/flag-peer-bulk.js +1 -0
  80. package/dist/components/media/flag/flag.class.d.ts +28 -0
  81. package/dist/components/media/flag/flag.class.js +2 -2
  82. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  83. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +1 -1
  84. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
  85. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  86. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  87. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +1 -1
  88. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  89. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  90. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  91. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
  92. package/dist/custom-elements-jsx.d.ts +5 -3
  93. package/dist/events.d.ts +7 -0
  94. package/dist/internal/canvas.js +1 -1
  95. package/dist/internal/form-associated.d.ts +1 -0
  96. package/dist/internal/form-associated.js +1 -1
  97. package/dist/internal/form-control-labels.js +1 -1
  98. package/dist/internal/lyra-element.js +1 -1
  99. package/dist/internal/package-metadata.d.ts +1 -1
  100. package/dist/internal/package-metadata.js +1 -1
  101. package/dist/lyra.d.ts +1 -1
  102. package/dist/svelte.d.ts +5 -3
  103. package/dist/theme.css +32 -0
  104. package/dist/vue.d.ts +5 -3
  105. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  106. package/llms/components/lr-agent-workspace.md +1 -1
  107. package/llms/components/lr-box-plot.md +2 -2
  108. package/llms/components/lr-chart.md +1 -1
  109. package/llms/components/lr-chunk-inspector.md +1 -1
  110. package/llms/components/lr-combobox.md +3 -3
  111. package/llms/components/lr-date-input.md +22 -6
  112. package/llms/components/lr-date-picker.md +21 -5
  113. package/llms/components/lr-entity-dossier.md +1 -1
  114. package/llms/components/lr-eval-run.md +1 -1
  115. package/llms/components/lr-flag.md +24 -1
  116. package/llms/components/lr-grounding-summary.md +1 -1
  117. package/llms/components/lr-heatmap.md +18 -6
  118. package/llms/components/lr-lite-chart.md +19 -3
  119. package/llms/components/lr-map.md +2 -2
  120. package/llms/components/lr-memory-panel.md +1 -1
  121. package/llms/components/lr-option.md +3 -3
  122. package/llms/components/lr-popover.md +1 -1
  123. package/llms/components/lr-provenance-panel.md +1 -1
  124. package/llms/components/lr-rag-answer.md +1 -1
  125. package/llms/components/lr-rag-eval-dashboard.md +1 -1
  126. package/llms/components/lr-retrieval-results.md +1 -1
  127. package/llms/components/lr-retrieval-trace.md +1 -1
  128. package/llms/peers.md +10 -10
  129. package/llms/shared.md +19 -0
  130. package/llms/tokens.md +12 -0
  131. package/llms-full.txt +109 -21
  132. package/package.json +6 -6
  133. package/vscode-css-data.json +14 -0
  134. package/vscode-html-data.json +17 -3
  135. package/web-types.json +30 -4
@@ -162,7 +162,7 @@ property).
162
162
  ignored without evaluating script or exposing prototype-pollution keys to the merge.
163
163
  - `showDataTable: boolean = false` (attribute `show-data-table`) — makes the always-available
164
164
  accessible data table visible rather than screen-reader-only
165
- - `dataTableToggle: boolean = false` (attribute `data-table-toggle`, new in 10.1.0) — renders a
165
+ - `dataTableToggle: boolean = false` (attribute `data-table-toggle`, new in 11.0.0) — renders a
166
166
  localized disclosure button (`part="data-table-toggle"`) above the data table so a *sighted*
167
167
  reader can reveal the numbers on demand. `showDataTable` alone is all-or-nothing, which left
168
168
  consumers wrapping a duplicated table in their own `<details>`. With the toggle on,
@@ -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** 16 parts, 2 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
 
@@ -24,7 +24,7 @@ An `lr-option` row remains bounded by its owning listbox: the default label elli
24
24
  `start`/`end` (or `prefix`/`suffix`) adornment is capped at 40% of the row. Unbroken metadata
25
25
  therefore cannot widen a 320px LTR or RTL picker.
26
26
 
27
- **Adornments in the popup (fixed in 10.1.0).** Before 10.1.0 this paragraph described behavior the
27
+ **Adornments in the popup (fixed in 11.0.0).** Before 11.0.0 this paragraph described behavior the
28
28
  code did not have: `lr-combobox` builds its popup from normalized row *data* rather than from the
29
29
  light-DOM nodes, so a slotted `start`/`end`/`prefix`/`suffix` adornment had nowhere to land and
30
30
  simply never rendered — the documented slots and their documented parts were both dead inside the
@@ -111,7 +111,7 @@ An async `source` row can carry the same two fields (`start`, `end`) alongside i
111
111
  - `maxOptionsVisible: number = 3` (attribute `max-options-visible` — caps how many selected **tags**
112
112
  show before collapsing to `+N`; nothing to do with the suggestion list, see the three-caps note
113
113
  below)
114
- - `visibleOptions?: number` (attribute `visible-options`, new in 10.1.0) — bounds the popup to about
114
+ - `visibleOptions?: number` (attribute `visible-options`, new in 11.0.0) — bounds the popup to about
115
115
  this many suggestion rows, leaving the rest reachable by scrolling. Purely presentational: every
116
116
  row is still rendered. Measured from where row N actually starts rather than computed from a
117
117
  token, because a row's height varies with `sub` lines, adornments and group labels. Unset imposes
@@ -188,7 +188,7 @@ alias. Set the boolean `autocorrect` IDL, or use `autocorrect="on"` / `autocorre
188
188
  `ComboboxSourceRow = { readonly value: string; readonly label: string; readonly sub?: string; readonly icon?: unknown; readonly start?: unknown;
189
189
  readonly end?: unknown; readonly badge?: string |
190
190
  number; accessibleLabel?: string; data?: unknown; dotColor?: string; group?: string; disabled?:
191
- boolean }` — the row shape used by the async `source` path. `start` and `end` (new in 10.1.0) are
191
+ boolean }` — the row shape used by the async `source` path. `start` and `end` (new in 11.0.0) are
192
192
  the async counterparts of `<lr-option>`'s `start`/`end` adornment slots and render as the
193
193
  `option-start` / `option-end` parts, inert and aria-hidden exactly like `icon`. `icon` renders as a decorative leading
194
194
  visual whose rendered subtree stays visible but is inert and hidden from assistive technology;
@@ -8,7 +8,7 @@
8
8
  - **Status** `experimental` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Deprecations** none
10
10
  - **Optional peers** none
11
- - **Themeable via** 20 parts, 20 custom properties — see this component's own `@csspart`/`@cssprop` list below
11
+ - **Themeable via** 22 parts, 20 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
12
  - **Documented with** `lr-date-picker` (same section below)
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
@@ -34,9 +34,13 @@ Inline month-grid calendar, not form-associated (used standalone or embedded ins
34
34
  **Properties (28):**
35
35
 
36
36
  - `dayContent` (JS only): `LyraDatePickerDayContent | undefined`
37
- - `presets: LyraDateRangePreset[] = []` (JS only, new in 10.1.0) —
38
- `LyraDateRangePreset { label: string; start: string; end: string }`, where `start`/`end` are ISO
39
- `YYYY-MM-DD`. Renders a `[part="presets"]` quick-range button row above the calendar, for the
37
+ - `presets: LyraDateRangePreset[] = []` (JS only, new in 11.0.0) —
38
+ `LyraDateRangePreset { label: string; start?: string; end?: string }`, where `start`/`end` are ISO
39
+ `YYYY-MM-DD`. **Either bound may be omitted (new in 11.1.0)** to mean an OPEN bound, resolving to
40
+ the picker's `min` / `max` respectively — that is how an "All time" preset is expressed. When the
41
+ corresponding `min`/`max` is unset there is nothing to resolve to (a `value` of
42
+ `YYYY-MM-DD/YYYY-MM-DD` has no unbounded spelling), so that preset's button renders **disabled**
43
+ rather than looking live and doing nothing when pressed. Renders a `[part="presets"]` quick-range button row above the calendar, for the
40
44
  dashboard time-filter shape (Today / Last 7 days / Last 30 days / This month / All time).
41
45
  **Range mode only** — a preset names two dates, so it is ignored for a single-date picker rather
42
46
  than rendering a row that cannot do anything; unset renders nothing at all. Applying one commits
@@ -47,6 +51,16 @@ Inline month-grid calendar, not form-associated (used standalone or embedded ins
47
51
  The active button carries `aria-pressed="true"` and `data-active`. Deliberately the same
48
52
  `label`/`start`/`end` shape as `<lr-time-range>`'s `TimeRangePreset`, so the library has one
49
53
  preset vocabulary rather than two — the only difference is the unit (ISO dates, not numbers)
54
+ - `appliedPreset: LyraDateRangePreset | undefined` (read-only, new in 11.1.0) — the preset whose
55
+ button produced the current `value`, or `undefined` when the range was picked by hand. Read it
56
+ inside your own `change`/`input` handler. It exists because a dashboard filter has to persist
57
+ *which* preset is active rather than the pair it froze to: "Last 7 days" must still mean the last
58
+ 7 days after tomorrow's reload. That fact is not recoverable from `value` — re-deriving it by
59
+ string-matching is the mapping table `presets` exists to delete, and it is ambiguous anyway
60
+ (Today and This month coincide on the 1st of a month, and a hand-picked range can equal a
61
+ preset's pair by construction). A property rather than an event detail because `input`/`change`
62
+ here are **native** events, deliberately indistinguishable from a manual selection so existing
63
+ handlers need no special case, and a native `Event` cannot carry a detail without changing type
50
64
  - `disabled: boolean = false` (reflected)
51
65
  - `disabledDates: string | string[] | Date[] = ''` (attribute `disabled-dates`)
52
66
  - `disabledDaysOfWeek: string = ''` (attribute `disabled-days-of-week`)
@@ -214,7 +228,9 @@ capped at 40% and ellipsize unbroken content. Clear and calendar actions retain
214
228
  **Custom states:** `blank`, `disabled`, `open`, and `range`; the shared form-associated mixin also
215
229
  exposes its validity states.
216
230
 
217
- **CSS parts (19):** `clear-button`, `date-input`, `date-picker`, `end`, `expand-button`,
231
+ **CSS parts (21):** `clear-button`, `date-input`, `date-picker`, `presets` and `preset-button`
232
+ (forwarded from the nested `lr-date-picker` via `exportparts`, so the quick-range row is styleable
233
+ from outside — new in 11.1.0), `end`, `expand-button`,
218
234
  `expand-icon`, `form-control`, `form-control-input`, `form-control-label`, `hint`, `input`,
219
235
  `input-wrapper`, `popup`, `range-separator`, `segment`, `segment-literal`, `start`, permanent
220
236
  compatibility name `base` (a nested wrapper inside `date-input`), and permanent compatibility name
@@ -347,7 +363,7 @@ and `dateTimeFormat(locale, options)`.
347
363
  - `--lr-date-picker-nav-active-bg` — Pressed navigation background; defaults to the hover color
348
364
  mixed by `--lr-color-mix-active`.
349
365
  - `--lr-date-picker-preset-hover-bg`, `--lr-date-picker-preset-active-bg`, and
350
- `--lr-date-picker-preset-selected-bg` (new in 10.1.0) — hover, pressed, and
366
+ `--lr-date-picker-preset-selected-bg` (new in 11.0.0) — hover, pressed, and
351
367
  currently-selected paint for a `presets` quick-range button. Defaults are
352
368
  `var(--lr-color-brand-quiet)`, that hover colour mixed by `--lr-color-mix-active`, and
353
369
  `var(--lr-color-brand)` respectively.
@@ -34,9 +34,13 @@ Inline month-grid calendar, not form-associated (used standalone or embedded ins
34
34
  **Properties (28):**
35
35
 
36
36
  - `dayContent` (JS only): `LyraDatePickerDayContent | undefined`
37
- - `presets: LyraDateRangePreset[] = []` (JS only, new in 10.1.0) —
38
- `LyraDateRangePreset { label: string; start: string; end: string }`, where `start`/`end` are ISO
39
- `YYYY-MM-DD`. Renders a `[part="presets"]` quick-range button row above the calendar, for the
37
+ - `presets: LyraDateRangePreset[] = []` (JS only, new in 11.0.0) —
38
+ `LyraDateRangePreset { label: string; start?: string; end?: string }`, where `start`/`end` are ISO
39
+ `YYYY-MM-DD`. **Either bound may be omitted (new in 11.1.0)** to mean an OPEN bound, resolving to
40
+ the picker's `min` / `max` respectively — that is how an "All time" preset is expressed. When the
41
+ corresponding `min`/`max` is unset there is nothing to resolve to (a `value` of
42
+ `YYYY-MM-DD/YYYY-MM-DD` has no unbounded spelling), so that preset's button renders **disabled**
43
+ rather than looking live and doing nothing when pressed. Renders a `[part="presets"]` quick-range button row above the calendar, for the
40
44
  dashboard time-filter shape (Today / Last 7 days / Last 30 days / This month / All time).
41
45
  **Range mode only** — a preset names two dates, so it is ignored for a single-date picker rather
42
46
  than rendering a row that cannot do anything; unset renders nothing at all. Applying one commits
@@ -47,6 +51,16 @@ Inline month-grid calendar, not form-associated (used standalone or embedded ins
47
51
  The active button carries `aria-pressed="true"` and `data-active`. Deliberately the same
48
52
  `label`/`start`/`end` shape as `<lr-time-range>`'s `TimeRangePreset`, so the library has one
49
53
  preset vocabulary rather than two — the only difference is the unit (ISO dates, not numbers)
54
+ - `appliedPreset: LyraDateRangePreset | undefined` (read-only, new in 11.1.0) — the preset whose
55
+ button produced the current `value`, or `undefined` when the range was picked by hand. Read it
56
+ inside your own `change`/`input` handler. It exists because a dashboard filter has to persist
57
+ *which* preset is active rather than the pair it froze to: "Last 7 days" must still mean the last
58
+ 7 days after tomorrow's reload. That fact is not recoverable from `value` — re-deriving it by
59
+ string-matching is the mapping table `presets` exists to delete, and it is ambiguous anyway
60
+ (Today and This month coincide on the 1st of a month, and a hand-picked range can equal a
61
+ preset's pair by construction). A property rather than an event detail because `input`/`change`
62
+ here are **native** events, deliberately indistinguishable from a manual selection so existing
63
+ handlers need no special case, and a native `Event` cannot carry a detail without changing type
50
64
  - `disabled: boolean = false` (reflected)
51
65
  - `disabledDates: string | string[] | Date[] = ''` (attribute `disabled-dates`)
52
66
  - `disabledDaysOfWeek: string = ''` (attribute `disabled-days-of-week`)
@@ -214,7 +228,9 @@ capped at 40% and ellipsize unbroken content. Clear and calendar actions retain
214
228
  **Custom states:** `blank`, `disabled`, `open`, and `range`; the shared form-associated mixin also
215
229
  exposes its validity states.
216
230
 
217
- **CSS parts (19):** `clear-button`, `date-input`, `date-picker`, `end`, `expand-button`,
231
+ **CSS parts (21):** `clear-button`, `date-input`, `date-picker`, `presets` and `preset-button`
232
+ (forwarded from the nested `lr-date-picker` via `exportparts`, so the quick-range row is styleable
233
+ from outside — new in 11.1.0), `end`, `expand-button`,
218
234
  `expand-icon`, `form-control`, `form-control-input`, `form-control-label`, `hint`, `input`,
219
235
  `input-wrapper`, `popup`, `range-separator`, `segment`, `segment-literal`, `start`, permanent
220
236
  compatibility name `base` (a nested wrapper inside `date-input`), and permanent compatibility name
@@ -347,7 +363,7 @@ and `dateTimeFormat(locale, options)`.
347
363
  - `--lr-date-picker-nav-active-bg` — Pressed navigation background; defaults to the hover color
348
364
  mixed by `--lr-color-mix-active`.
349
365
  - `--lr-date-picker-preset-hover-bg`, `--lr-date-picker-preset-active-bg`, and
350
- `--lr-date-picker-preset-selected-bg` (new in 10.1.0) — hover, pressed, and
366
+ `--lr-date-picker-preset-selected-bg` (new in 11.0.0) — hover, pressed, and
351
367
  currently-selected paint for a `presets` quick-range button. Defaults are
352
368
  `var(--lr-color-brand-quiet)`, that hover colour mixed by `--lr-color-mix-active`, and
353
369
  `var(--lr-color-brand)` respectively.
@@ -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** 9 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/agent-tools/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `9.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`, `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
10
+ - **Optional peers** `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
11
11
  - **Themeable via** 24 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
 
@@ -70,6 +70,12 @@ wording that reads to a user as a bug. Style the two states apart with those att
70
70
  rectangular corner radius), `--lr-flag-aspect-ratio` (default `4 / 3`), and
71
71
  `--lr-flag-object-fit` (default `cover`); also consumes `--lr-color-border` for the inset ring.
72
72
 
73
+ **Sizing.** The host has no intrinsic `width` — it sizes from `font-size` (`block-size: 1em`,
74
+ `inline-size` derived from `--lr-flag-aspect-ratio` via CSS `aspect-ratio`), so it scales naturally
75
+ with surrounding text (`<lr-flag style="font-size: 2rem">`). Setting `width`/`inline-size` directly
76
+ instead makes both axes definite, which defeats `aspect-ratio` (only applies when at most one axis
77
+ is definite) and squashes the image rather than scaling it.
78
+
73
79
  **Optional peer deps:** `@aceshooting/lyra-flags` — required for the component to actually render an
74
80
  image when `country` or `language` is used. Import
75
81
  `@aceshooting/lyra-ui/components/media/flag/flag-peer.js` once to opt into
@@ -193,9 +199,26 @@ import "@aceshooting/lyra-ui/components/media/flag/flag-peer.js";
193
199
  - `country`/`language` resolve through `@aceshooting/lyra-flags`'s `flagUrl(code)`, which lazily
194
200
  fetches one requested flag at runtime. A bundler may still emit the complete reachable lazy-chunk
195
201
  graph because every supported code has a literal loader import; use a literal asset subpath
196
- import when the deployment artifact must be pruned. If you already have a flag's URL at build
202
+ import when the deployment artifact must be pruned. If every `<lr-flag>` in the app is pinned to
203
+ one `fidelity` (no per-instance switching), register
204
+ `@aceshooting/lyra-flags/standard`/`/compact`/`/detailed` via `setFlagUrlResolver()` instead of
205
+ importing `flag-peer.js` (which always registers the full three-tier resolver) — the tier-specific
206
+ entry excludes the other two tiers' generated loader maps from the reachable graph; see that
207
+ package's README. If you already have a flag's URL at build
197
208
  time, `src` skips the peer-package round trip; native image loading still uses the same bounded
198
209
  loading/error transaction.
210
+ - Rendering many flags at once (a country table, a picker listing every locale): resolve every code
211
+ up front with `@aceshooting/lyra-flags`'s `flagUrls()` (one call, returns `{code: url}` for all
212
+ 249 flags) and pass results through `src`, instead of letting each `<lr-flag>` instance
213
+ independently call `flagUrl()` — skips one peer-resolution round trip per instance. Image fetches
214
+ themselves are unaffected either way (each flag is a distinct asset; there is no sprite).
215
+ Alternatively, import `@aceshooting/lyra-ui/components/media/flag/flag-peer-bulk.js` instead of
216
+ the default `flag-peer.js` (never both) to get this automatically: it registers a resolver backed
217
+ by one shared `flagUrls()` call, so every `<lr-flag>` on the page benefits without threading `src`
218
+ by hand. Only worth it when the page renders most/all flags — a page with a handful pays an
219
+ unneeded 249-entry fetch. Only the standard tier is bulk-fetched this way;
220
+ `fidelity="compact"/"detailed"` on individual elements still resolves through its own lazy
221
+ per-code loader.
199
222
  - 65 of `@aceshooting/lyra-flags`' 249 flags (any whose design includes a detailed coat of
200
223
  arms/seal/emblem, e.g. `es`, `pt`, `sv`) ship **three** fidelity tiers, selected via the
201
224
  `fidelity` property (`flagUrl(code, { variant: fidelity })` under the hood): `"compact"` — a tiny WebP raster for
@@ -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** 16 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
 
@@ -79,7 +79,7 @@ weekdayLabelText?: (jsWeekday:number)=>string|undefined; monthLabelText?:
79
79
  A malformed value is ignored rather than collapsing the gutter. Calendar mode is unaffected; it
80
80
  has its own fixed weekday gutter
81
81
  - `colLabelHeight?: number | 'auto'` (attribute `col-label-height`, not reflected, `'auto'` new in
82
- 10.1.0) — height, in CSS px, of the matrix column-label band, or `'auto'` to measure the labels
82
+ 11.0.0) — height, in CSS px, of the matrix column-label band, or `'auto'` to measure the labels
83
83
  and size the band to fit them. Under a non-zero `colLabelRotation` the measurement projects each
84
84
  label's width through the rotation, which is what makes a rotated axis usable without hand-tuning
85
85
  a magic number. Never below the built-in `20`, and bounded above by a sanity ceiling so a
@@ -88,7 +88,7 @@ weekdayLabelText?: (jsWeekday:number)=>string|undefined; monthLabelText?:
88
88
  be bounded relative to them, whereas the canvas simply grows taller for this band and the cells
89
89
  keep their size. Unset keeps the built-in `20`, so no existing chart reflows. A malformed value is
90
90
  ignored
91
- - `colLabelRotation?: number` (attribute `col-label-rotation`, new in 10.1.0) — rotation, in
91
+ - `colLabelRotation?: number` (attribute `col-label-rotation`, new in 11.0.0) — rotation, in
92
92
  degrees, applied to matrix column labels. Unset or `0` paints them horizontally exactly as before.
93
93
  In a dense matrix the per-column width is far narrower than a typical label, so horizontal labels
94
94
  collide with their neighbours; `45` or `90` is the standard remedy. Each label rotates about an
@@ -210,7 +210,7 @@ weekday * (cellSize + CAL_GAP)`), consulted consistently by drawing, hit-testing
210
210
  than 2 entries) keeps today's 2-endpoint interpolation exactly. Invalid colors use the canvas
211
211
  fallback color and prevent the custom legend gradient from being assigned.
212
212
  - `legendStops?: readonly HeatmapLegendStop[]` (attribute: false) — clone-owned, bounded, frozen `HeatmapLegendStop { value: number;
213
- color?: string; label?: string }`: a discrete legend key rendered **instead of** the
213
+ color?: string; label?: string; partOfRamp?: boolean }`: a discrete legend key rendered **instead of** the
214
214
  `--lr-heatmap-scale-lo`/`-hi` gradient bar and its `[part="legend-lo"]`/`[part="legend-hi"]`
215
215
  endpoint labels — one `[part="legend-stop"]` per entry, in array order, each a
216
216
  `[part="legend-swatch"]` filled with that entry's `color` plus a `[part="legend-stop-label"]`.
@@ -227,14 +227,26 @@ color?: string; label?: string }`: a discrete legend key rendered **instead of**
227
227
  are never consulted by the color ramp, the bucket math, the tooltip, or the generated accessible
228
228
  name, so adding them changes nothing a cell renders. Labeled `annotations` still render their
229
229
  `[part="legend-annotation"]` entries after the stops. Unset (the default) or an empty array
230
- reproduces the exact gradient legend, unchanged.
230
+ reproduces the exact gradient legend, unchanged. A dev-mode-only warning fires when a stop's
231
+ `color` doesn't match the corresponding `colorSteps` entry — set `partOfRamp: false` on a stop
232
+ that is a real, distinctly-colored swatch deliberately outside the sequential ramp (e.g. a fixed
233
+ "no data" color next to an N-step ramp) to exclude just that stop from the comparison; defaults to
234
+ `true`. A caption-only stop (no `color`) is already excluded regardless of this flag.
231
235
 
232
236
  **Getters/methods:** `refreshTheme()` — redraws canvas content after an upstream design-token or
233
237
  color-scheme change; called automatically on theme changes, exposed for a consumer that needs to
234
- force a redraw manually.
238
+ force a redraw manually. `matrixGeometry: Readonly<{ padLeft: number; padTop: number; cellSize:
239
+ number }> | undefined` — the gutter/cell geometry the last matrix-mode draw actually painted with,
240
+ in CSS pixels; `undefined` in calendar mode. Lets a light-DOM consumer (e.g. a sticky header mirror
241
+ for a tall matrix) line up with the canvas without hardcoding the same numbers `row-label-width`/
242
+ `col-label-height`'s `"auto"` resolution would otherwise keep private.
235
243
 
236
244
  **Events:** `lr-cell-click` (fired on click, or Enter/Space on the keyboard-focused cell —
237
- `detail: { row, col, value }` in matrix mode, `detail: { date, value }` in calendar mode)
245
+ `detail: { row, col, value }` in matrix mode, `detail: { date, value }` in calendar mode),
246
+ `lr-matrix-geometry-change` (fired after a matrix-mode draw whose resolved `matrixGeometry` differs
247
+ from the previous draw — e.g. after `row-label-width="auto"`/`col-label-height="auto"` resolves
248
+ against new content or a resize; `detail` is the same object `matrixGeometry` returns; never fired
249
+ in calendar mode)
238
250
 
239
251
  **Slots:** none.
240
252
 
@@ -7,8 +7,8 @@
7
7
  - **Family** `components/charts/` — 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** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
11
- - **Themeable via** 17 parts, 16 custom properties — see this component's own `@csspart`/`@cssprop` list below
10
+ - **Optional peers** none
11
+ - **Themeable via** 18 parts, 18 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
 
14
14
  ---
@@ -62,6 +62,21 @@ passthrough). Not a subclass of `LyraChart`.
62
62
  - `tableTotals: boolean = false` (attribute `table-totals`) — adds a localized total column to the
63
63
  multi-series accessible table when `type="bar"` and `stacked` are both active. Ignored for
64
64
  grouped bars, line charts, and the single-series `data-list`.
65
+ - `showDataTable: boolean = false` (attribute `show-data-table`, new in 11.1.0) — makes the
66
+ generated accessible table visible rather than screen-reader-only. Same meaning as `lr-chart`'s
67
+ property of the same name.
68
+ - `dataTableToggle: boolean = false` (attribute `data-table-toggle`, new in 11.1.0) — renders a
69
+ localized disclosure button (`part="data-table-toggle"`, with `aria-expanded` and
70
+ `aria-controls`) above the table, so a *sighted* reader can reveal the numbers on demand;
71
+ `showDataTable` then becomes the disclosure's **initial** state rather than its whole behavior.
72
+ The table stays in the DOM in both states, so assistive technology never loses it. This matters
73
+ more here than on `lr-chart`: this component exists to avoid the Chart.js peers, so without it an
74
+ app that chose it for exactly that reason had to either hand-roll a `<details>` around a
75
+ duplicated table or adopt `lr-chart` and pull in Chart.js for a button — the cheap component
76
+ stuck with the expensive workaround. Unset, nothing renders and behavior is unchanged.
77
+ Themeable via `--lr-lite-chart-data-table-toggle-hover-bg` (default
78
+ `var(--lr-color-brand-quiet)`) and `--lr-lite-chart-data-table-toggle-active-bg` (default: that
79
+ hover colour mixed by `--lr-color-mix-active`).
65
80
  - `layout: 'fit' | 'scroll' = 'fit'` (reflected) — `'fit'` (default) is the original squeeze-the-
66
81
  whole-plot-to-host-width behavior, unchanged. `'scroll'` gives bars a fixed `barWidth` instead: plot
67
82
  content width becomes `categoryCount * barWidth` (can exceed the host's measured width), and
@@ -168,7 +183,8 @@ data alternative.
168
183
  mark), `line`, `legend`, `legend-item`, `legend-swatch`, `legend-text` (extra per-item text after
169
184
  the series label, rendered only when `legendText` is set), `live-region` (the current mark
170
185
  announcement for keyboard users), `data-list` (a visually hidden sampled list of plotted data
171
- points — single-series only), `data-table` (the generated/slotted alternative container), `table`
186
+ points — single-series only), `data-table` (the generated/slotted alternative container),
187
+ `data-table-toggle` (the `dataTableToggle` disclosure button — new in 11.1.0), `table`
172
188
  (the generated semantic category×series table rendered when there is more than one dataset), and
173
189
  `data-truncation` (the
174
190
  visible/announced sampling notice).
@@ -72,7 +72,7 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
72
72
  the documented way to weight a ramp toward the low end). **`stops` stay in the data's own units
73
73
  under either mode**, so the legend keeps reading in real values instead of log units — no
74
74
  pre-transforming to log10 and hand-relabelling the legend back.
75
- `'step'` (new in 10.1.0) emits maplibre's `['step', …]` instead of `['interpolate', …]`, giving
75
+ `'step'` (new in 11.0.0) emits maplibre's `['step', …]` instead of `['interpolate', …]`, giving
76
76
  **discrete bands rather than a continuous ramp**. Use it whenever the legend advertises a fixed
77
77
  set of ranges with one swatch each: a ramp would put colours on the map that appear nowhere in the
78
78
  legend, and would render two regions in the same advertised band as visibly different colours
@@ -105,7 +105,7 @@ GeoJSON.FeatureCollection; tone?: 'accent' | 'success' | 'warning' |
105
105
  GeoJSON source plus three geometry-filtered layers
106
106
  (fill, line, and circle, so a mixed `FeatureCollection` renders correctly), colored from the
107
107
  matching `--lr-color-*` token (`tone` defaults to `'accent'` → `--lr-color-brand`).
108
- `color` and `strokeColor` (both new in 10.1.0) override that per surface — `color` paints the
108
+ `color` and `strokeColor` (both new in 11.0.0) override that per surface — `color` paints the
109
109
  polygon fill, `strokeColor` the line and circle layers, falling back to `color` and then to `tone`.
110
110
  They are separable because a fill and its outline want opposite things on a
111
111
  choropleth-plus-overlay map, and the difference is measurable rather than aesthetic: the fill
@@ -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** 18 parts, 3 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
 
@@ -24,7 +24,7 @@ An `lr-option` row remains bounded by its owning listbox: the default label elli
24
24
  `start`/`end` (or `prefix`/`suffix`) adornment is capped at 40% of the row. Unbroken metadata
25
25
  therefore cannot widen a 320px LTR or RTL picker.
26
26
 
27
- **Adornments in the popup (fixed in 10.1.0).** Before 10.1.0 this paragraph described behavior the
27
+ **Adornments in the popup (fixed in 11.0.0).** Before 11.0.0 this paragraph described behavior the
28
28
  code did not have: `lr-combobox` builds its popup from normalized row *data* rather than from the
29
29
  light-DOM nodes, so a slotted `start`/`end`/`prefix`/`suffix` adornment had nowhere to land and
30
30
  simply never rendered — the documented slots and their documented parts were both dead inside the
@@ -111,7 +111,7 @@ An async `source` row can carry the same two fields (`start`, `end`) alongside i
111
111
  - `maxOptionsVisible: number = 3` (attribute `max-options-visible` — caps how many selected **tags**
112
112
  show before collapsing to `+N`; nothing to do with the suggestion list, see the three-caps note
113
113
  below)
114
- - `visibleOptions?: number` (attribute `visible-options`, new in 10.1.0) — bounds the popup to about
114
+ - `visibleOptions?: number` (attribute `visible-options`, new in 11.0.0) — bounds the popup to about
115
115
  this many suggestion rows, leaving the rest reachable by scrolling. Purely presentational: every
116
116
  row is still rendered. Measured from where row N actually starts rather than computed from a
117
117
  token, because a row's height varies with `sub` lines, adornments and group labels. Unset imposes
@@ -188,7 +188,7 @@ alias. Set the boolean `autocorrect` IDL, or use `autocorrect="on"` / `autocorre
188
188
  `ComboboxSourceRow = { readonly value: string; readonly label: string; readonly sub?: string; readonly icon?: unknown; readonly start?: unknown;
189
189
  readonly end?: unknown; readonly badge?: string |
190
190
  number; accessibleLabel?: string; data?: unknown; dotColor?: string; group?: string; disabled?:
191
- boolean }` — the row shape used by the async `source` path. `start` and `end` (new in 10.1.0) are
191
+ boolean }` — the row shape used by the async `source` path. `start` and `end` (new in 11.0.0) are
192
192
  the async counterparts of `<lr-option>`'s `start`/`end` adornment slots and render as the
193
193
  `option-start` / `option-end` parts, inert and aria-hidden exactly like `icon`. `icon` renders as a decorative leading
194
194
  visual whose rendered subtree stays visible but is inert and hidden from assistive technology;
@@ -51,7 +51,7 @@ 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'|'none' = 'dialog'` (attribute `popup-role`). `none` (new in 10.1.0)
54
+ - `popupRole: 'dialog'|'menu'|'none' = 'dialog'` (attribute `popup-role`). `none` (new in 11.0.0)
55
55
  renders **no** `role` and no generated `aria-label` on the popup surface, and leaves
56
56
  `aria-haspopup` off the trigger, so slotted content owns its own semantics and accessible name.
57
57
  It exists for the WAI-ARIA **disclosure navigation** pattern: a flyout of links is not an
@@ -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
 
@@ -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
 
package/llms/peers.md CHANGED
@@ -37,18 +37,18 @@ for the page.
37
37
 
38
38
  | Peer | Range | Needed by |
39
39
  |---|---|---|
40
- | `@aceshooting/lyra-flags` | `workspace:^2.0.0` | `lr-flag`, `lr-locale-picker`, `lr-phone-input` |
40
+ | `@aceshooting/lyra-flags` | `workspace:^2.1.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` |
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` |
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
+ | `dompurify` | `^3.4.14` | `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` |
54
54
  | `ical.js` | `^2.2.1` | `lr-calendar-viewer` |
package/llms/shared.md CHANGED
@@ -639,6 +639,15 @@ Three layers, and **which one you set decides how far the override reaches**:
639
639
  3. **`--lr-<component>-*`** — per-component properties, for one element at a time. Listed in each
640
640
  component's own section.
641
641
 
642
+ **Layer 2 (`--lr-*`) is declared only on each `lr-*` element's own shadow `:host`.** It never
643
+ reaches plain application CSS, and it never reaches your own custom elements, since neither is a
644
+ descendant of an `lr-*` shadow root — `body { color: var(--lr-color-text) }` in application CSS
645
+ resolves to nothing, silently, not an error. Retheme through layer 1 (`--lr-theme-*`), which
646
+ `theme.css` supplies at document scope and which inherits normally into every nested shadow root.
647
+ See [Where an override actually reaches](#where-an-override-actually-reaches) below for the full
648
+ inheritance rules, including the one documented exception (per-component `--lr-<component>-*`
649
+ hooks, layer 3, which do inherit through wrappers).
650
+
642
651
  ### The colour ramp and the semantic grid
643
652
 
644
653
  Colour has two layers beneath the `--lr-*` tokens you normally read.
@@ -1666,6 +1675,16 @@ control) is a single tab stop using a roving `tabindex`; arrow keys move within
1666
1675
  `Escape` dismisses the topmost dismissible overlay and returns focus to whatever opened it.
1667
1676
  `ArrowLeft`/`ArrowRight` mean previous/next and swap under `dir="rtl"`.
1668
1677
 
1678
+ **`accessibleLabel` binds to one of two different attributes depending on the component, and the
1679
+ two are not interchangeable.** Most components (e.g. `lr-card`, `lr-stat`) expose it as a direct
1680
+ alias of the native `aria-label` attribute — `accessible-label="…"` does nothing on those; write
1681
+ `aria-label="…"` instead. A minority (e.g. `lr-callout`, `lr-table`) separately compute an internal
1682
+ accessible name and expose `accessibleLabel` through the bespoke `accessible-label` attribute
1683
+ instead, specifically so the host's own native `aria-label` can still independently override that
1684
+ computed name. Check the component's own reference section (or its class JSDoc) for which
1685
+ convention it uses before writing markup — an `accessible-label` attribute on an `aria-label`-only
1686
+ component is a silent no-op, not an error.
1687
+
1669
1688
  **What that contract is verified by, precisely.** Every one of the 284 public tags carries at least
1670
1689
  one axe-core assertion in its own directory's tests, in a test that mounts its own tag; contrast
1671
1690
  (4.5:1 text, 3:1 control borders, in both the light and dark palettes), a 40px minimum target size,
package/llms/tokens.md CHANGED
@@ -17,6 +17,18 @@ 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
+
20
32
  > **Why layer 1 is not merely *preferred* but *required*: an ancestor `--lr-*` override does
21
33
  > not survive a nested component boundary.** Every component re-derives the whole `--lr-*` layer
22
34
  > from `--lr-theme-*` on its **own** `:host` (that is what `LyraElement`'s shared token