@aceshooting/lyra-ui 25.3.1 → 25.4.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 (58) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +1 -1
  5. package/dist/components/charts/chart/chart-sync.d.ts +4 -0
  6. package/dist/components/charts/chart/chart-sync.js +1 -0
  7. package/dist/components/charts/chart/chart-sync.styles.d.ts +1 -0
  8. package/dist/components/charts/chart/chart-sync.styles.js +1 -0
  9. package/dist/components/charts/chart/chart.class.d.ts +12 -2
  10. package/dist/components/charts/chart/chart.class.js +5 -4
  11. package/dist/components/charts/chart/histogram.class.js +1 -1
  12. package/dist/components/charts/chart/lite-chart.class.d.ts +18 -5
  13. package/dist/components/charts/chart/lite-chart.class.js +11 -11
  14. package/dist/components/data/heatmap/heatmap-grid-navigation.d.ts +2 -2
  15. package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -1
  16. package/dist/components/data/heatmap/heatmap.class.d.ts +24 -9
  17. package/dist/components/data/heatmap/heatmap.class.js +3 -3
  18. package/dist/components/forms/button/button.styles.js +1 -1
  19. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  20. package/dist/components/layout/app-rail/app-rail.class.d.ts +1 -1
  21. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  22. package/dist/components/layout/card/card.styles.js +1 -1
  23. package/dist/components/layout/details/accordion-item.styles.js +1 -1
  24. package/dist/components/layout/details/details.styles.js +1 -1
  25. package/dist/components/layout/reorder-list/reorder-item.class.js +2 -0
  26. package/dist/components/media/avatar/avatar.class.d.ts +3 -0
  27. package/dist/components/media/avatar/avatar.styles.js +1 -1
  28. package/dist/components/media/pan-zoom/pan-zoom.styles.js +1 -1
  29. package/dist/framework-types.d.ts +1 -1
  30. package/dist/internal/glass-surface.styles.js +1 -1
  31. package/dist/internal/opaque-content-border.styles.d.ts +3 -0
  32. package/dist/internal/opaque-content-border.styles.js +1 -0
  33. package/dist/internal/package-metadata.d.ts +1 -1
  34. package/dist/internal/package-metadata.js +1 -1
  35. package/dist/internal/tokens.styles.js +1 -1
  36. package/dist/surfaces/glass.css +1 -1
  37. package/dist/theme.css +1 -1
  38. package/llms/components/lr-avatar.md +9 -3
  39. package/llms/components/lr-bar-chart.md +1 -1
  40. package/llms/components/lr-bubble-chart.md +1 -1
  41. package/llms/components/lr-chart.md +11 -2
  42. package/llms/components/lr-doughnut-chart.md +1 -1
  43. package/llms/components/lr-heatmap.md +16 -3
  44. package/llms/components/lr-histogram.md +9 -1
  45. package/llms/components/lr-line-chart.md +11 -1
  46. package/llms/components/lr-lite-chart.md +14 -4
  47. package/llms/components/lr-pie-chart.md +1 -1
  48. package/llms/components/lr-polar-area-chart.md +1 -1
  49. package/llms/components/lr-radar-chart.md +1 -1
  50. package/llms/components/lr-reorder-list.md +5 -0
  51. package/llms/components/lr-scatter-chart.md +1 -1
  52. package/llms/peers.md +2 -2
  53. package/llms/shared/styles-and-tokens.md +8 -2
  54. package/llms/shared.md +8 -2
  55. package/package.json +3 -3
  56. package/vscode-css-data.json +1 -1
  57. package/vscode-html-data.json +1 -1
  58. package/web-types.json +1 -1
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [media](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/media.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 4 parts, 6 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 4 parts, 7 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -88,9 +88,14 @@ initials track the circle instead of staying one fixed size across every tier. `
88
88
  (default `var(--lr-radius-pill)`) — corner radius of the container. Its private default follows
89
89
  `shape` (`var(--lr-radius-pill)` for `circle`, `var(--lr-radius)` for `rounded`, `0` for `square`);
90
90
  an inherited or direct public value overrides uniformly across every shape, the same way
91
- `--lr-avatar-size` spans every size tier. Every public value
91
+ `--lr-avatar-size` spans every size tier. `--lr-avatar-border` (default `none`) — border shorthand
92
+ on `base`, applying to image, glyph and initials avatars in every shape. Border-box sizing keeps
93
+ the border inside the outer diameter set by `--size`, `--lr-avatar-size` or the size ladder;
94
+ image content fills the remaining inner area. Forced colors preserves the system-color boundary
95
+ instead of the normal token border. Existing `::part(base)` border customization remains supported.
96
+ Every public value
92
97
  above can be inherited from an ancestor or set directly on the avatar and remains authoritative
93
- across size/variant states. Plus shared tokens
98
+ across size/variant states in normal color modes. Plus shared tokens
94
99
  `--lr-radius`/`-pill`, `--lr-font-weight-semibold`.
95
100
 
96
101
  The variant colors are deliberately **not** the library's generic quiet-fill/on-quiet-text pairing:
@@ -103,6 +108,7 @@ variant's quiet tint.
103
108
  <lr-avatar initials="JS" variant="brand"></lr-avatar>
104
109
  <lr-avatar image="/users/42/photo.jpg" label="Jane Smith" size="large" shape="rounded"></lr-avatar>
105
110
  <lr-avatar label="Assistant"><svg slot="icon" viewBox="0 0 24 24"><!-- role glyph --></svg></lr-avatar>
111
+ <lr-avatar initials="JS" style="--lr-avatar-border: var(--lr-border-width-medium) solid var(--lr-color-border)"></lr-avatar>
106
112
 
107
113
  <!-- Far down a long list: defer the request, fall back to a glyph, and report a broken URL. -->
108
114
  <lr-avatar id="lazy-avatar" image="/users/7/photo.jpg" label="Ada Lovelace" loading="lazy">
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 17 parts, 39 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -233,6 +233,10 @@ structured points retain their y-value formatting.
233
233
  value, matching Chart.js's own paired index/value-scale stacking contract.
234
234
  - `withoutAnimation: boolean = false` (attribute `without-animation`, reflected) — disables Chart.js
235
235
  construction animation; reduced-motion preference also disables it regardless of this value
236
+ - `syncGroup: string = ''` (attribute `sync-group`) — opt-in exact category coordination; see
237
+ [Synchronized categorical charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md#synchronized-categorical-charts). Only effective vertical
238
+ categorical bar/line configurations participate; other types, horizontal charts and continuous
239
+ x scales keep this setting inert. Core keeps its native canvas tooltip and existing tooltip tokens.
236
240
  - `withoutTooltip: boolean = false` (attribute `without-tooltip`, reflected) — disables the
237
241
  Chart.js tooltip plugin for this instance
238
242
  - `dataLabels: boolean = false` (attribute `data-labels`) — draws each point's value on the chart via
@@ -432,7 +436,9 @@ notice, so use that escape hatch when the complete data set needs pagination, vi
432
436
  another application-owned presentation. Explicit `config.data` is the deliberate full-fidelity
433
437
  Chart.js escape hatch and is not rewritten by the simplified-surface sampler.
434
438
 
435
- **CSS parts:** `base`, `plot` (the fixed-height canvas/overlay region), `canvas`, `legend` (the
439
+ **CSS parts:** `base`, `plot` (the fixed-height canvas/overlay region), `canvas`,
440
+ `sync-crosshair` (decorative category line during an admitted synchronized interaction; the native
441
+ canvas tooltip has no CSS part), `legend` (the
436
442
  wrapping DOM legend), `legend-item` (a dataset/category visibility button), `legend-item-hidden`
437
443
  (added while the dataset/category is hidden), `legend-swatch`,
438
444
  `reset-zoom-button`, `description`, `notices` (wrapper for nonfatal feature warnings and
@@ -448,6 +454,9 @@ legend grows the host in normal flow. The `height` property writes only a privat
448
454
  public token wins across valid, invalid, and unset `height` updates. Set it on the host or an
449
455
  ancestor, not a shadow-tree descendant, since custom properties only cascade downward);
450
456
  `--lr-chart-grid-color` (default `var(--lr-color-border-subtle)`),
457
+ `--lr-chart-sync-crosshair-color` (default `var(--lr-color-text)`) and
458
+ `--lr-chart-sync-crosshair-width` (default `var(--lr-border-width-thin)`) style the synchronized
459
+ category line;
451
460
  `--lr-chart-tick-color` (default `var(--lr-color-text-quiet)`), `--lr-chart-legend-color`
452
461
  (default `var(--lr-color-text)`), `--lr-chart-tooltip-bg` (default `var(--lr-color-surface)`),
453
462
  `--lr-chart-tooltip-color` (default `var(--lr-color-text)`) — each resolved fresh via
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -83,9 +83,17 @@ weekdayLabelWidth?: number|'auto'; weekdayLabelText?: (jsWeekday:number)=>string
83
83
  - `cellSize: number = 22` (attribute `cell-size` — default `22` in matrix mode, `11` in calendar
84
84
  mode when left unset; explicitly setting it now governs both modes' per-cell size alike, and it's
85
85
  ignored in either mode when `fitToWidth` is set)
86
+ - `rowHeight?: number` (attribute `row-height`) — independent matrix vertical row pitch in CSS
87
+ pixels, including its trailing `cellGapY` separator. Unset, removed, `null`, `undefined`, and
88
+ non-finite values restore square rows from the effective `cellSize`; finite values
89
+ clamp to the `1`–`4096` range. This bounds numeric outliers; browser canvas limits still apply
90
+ to the complete grid. `fitToWidth`, `minCellSize`, and `maxCellSize` continue to govern column pitch.
91
+ Calendar mode ignores it and preserves its existing square geometry. With `accessibleCells`,
92
+ width and height independently preserve the accessible target floor; dense columns can therefore
93
+ overflow even when fitting is requested.
86
94
  - `cellGapX: number = 1` / `cellGapY: number = 1` (attributes `cell-gap-x` / `cell-gap-y`) —
87
95
  trailing horizontal/vertical gaps in CSS pixels. In matrix mode they are subtracted from the
88
- square `cellSize` pitch. Negative values clamp to zero, non-finite values use `1`, and oversized
96
+ horizontal `cellSize` / vertical `rowHeight ?? cellSize` pitch. Negative values clamp to zero, non-finite values use `1`, and oversized
89
97
  gaps leave at least one painted pixel. Custom geometry with `accessibleCells` grows the minimum
90
98
  pitch and caps gaps to preserve the `--lr-icon-button-size` target floor. In calendar mode they
91
99
  are opt-in: only an explicitly set property or attribute replaces the calendar's original `2px`
@@ -374,10 +382,11 @@ otherwise keep private. For the case that motivated it — a frozen header or gu
374
382
  matrix — prefer `stickyLabels`, which freezes the band inside the component and needs no mirror at
375
383
  all; the getter remains the way to align a *separate* element (a sibling chart, a custom overlay)
376
384
  with the grid. `LyraHeatmapMatrixGeometryChangeDetail` contains `padLeft`, `padTop`, and `cellSize`
377
- (the square pitch), plus optional `cellWidth`, `cellHeight`, and `cellRadius` for custom matrix
385
+ (the horizontal pitch), plus optional `rowHeight` when vertical pitch differs and optional
386
+ `cellWidth`, `cellHeight`, and `cellRadius` for custom matrix
378
387
  presentation. When those optional fields are absent, painted width/height are `cellSize - 1` and
379
388
  radius is zero. The getter and geometry-change event always share one frozen snapshot, including
380
- changes to the resolved gaps/radius.
389
+ changes to the resolved row pitch, gaps, and radius. Use `rowHeight ?? cellSize` to position rows.
381
390
 
382
391
  `calendarGeometry: Readonly<LyraHeatmapCalendarGeometry> | undefined` (read-only; assignment is
383
392
  ignored) is the calendar-mode counterpart: the frozen snapshot of the last calendar draw with
@@ -394,6 +403,10 @@ selection, `lr-cell-activate`, and `cellText` keep working with no matrix rebuil
394
403
 
395
404
  For a fluid day/hour matrix, keep all 24 hour strings in `data.colLabels` and use
396
405
  `fit-to-width cell-gap-x="1" cell-gap-y="2" cell-radius="2" col-label-interval="3"`.
406
+ For a dense matrix with 144 time columns and 20 rows, use `fit-to-width row-height="28"` to fit
407
+ columns while keeping readable rows. Row height includes the trailing separator and stays `28px`
408
+ when the host resizes. The existing `minCellSize` floor and accessible target sizes can require
409
+ horizontal overflow in a narrow allocation; choose `sticky-labels` when you want a scrollport.
397
410
  For a single fluid square cell, use `fit-to-width` with equal horizontal and vertical gaps.
398
411
 
399
412
  **Events:** `lr-selection-change` (not cancelable; frozen readonly `HeatmapSelectionChangeDetail { selectedCells, source }` proposal in multiple mode, with `source: 'pointer' | 'keyboard' | 'row' | 'column'`; accept it by assigning `selectedCells`). `lr-cell-activate` (fired on click, or Enter/Space on the keyboard-focused cell —
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 17 parts, 39 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -28,6 +28,11 @@ Bins `values` into `bins` equal-width buckets and renders as a bar chart (extend
28
28
  chart-wide accessible-name meaning.
29
29
  - inherits `lr-chart`'s full surface, including `scaleType` (`scale-type`) and `annotations` —
30
30
  a logarithmic frequency axis and threshold/band markers both apply to a histogram
31
+ - `syncGroup: string = ''` (attribute `sync-group`) — inherited exact category coordination for its
32
+ vertical categorical bar configuration; see
33
+ [Synchronized categorical charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md#synchronized-categorical-charts). Matches use the generated
34
+ bucket range strings, so different bin boundaries do not match unless their labels are exactly
35
+ equal. Horizontal or continuous-x raw configurations do not participate.
31
36
  - `labels`/`datasets`/`type` are **derived, read-only** (installed as getter/setter pairs on the
32
37
  prototype; direct writes are silently ignored) — `labels`/`datasets` are computed from
33
38
  `values`/`bins` (memoized per instance, keyed by reference equality on `values` plus the
@@ -59,12 +64,15 @@ bar controller and dataset legend even with `legend-mode="datum"`.
59
64
  **Slots:** default JSON configuration script, `data-table`, `center`.
60
65
 
61
66
  **CSS parts:** `base`, `plot`, `canvas`, `legend`, `legend-item`, `legend-item-hidden`, `legend-swatch`,
67
+ `sync-crosshair` (inherited decorative category line during synchronization; the native canvas
68
+ tooltip has no CSS part),
62
69
  `reset-zoom-button`, `description`, `notices`, `data-table`, `data-table-toggle`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
63
70
  rendered in place of `canvas` when the optional `chart.js` peer dependency fails to load; the
64
71
  failure transition is announced through the shared document-level light-DOM assertive sink —
65
72
  inherited from `LyraChart`, unaffected by the binning logic).
66
73
 
67
74
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
75
+ `--lr-chart-sync-crosshair-color`, `--lr-chart-sync-crosshair-width`,
68
76
  `--lr-chart-tick-color`, `--lr-chart-tick-font-size`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
69
77
  `--lr-chart-tooltip-color`, `--lr-chart-legend-item-hover-bg`,
70
78
  `--lr-chart-legend-item-active-bg`, `--lr-chart-data-table-button-hover-bg`,
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 17 parts, 39 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Documented with** `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`, `lr-scatter-chart` (same section below)
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
15
15
 
@@ -21,6 +21,13 @@ Each is `LyraChart` with a named default `type` — respectively `line`, `bar`,
21
21
  `radar`, `polarArea`, `bubble`, `scatter`. In parity with the mirrored tags, `type` remains writable
22
22
  and accepts the full `LyraChartType` vocabulary; the tag name is a convenient default, not a lock.
23
23
 
24
+ `syncGroup: string = ''` (attribute `sync-group`) is inherited. The default vertical categorical
25
+ `lr-line-chart` and `lr-bar-chart` configurations can participate in
26
+ [Synchronized categorical charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md#synchronized-categorical-charts). The other six default chart
27
+ types leave it inert; changing `type` or raw `config` to an admitted vertical categorical bar/line
28
+ configuration enables participation regardless of the tag. Horizontal or continuous-x
29
+ configurations remain outside synchronization.
30
+
24
31
  Everything else is inherited verbatim from `lr-chart`; each name below has the same type, default,
25
32
  and behavior there. **See `llms/components/lr-chart.md` for the details, code example, and gotchas
26
33
  of every entry in these lists.**
@@ -51,12 +58,15 @@ Radial category legends additionally emit `lr-datum-visibility-change-request` (
51
58
  **Slots:** default JSON configuration script, `data-table`, `center`.
52
59
 
53
60
  **CSS parts:** `base`, `plot`, `canvas`, `legend`, `legend-item`, `legend-item-hidden`, `legend-swatch`,
61
+ `sync-crosshair` (inherited decorative category line, rendered only for an admitted synchronized
62
+ configuration; the native canvas tooltip has no CSS part),
54
63
  `reset-zoom-button`, `description`, `notices`, `data-table`, `data-table-toggle`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
55
64
  rendered in place of `canvas` when the optional `chart.js` peer dependency fails to load; the
56
65
  failure transition is announced through the shared document-level light-DOM assertive sink — see
57
66
  `llms/components/lr-chart.md`).
58
67
 
59
68
  **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
69
+ `--lr-chart-sync-crosshair-color`, `--lr-chart-sync-crosshair-width`,
60
70
  `--lr-chart-tick-color`, `--lr-chart-tick-font-size`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
61
71
  `--lr-chart-tooltip-color`, `--lr-chart-legend-item-hover-bg`,
62
72
  `--lr-chart-legend-item-active-bg`, `--lr-chart-data-table-button-hover-bg`,
@@ -9,17 +9,21 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 18 parts, 19 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 20 parts, 23 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
16
16
 
17
17
  ## `lr-lite-chart`
18
18
 
19
+ `syncGroup: string = ''` (attribute `sync-group`) opts into
20
+ [Synchronized categorical charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md#synchronized-categorical-charts). Its DOM `sync-crosshair` and
21
+ `sync-tooltip` parts use the shared crosshair and tooltip tokens described there.
22
+
19
23
  A dependency-free bar/line chart — plain SVG/DOM rendering, zero peer dependencies (unlike
20
24
  `lr-chart`, which wraps `chart.js`). For a project whose architecture forbids a charting
21
25
  dependency outright: covers grouped/stacked bars, multi-series lines, per-point click, and hover
22
- tooltips (native SVG `<title>`, no positioning JS) — not a full `lr-chart` replacement (no
26
+ tooltips (native SVG `<title>` by default, positioned text tooltips in a sync group) — not a full `lr-chart` replacement (no
23
27
  zoom/pan, no pie/doughnut/radar/scatter/bubble types, no horizontal/dual-y-axis, no raw-config
24
28
  passthrough). Not a subclass of `LyraChart`.
25
29
 
@@ -31,7 +35,7 @@ shape to express. A per-series stack-group id would also need the hand-rolled SV
31
35
  pass (linear/sqrt/log stack compression, `minBarHeight`) to track independent running offsets per
32
36
  group instead of one per category, which is a materially larger, higher-risk change than this
33
37
  component's existing single-stack model. `tooltipTitleFormatter`/`tooltipFooterFormatter` are
34
- similarly absent: this component's hover tooltip is a native SVG `<title>` on each mark — one
38
+ similarly absent: this component's default hover tooltip is a native SVG `<title>` on each mark — one
35
39
  self-contained string per mark, generated by `pointText` — not a Chart.js-style multi-item tooltip
36
40
  with separate title/body/footer regions for several datasets sharing a hovered category, so there
37
41
  is no "every item in the tooltip" surface to hook a title or footer formatter onto.
@@ -275,7 +279,9 @@ instead of materializing an unbounded hidden DOM or SVG tree.
275
279
  **Slots:** `data-table` — optional consumer-provided complete, paginated, or virtualized accessible
276
280
  data alternative.
277
281
 
278
- **CSS parts:** `base`, `description`, `grid-line`, `axis-label`, `axis-title`, `bar` and `point` (each carries
282
+ **CSS parts:** `base`, `description`, `grid-line`, `axis-label`, `axis-title`,
283
+ `sync-crosshair` (decorative synchronized category line), `sync-tooltip` (noninteractive positioned
284
+ text tooltip while `syncGroup` is active), `bar` and `point` (each carries
279
285
  `data-selected` when its category index is in `selectedIndices`, with explicit pressed state on every
280
286
  mark), `line`, `legend`, `legend-item`, `legend-swatch`, `legend-text` (extra per-item text after
281
287
  the series label, rendered only when `legendText` is set), `live-region` (the current mark
@@ -303,6 +309,10 @@ suppresses the generated sample and notice.
303
309
 
304
310
  **Themeable custom properties:** `--lr-chart-height` (same public host-level property and precedence
305
311
  as `lr-chart`; it always wins over the `height` property's private fallback);
312
+ `--lr-chart-sync-crosshair-color` (default `var(--lr-color-text)`) and
313
+ `--lr-chart-sync-crosshair-width` (default `var(--lr-border-width-thin)`) style the synchronized
314
+ category line; `--lr-chart-tooltip-bg` (default `var(--lr-color-surface)`) and
315
+ `--lr-chart-tooltip-color` (default `var(--lr-color-text)`) style the positioned synchronized tooltip;
306
316
  `--lr-chart-grid-color`, `--lr-chart-tick-color`, `--lr-chart-tick-font-size` (default
307
317
  `var(--lr-font-size-2xs)`), `--lr-chart-legend-color` — same token
308
318
  *names* as `lr-chart`, so a host already theming `lr-chart` themes this for free;
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -126,6 +126,11 @@ row content for the repeated move-action names.
126
126
  effective owner state. Corresponding custom states include `:state(at-start)`, `:state(at-end)`,
127
127
  `:state(list-disabled)`, `:state(pending)`, and `:state(busy)`.
128
128
 
129
+ Each move control also carries its localized `moveUp` or `moveDown` action as an `aria-label`
130
+ fallback. The reflected `ariaLabelledByElements` relationship retains the full action and row name
131
+ and takes precedence in supporting browsers. Automation tools that omit reflected element references
132
+ may report only the action fallback; repeated actions can be located within their owning row.
133
+
129
134
  **Events:** `lr-move-request` (`detail: { direction: 'up' | 'down' }` — a move button was activated
130
135
  while not disabled; handled by the parent `<lr-reorder-list>`, which performs the actual move)
131
136
 
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
package/llms/peers.md CHANGED
@@ -52,14 +52,14 @@ for the page.
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` |
55
- | `katex` | `^0.18.4` | `lr-agent-workspace`, `lr-dashboard-grid`, `lr-eval-run`, `lr-markdown`, `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`, `lr-streaming-text`, `lr-streaming-text-core`, `lr-widget-renderer` |
55
+ | `katex` | `^0.18.4 \|\| ^0.19.0` | `lr-agent-workspace`, `lr-dashboard-grid`, `lr-eval-run`, `lr-markdown`, `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`, `lr-streaming-text`, `lr-streaming-text-core`, `lr-widget-renderer` |
56
56
  | `libphonenumber-js` | `>=1.11.0 <2` | _(not referenced by any component)_ |
57
57
  | `mammoth` | `^1.12.1` | `lr-docx-viewer` |
58
58
  | `maplibre-gl` | `>=5 <7` | `lr-geojson-viewer`, `lr-map` |
59
59
  | `marked` | `^18.0.11` | `lr-agent-workspace`, `lr-dashboard-grid`, `lr-eval-run`, `lr-markdown`, `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`, `lr-streaming-text`, `lr-streaming-text-core`, `lr-widget-renderer` |
60
60
  | `papaparse` | `^5.7.0` | `lr-csv-viewer`, `lr-dataset-viewer` |
61
61
  | `pdfjs-dist` | `^6.3.289` | `lr-pdf-viewer` |
62
- | `postal-mime` | `^3.0.1 || ^4.0.0` | `lr-email-viewer` |
62
+ | `postal-mime` | `^3.0.1 \|\| ^4.0.0` | `lr-email-viewer` |
63
63
  | `qrcode` | `^1.5.4` | `lr-qr-code` |
64
64
  | `react` | `>=19 <20` | type-only `@aceshooting/lyra-ui/custom-elements-jsx` entry (no runtime import) |
65
65
  | `shiki` | `^4.4.3` | `lr-agent-workspace`, `lr-change-review`, `lr-code-block`, `lr-code-block-core`, `lr-dashboard-grid`, `lr-diff-view`, `lr-document-compare`, `lr-eval-result`, `lr-eval-run`, `lr-markdown`, `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`, `lr-streaming-text`, `lr-streaming-text-core`, `lr-widget-renderer` |
@@ -1135,12 +1135,18 @@ The public `--lr-theme-surface-opacity` input accepts 0 through 1. Lower opacity
1135
1135
  of the backdrop; the default foreground qualification covers 70%, while a custom lower setting
1136
1136
  cannot guarantee contrast against every backdrop. Solid and accessibility preferences retain
1137
1137
  opaque fills regardless of this input.
1138
- Quiet text, necessary control edges, focus indicators and transparent actions gain a local
1138
+ Necessary control borders use the effective painted opacity: their glass adjustment grows as
1139
+ transparency increases and disappears at 100% opacity. Ordinary and strong borders share this
1140
+ adjustment; decorative borders and explicit component border overrides keep their own tokens.
1141
+ Quiet text, focus indicators and transparent actions retain their separate local
1139
1142
  contrast-qualified foreground; opaque accent fills retain their own on-colours. Supported chrome
1140
1143
  includes app rails, navigation menus, menubars, menus and their context-menu composition, popovers,
1141
1144
  selection toolbars, toast items and the owned playback-rate toolbar of `lr-av-player`. Nested glass
1142
1145
  chrome is opaque, preventing repeated blur. Independently promoted menus and modal panels start a
1143
- new material root. Content cards and editing fields remain opaque.
1146
+ new material root. Surface-colored outlined card and disclosure interiors let nested Lyra
1147
+ controls use their solid border colors while preserving the enclosing edge against glass.
1148
+ Filled accent interiors retain qualification. Native descendants retain inherited public color
1149
+ aliases. Custom translucent content fills require the author to choose suitable control borders.
1144
1150
  A design panel can offer a Glass opacity range from 0–100%, shown when the selected surface is
1145
1151
  Glass. Start and reset it at 70%; convert the displayed percentage to the public token's 0–1 range.
1146
1152
  Apply this CSS input independently of look overrides: `setLyraStyle()` does not accept surface
package/llms/shared.md CHANGED
@@ -5785,12 +5785,18 @@ The public `--lr-theme-surface-opacity` input accepts 0 through 1. Lower opacity
5785
5785
  of the backdrop; the default foreground qualification covers 70%, while a custom lower setting
5786
5786
  cannot guarantee contrast against every backdrop. Solid and accessibility preferences retain
5787
5787
  opaque fills regardless of this input.
5788
- Quiet text, necessary control edges, focus indicators and transparent actions gain a local
5788
+ Necessary control borders use the effective painted opacity: their glass adjustment grows as
5789
+ transparency increases and disappears at 100% opacity. Ordinary and strong borders share this
5790
+ adjustment; decorative borders and explicit component border overrides keep their own tokens.
5791
+ Quiet text, focus indicators and transparent actions retain their separate local
5789
5792
  contrast-qualified foreground; opaque accent fills retain their own on-colours. Supported chrome
5790
5793
  includes app rails, navigation menus, menubars, menus and their context-menu composition, popovers,
5791
5794
  selection toolbars, toast items and the owned playback-rate toolbar of `lr-av-player`. Nested glass
5792
5795
  chrome is opaque, preventing repeated blur. Independently promoted menus and modal panels start a
5793
- new material root. Content cards and editing fields remain opaque.
5796
+ new material root. Surface-colored outlined card and disclosure interiors let nested Lyra
5797
+ controls use their solid border colors while preserving the enclosing edge against glass.
5798
+ Filled accent interiors retain qualification. Native descendants retain inherited public color
5799
+ aliases. Custom translucent content fills require the author to choose suitable control borders.
5794
5800
  A design panel can offer a Glass opacity range from 0–100%, shown when the selected surface is
5795
5801
  Glass. Start and reset it at 70%; convert the displayed percentage to the public token's 0–1 range.
5796
5802
  Apply this CSS input independently of look overrides: `setLyraStyle()` does not accept surface
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aceshooting/lyra-ui",
3
- "version": "25.3.1",
3
+ "version": "25.4.0",
4
4
  "description": "Free, independent Lit web components: an open-source alternative to Shoelace and Web Awesome with accessible forms, dashboards, charts, and agent UI.",
5
5
  "keywords": [
6
6
  "web-components",
@@ -11690,7 +11690,7 @@
11690
11690
  "emoji-picker-element-data": "^1.8.0",
11691
11691
  "epubjs": "^0.3.93",
11692
11692
  "ical.js": "^2.2.1",
11693
- "katex": "^0.18.4",
11693
+ "katex": "^0.18.4 || ^0.19.0",
11694
11694
  "libphonenumber-js": ">=1.11.0 <2",
11695
11695
  "mammoth": "^1.12.1",
11696
11696
  "maplibre-gl": ">=5 <7",
@@ -11832,7 +11832,7 @@
11832
11832
  "istanbul-lib-report": "^3.0.1",
11833
11833
  "istanbul-reports": "^3.2.0",
11834
11834
  "jszip": "^3.10.2",
11835
- "katex": "^0.18.10",
11835
+ "katex": "^0.19.0",
11836
11836
  "libphonenumber-js": "^1.13.14",
11837
11837
  "mammoth": "^1.13.0",
11838
11838
  "maplibre-gl": "^6.11.2",