@aceshooting/lyra-ui 9.1.0 → 9.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +246 -0
  2. package/README.md +7 -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-eval-dashboard/agent-eval-dashboard.styles.js +2 -2
  7. package/dist/components/agent-tools/agent-run/agent-run.class.js +1 -1
  8. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
  9. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +1 -1
  10. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -1
  11. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  12. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +1 -1
  13. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  14. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +1 -1
  15. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +2 -2
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +1 -1
  17. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  18. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  19. package/dist/components/agent-tools/test-results/test-results.class.js +1 -1
  20. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +1 -1
  21. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  22. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  23. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
  24. package/dist/components/charts/chart/bar-chart.class.js +1 -1
  25. package/dist/components/charts/chart/bubble-chart.class.js +1 -1
  26. package/dist/components/charts/chart/chart.class.js +1 -1
  27. package/dist/components/charts/chart/doughnut-chart.class.js +1 -1
  28. package/dist/components/charts/chart/histogram.class.js +1 -1
  29. package/dist/components/charts/chart/line-chart.class.js +1 -1
  30. package/dist/components/charts/chart/pie-chart.class.js +1 -1
  31. package/dist/components/charts/chart/polar-area-chart.class.js +1 -1
  32. package/dist/components/charts/chart/radar-chart.class.js +1 -1
  33. package/dist/components/charts/chart/scatter-chart.class.js +1 -1
  34. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  35. package/dist/components/conversation/chat-message/chat-message.styles.js +6 -0
  36. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  37. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  38. package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
  39. package/dist/components/conversation/thread-list/thread-list.styles.js +9 -0
  40. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  41. package/dist/components/data/file-tree/file-tree.class.js +1 -1
  42. package/dist/components/data/heatmap/heatmap.class.d.ts +1 -1
  43. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  44. package/dist/components/data/pagination/pagination.class.js +1 -1
  45. package/dist/components/data/table/table.class.js +1 -1
  46. package/dist/components/forms/button/button.styles.js +1 -1
  47. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  48. package/dist/components/forms/combobox/combobox.class.js +1 -1
  49. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  50. package/dist/components/forms/input/time-input.class.js +1 -1
  51. package/dist/components/forms/switch/switch.styles.js +3 -1
  52. package/dist/components/layout/card/card.styles.js +2 -2
  53. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  54. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  55. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  56. package/dist/components/layout/multi-split/multi-split.styles.js +29 -9
  57. package/dist/components/media/attachment-chip/attachment-chip.class.js +2 -2
  58. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts +1 -1
  59. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +2 -2
  60. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +2 -2
  61. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  62. package/dist/components/media/file-input/file-input.class.js +1 -1
  63. package/dist/components/media/flag/flag.class.js +1 -1
  64. package/dist/components/media/lightbox/lightbox.styles.js +2 -0
  65. package/dist/components/overlays/callout/callout.styles.js +2 -2
  66. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  67. package/dist/components/overlays/overlay/popover.class.js +2 -2
  68. package/dist/components/overlays/overlay/tooltip.class.js +2 -2
  69. package/dist/components/overlays/popup/popup.class.js +2 -2
  70. package/dist/components/overlays/spinner/spinner.styles.js +2 -2
  71. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  72. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +1 -1
  73. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +1 -1
  74. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
  75. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +11 -0
  76. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  77. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
  78. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  79. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  80. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  81. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +1 -1
  82. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  83. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  84. package/dist/internal/dev-mode-attribute-warning.d.ts +7 -0
  85. package/dist/internal/dev-mode-attribute-warning.js +1 -0
  86. package/dist/internal/lyra-element.js +1 -1
  87. package/dist/internal/package-metadata.d.ts +1 -1
  88. package/dist/internal/package-metadata.js +1 -1
  89. package/llms/components/lr-attachment-trigger.md +2 -2
  90. package/llms/components/lr-heatmap.md +1 -1
  91. package/llms/index.md +1 -1
  92. package/llms/peers.md +1 -1
  93. package/llms/shared.md +13 -0
  94. package/llms-full.txt +16 -3
  95. package/package.json +3 -3
  96. package/vscode-html-data.json +1 -1
  97. package/web-types.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,251 @@
1
1
  # Changelog
2
2
 
3
+ ## 9.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 3de3498: Document 18 additive public surface additions from 9.0.0 that had no changelog entry:
8
+
9
+ - `<lr-chip>`: new `end` slot (trailing content, typically an icon, after the label).
10
+ - `<lr-claim-evidence>`: new `compact` and `frame` properties.
11
+ - `<lr-code-editor>`: new `size` property.
12
+ - `<lr-ebook-viewer>`, `<lr-pptx-viewer>`, `<lr-spreadsheet-viewer>`: new `maxHeight` property on
13
+ each.
14
+ - `<lr-token-input>`: new `start` and `end` adornment slots.
15
+ - New CSS custom-property indirection (a themeable `--lr-*` hook backing a previously
16
+ hardcoded/token-only value) on `<lr-dock-panel>`, `<lr-retrieval-compare>`,
17
+ `<lr-spreadsheet-viewer>`, `<lr-stream-status>`, `<lr-code-block>`/`<lr-code-block-core>`,
18
+ `<lr-page-rail>`, and `<lr-pdf-viewer>`.
19
+
20
+ All 18 are additive and backward-compatible — nothing removed or renamed, no behavior change when
21
+ left unset — but none were individually called out in the 9.0.0 changelog entry, unlike the many
22
+ other opt-in additions from the same release that are documented by exact component/property name.
23
+ - d04b07e: Document six cancelable pre-mutation events added in 9.0.0 with no changelog entry:
24
+ `<lr-dock-panel>`'s `lr-collapse-request`, `<lr-widget>`'s `lr-collapse-request`,
25
+ `lr-fullscreen-request`, and `lr-view-request`, `<lr-page>`'s `lr-nav-toggle`, and
26
+ `<lr-split-panel>`'s `lr-reposition-request`.
27
+
28
+ 9.0.0 added a consistent propose-then-commit event pair to several components that previously
29
+ only fired a single post-commit notification: a new cancelable `*-request` event fires first with
30
+ the proposed next state, and a consumer's `preventDefault()` on it now vetoes the change before
31
+ the existing non-cancelable `*-change`/completion event fires. `<lr-dock-panel>` gained
32
+ `lr-collapse-request` alongside its existing `lr-collapse-change`; `<lr-widget>` gained its own,
33
+ independent `lr-collapse-request` (alongside `lr-collapse-change`) plus `lr-fullscreen-request`
34
+ and `lr-view-request` (alongside `lr-fullscreen-change`/`lr-view-change`); `<lr-page>` gained
35
+ `lr-nav-toggle`, its first event of any kind; `<lr-split-panel>` gained `lr-reposition-request`
36
+ alongside its existing `lr-reposition` post-commit event. All six are genuine new opt-in public
37
+ API — a consumer can now veto a collapse, fullscreen, view, nav-open, or divider-reposition
38
+ mutation before it commits — but none were called out in the 9.0.0 changelog entry, unlike the
39
+ many other opt-in additions from the same release that are individually documented by name.
40
+ - 7bcef3e: Document further additive 9.0.0 public surface that had no changelog entry, found auditing the
41
+ two largest 9.0.0 remediation commits:
42
+
43
+ - `<lr-context-inspector>`: five new events — `lr-error`, `lr-copy-error`, `lr-export-error`,
44
+ `lr-show`, `lr-hide` (all from its embedded copy/export controls).
45
+ - `<lr-graph>`: eight categorical fallback CSS custom properties, `--lr-graph-cat-1` through
46
+ `--lr-graph-cat-8`, backing the default node-type color palette.
47
+ - `<lr-tag>`: new `lr-remove` event (non-cancelable notification that the remove button was
48
+ activated).
49
+ - `<lr-rating>`: new `focus`/`blur` native-passthrough events, `focus()`/`blur()`/`click()`
50
+ methods, and `base`/`rating` csspart compatibility aliases (same node, two names).
51
+ - A long tail of new, narrowly-scoped CSS custom properties (visual tokens only, no new
52
+ interaction surface) on `<lr-activity-feed>`, `<lr-prompt-studio>`, `<lr-task-list>`,
53
+ `<lr-tool-approval-dialog>`, `<lr-tool-param-form>`, `<lr-push-to-talk>`, `<lr-flow-controls>`,
54
+ `<lr-menu-item>`, `<lr-chip-group>`, and further `<lr-rating>` properties; plus new slot aliases
55
+ on `<lr-prompt-input>` (`start`/`leading`/`end`/`trailing`) and `<lr-push-to-talk>`
56
+ (`microphone-icon`/`icon`), and new cssparts on `<lr-model-select>`, `<lr-push-to-talk>`, and
57
+ `<lr-source-picker>`.
58
+
59
+ All additive and backward-compatible — nothing removed or renamed, no behavior change when left
60
+ unset.
61
+ - d59f8c5: Fix `<lr-button>`'s start/end adornments claiming a 40%-of-row flex-basis instead of just being
62
+ capped at 40%.
63
+
64
+ A 9.0.0 change gave `[part~="start"]`/`[part~="end"]` `flex: 0 1 40%`, which sets the flex
65
+ *basis* to 40% of the button's own internal row -- a preferred size the flex algorithm tries to
66
+ honor before shrinking -- not merely `max-inline-size: 40%`'s ceiling. Because the basis is
67
+ self-referential (relative to the button's own internal row, unrelated to its position in the
68
+ page), even a small icon claimed a 40% preferred share before shrinking, squeezing
69
+ `[part="label"]`'s `flex: 1 1 auto` below what its text needed and ellipsizing labels that had
70
+ room to spare, with visible unused space left in the row. Adornments now use `flex: 0 0 auto`
71
+ (content-sized); `max-inline-size: 40%` remains as the actual cap for a genuinely oversized
72
+ adornment.
73
+ - f7de4a5: Fix the same `overflow-wrap: anywhere` mid-word-break defect already fixed across seven other
74
+ components (see the `overflow-wrap-anywhere-sibling-components` and `switch-label-break-word`
75
+ changesets) in `<lr-card>` too — a straggler that remediation pass missed. Both `[part="body"]`
76
+ and a slotted `[slot="header"]` collapsed their min-content contribution to near nothing while
77
+ sitting as a flex item next to a non-shrinking sibling, splitting an ordinary short word mid-
78
+ syllable instead of wrapping at the space before it. `overflow-wrap: break-word` gives the
79
+ identical last-resort rescue for a genuinely unbreakable long token without that regression.
80
+ - e57c135: Fix `<lr-chat-message>`'s `[part='actions']` pinning its footer actions to the inline end
81
+ regardless of `message-role`, detaching an assistant/system turn's copy/regenerate controls from
82
+ their own start-aligned (and often transparent-background) bubble. `[part='actions']` now scopes
83
+ its `margin-inline-start: auto` to `message-role="user"` and adds the mirrored
84
+ `margin-inline-end: auto` for `assistant`/`system`, matching the role-conditional alignment
85
+ `[part='bubble']` already uses. `actions-position="outside"` is unaffected for every role.
86
+ - f7de4a5: Fix `<lr-checkbox-group>` occasionally leaking a child `<lr-checkbox>`'s own raw `lr-change`
87
+ (`{checked, value}`-shaped detail) to an ancestor listener, ahead of the group's own translated
88
+ `lr-change` (`{value: string[]}`-shaped detail) — two events instead of one, the first the wrong
89
+ shape. `onChildEvent`'s `stopImmediatePropagation()` only protects a listener that runs *after* it;
90
+ the internal listener was registered on the default bubble phase in `connectedCallback()`, which
91
+ only outraces a consumer's *own* bubble-phase listener when that listener happens to be registered
92
+ later. A Lit `@lr-change=${...}` template binding — the common case — attaches its listener while
93
+ the element is still a disconnected fragment, before `connectedCallback` ever runs, so it saw the
94
+ unstopped child event first. The internal listener now runs in the capture phase instead, which
95
+ always completes before any bubble-phase listener on the same node fires, regardless of
96
+ registration order.
97
+ - 7d2ad99: Fix `<lr-dashboard-grid>`'s auto-created default `<lr-widget>` cell tripping the dev-mode
98
+ unknown-attribute diagnostic. The component marked its own library-created default cell with a
99
+ plain `cell-id` attribute — the same name used for the public, author-facing routing attribute a
100
+ consumer writes on their own light-DOM children (`<div cell-id="a">`), but `cell-id` isn't (and
101
+ shouldn't be) a real `<lr-widget>` property, since `lr-widget` is a general-purpose component with
102
+ no concept of dashboard-grid cells. The auto-created default cell now carries `data-cell-id`
103
+ instead — internal bookkeeping through the universally dev-mode-exempt `data-*` prefix, consistent
104
+ with the existing `data-dashboard-grid-default-cell` marker on the same element — while
105
+ author-authored content continues to use the public `cell-id` attribute unchanged.
106
+ - 7a03421: Add a dev-mode console warning when an `lr-*` element is connected with an attribute it doesn't
107
+ observe.
108
+
109
+ A typo'd or renamed attribute previously failed silently: the browser stores it inertly, the
110
+ component keeps rendering its default, and nothing signals the mismatch, in any environment. In
111
+ development only -- gated on Lit's own dev-mode signal (`globalThis.litIssuedWarnings`, already
112
+ populated whenever a consumer's bundler resolves `lit`'s `development` build, exactly as it
113
+ already does for Lit's own dev-mode warnings) -- each `lr-*` component now warns once per
114
+ `(tag, attribute-name)` for an attribute outside its observed set, with a did-you-mean suggestion
115
+ when a close match exists: `` `<lr-lite-chart>: unknown attribute 'hide-axis' — did you mean
116
+ 'without-value-axis'?` ``. Global HTML attributes (`class`, `id`, `style`, `hidden`, `slot`,
117
+ `part`, ...), `data-*`, and `aria-*` are always exempt. No production behavior change -- the
118
+ check is fully inert when Lit's own dev-mode signal isn't present.
119
+
120
+ Scoped to attributes only; an unrecognized `.property =` write is not detected (there is no safe
121
+ way to intercept it generically without either enumerating instance properties -- which floods
122
+ false positives against this codebase's extensive use of TypeScript's `private` keyword for
123
+ internal state -- or wrapping every instance in a Proxy, which cannot intercept parser-driven
124
+ custom-element upgrades).
125
+ - e57c135: Fix `<lr-heatmap>` silently substituting the built-in fallback ramp color whenever
126
+ `--lr-heatmap-scale-lo`/`-hi` (or a `colorSteps` entry) was set to a modern CSS color function --
127
+ `color-mix()`, `oklch()`, `lab()`, `color(display-p3 ...)`, etc. -- with no warning. `resolveRgb()`
128
+ previously re-parsed the canvas's `ctx.fillStyle` read-back as a string (hex or `rgb()`/`rgba()`
129
+ only), which neither recognizes the `color(srgb r g b [/ a])` form Chromium normalizes
130
+ `color-mix()` to, nor the literal `oklch()`/`lab()`/`color(display-p3 ...)` syntax canvas
131
+ round-trips as-is for those functions. It now falls back to reading the actual rendered pixel back
132
+ via `getImageData(0, 0, 1, 1)` -- the same idiom already used in `theme.ts`/`shiki-dark-theme.ts`/
133
+ `color-core.ts` -- resolving any CSS color syntax the canvas accepts instead of only the forms a
134
+ hand-written parser recognizes. A genuinely invalid color string is unaffected: it still triggers
135
+ `warnInvalidColor()` and falls back.
136
+ - 3a9ae9d: Fix `<lr-knowledge-graph-explorer>`'s composed legend starving the graph pane when `nodeTypes` is long.
137
+
138
+ The explorer's flex column gives `[part='graph']` `flex: 1 1 auto; min-block-size: 0` so it's the
139
+ one part designed to shrink, but `[part='legend']` had no size cap — browser-default flex-item
140
+ sizing floors it at its full content height, so a `nodeTypes` list long enough to exceed the
141
+ host's allocated height pushed 100% of the shrinkage onto the graph pane instead, silently
142
+ ignoring the documented `height` property. `[part='legend']` now caps at `var(--lr-size-12rem)`
143
+ and scrolls internally past that, matching the existing `[part='search-results']` pattern in the
144
+ same stylesheet.
145
+ - fa7b8a1: Fix `<lr-lightbox>`'s caption starving the stage when it's unusually long.
146
+
147
+ `[part='stage']` is `flex: 1 1 auto; min-block-size: 0` — the one part designed to shrink — but
148
+ `[part='caption']` had no size cap, so an unusually long caller-supplied caption could floor at
149
+ its full multi-line content height and squeeze the stage's allocation. `[part='caption']` now
150
+ caps at `var(--lr-size-8rem)` and scrolls internally past that. Same mechanism, same fix shape, as
151
+ `<lr-knowledge-graph-explorer>`'s composed-legend fix in this same release.
152
+ - 53ad948: Raise the optional `marked` peer dependency's lower bound to `^18.0.10` (was `^18.0.9`), picking
153
+ up an upstream patch release. Affects every Markdown-rendering component that declares `marked` as
154
+ an optional peer: `lr-agent-workspace`, `lr-dashboard-grid`, `lr-eval-run`, `lr-markdown`,
155
+ `lr-markdown-core`, `lr-message-parts`, `lr-notebook-viewer`, `lr-rag-answer`,
156
+ `lr-streaming-text`, and `lr-widget-renderer`.
157
+ - f7de4a5: Fix `<lr-multi-split>`'s `'floating'` collapse state requiring `!important` to override its
158
+ drawer's `position`/`inset-block`/`inset-inline-start`/`inset-inline-end`. All four were applied
159
+ as owned *inline* styles — always higher cascade priority than any external stylesheet rule,
160
+ regardless of specificity — even though their floating-state value is always the same fixed
161
+ literal (`absolute`, `0`), never per-render computed data. They're ordinary (overridable)
162
+ stylesheet rules now, keyed off the already-reflected `collapse` host attribute and the panel's
163
+ existing `data-collapse-state="floating"` marker, so a consumer's own CSS wins at normal
164
+ specificity. `flex`/`order`/`inline-size` are unaffected and stay inline: `inline-size` in
165
+ particular is intentionally live, mirroring the panel's own draggable `sizes` percentage so there's
166
+ no visual jump un-floating — a consumer wanting a different floating *width* should set `.sizes`
167
+ rather than override the stylesheet rule.
168
+ - 961987b: Document `<lr-multi-split>`'s 9.0.0 behavior change: leaving a non-floating collapse state now
169
+ actually clears `open`, a change that shipped without a changelog entry.
170
+
171
+ Before 8.2.3, the component reference already promised: "Leaving 'floating' while `open` is still
172
+ `true` also closes it, the same way `<lr-app-rail>` closes its mobile overlay when leaving
173
+ 'mobile' while open." 8.2.3's compiled class never implemented it — there was no assignment
174
+ clearing `open` anywhere in the collapse path; `this.open = false` appeared only as the property
175
+ initializer.
176
+
177
+ 9.0.0 implemented it, in `applyEffectiveCollapseTransition`: for any transition to a state other
178
+ than `'floating'`, `open` is now cleared. The direction of the fix was correct — the code now
179
+ matches what was always documented — but it shipped silently, and the reference read identically
180
+ in both versions since it described the intended behavior all along, giving no changelog signal
181
+ to grep for.
182
+
183
+ The ordering matters to any `lr-multi-split-collapse-change` handler that reads `open`: the clear
184
+ happens **after** the event fires, not before, so a listener reading `this.open` synchronously
185
+ inside its own handler still sees the pre-clear value.
186
+
187
+ This is the same omission class already retro-documented twice in 9.1.0 (the heatmap
188
+ flat-property-to-`data` collapse, and the tab group's removed `slot`/`label` child model).
189
+ - 22056b1: Fix the same `overflow-wrap: anywhere` mid-word-break defect just fixed in `<lr-switch>` (see the
190
+ sibling `switch-label-break-word` changeset) in six more components, found by auditing the rest of
191
+ the library for the same `overflow-wrap: anywhere` + `min-inline-size: 0` fingerprint on
192
+ natural-language text: `<lr-agent-eval-dashboard>` (heading and run-label text),
193
+ `<lr-realtime-session>` (status text), `<lr-spinner>` (the after-placement label),
194
+ `<lr-schema-viewer>` (name/description/issue text), `<lr-subagent-panel>` (label/task/model text),
195
+ and `<lr-callout>` (content/message text). Same root cause and fix in every case:
196
+ `overflow-wrap: break-word` gives the identical last-resort rescue for a genuinely unbreakable
197
+ long token without collapsing normal min-content sizing, so ordinary text now only wraps when it
198
+ truly cannot fit, and wraps at a word boundary when it does.
199
+ - efb4b9b: Fix `<lr-popover>` and `<lr-tooltip>` getting stuck visible and interactive after closing.
200
+
201
+ Both components drove their popup's `data-hidden` attribute through a Lit declarative template
202
+ binding *and* an imperative direct DOM write to the same attribute, keyed off a plain
203
+ non-reactive private field (`anchorPositioned`). The imperative write silently desynced Lit's own
204
+ dirty-check cache for that attribute part; because neither component's `updated()` lifecycle hook
205
+ repositions on close (only while `open`), a later close transition could evaluate the same
206
+ boolean expression to a value matching Lit's stale cache and skip the DOM write entirely — leaving
207
+ the popup visually and interactively present (`pointer-events: auto`) after every dismissal route
208
+ (trigger click, outside click, Escape, `.hide()`) once it had opened once. `anchorPositioned` is
209
+ now a real reactive `@state()` property in both classes, and the redundant imperative writes are
210
+ removed, making Lit's own render cycle the single source of truth for the attribute.
211
+ - 34c12fa: Harden `<lr-popup>` against the same imperative/declarative attribute-write desync just fixed in
212
+ `<lr-popover>`/`<lr-tooltip>`.
213
+
214
+ `<lr-popup>` shared the identical pattern (`anchorPositioned` as a plain non-reactive field, an
215
+ imperative `toggleAttribute` write alongside a declarative template binding for the same
216
+ `data-active`/`data-awaits-position` attributes) but never exhibited the observable bug, because
217
+ its `updated()` lifecycle hook unconditionally repositions on every update cycle regardless of
218
+ which property changed -- masking any stale-cache skip with a redundant imperative correction on
219
+ the same cycle. `anchorPositioned` is now a real reactive `@state()` property here too, removing
220
+ the fragile reliance on that masking behavior.
221
+ - 03fd04f: Fix `<lr-switch>`'s label/hint/error text breaking mid-syllable, and possibly wrapping, well
222
+ before it runs out of room.
223
+
224
+ The shared `[part="form-control"], [part="label"], [part~="hint"], [part="error"]` rule used
225
+ `overflow-wrap: anywhere`, which -- unlike `overflow-wrap: break-word` -- also collapses the
226
+ element's min-content contribution to essentially a single character. Combined with the same
227
+ rule's `min-inline-size: 0`, an ordinary short label could be squeezed far below its longest
228
+ word's width and forced to split it mid-syllable, even when there was ample room to sit on one
229
+ line or wrap cleanly at a space.
230
+
231
+ Switching to `overflow-wrap: break-word` alone regressed the pre-existing 320px unbreakable-token
232
+ test: without a width propagated down to it, `.switch-layout` (an `inline-flex` box with no
233
+ explicit size) falls back to shrink-to-fit sizing, which can never size narrower than its own
234
+ min-content -- and `break-word` (correctly) keeps that min-content at the token's full width, so
235
+ the layout overflowed its ancestor instead of shrinking into it. Adding `max-inline-size: 100%` to
236
+ both `:host` and `.switch-layout` propagates an ancestor's real constraint all the way down to the
237
+ flex layout, fixing the overflow. `min-inline-size: 0` was deliberately *not* added to either of
238
+ those two rules: leaving their automatic minimum size content-based means an outer flex/grid
239
+ ancestor (e.g. a settings-panel row with another sibling control) won't disproportionately squeeze
240
+ the switch below its longest word's width the way `overflow-wrap: anywhere`'s near-zero min-content
241
+ let it -- at the cost of the row overflowing slightly rather than breaking a word, which is the
242
+ tradeoff `break-word` intends.
243
+ - f7de4a5: Fix `<lr-thread-list>`'s exported `row-start`/`row-actions` parts sitting on the row's inline text
244
+ baseline (adding descender strut height above and below) instead of vertically centering their
245
+ `renderStart`/`renderActions` adornment content. Both parts are plain `<span>`s and default to
246
+ `display: inline`; they are now `display: inline-flex; align-items: center`, matching every other
247
+ adornment slot in the library. `row-content`/`row-meta`, which hold real text, are unaffected.
248
+
3
249
  ## 9.1.0
4
250
 
5
251
  ### Minor Changes
package/README.md CHANGED
@@ -897,6 +897,13 @@ Build tools can import the published manifest directly through its explicit pack
897
897
  import manifest from '@aceshooting/lyra-ui/custom-elements.json' with { type: 'json' };
898
898
  ```
899
899
 
900
+ A subclass declaration's `cssParts` is always fully flattened (everything inherited included), but
901
+ `attributes`/`members`/`events`/`slots`/`cssProperties` list only a declaration's own entries plus
902
+ any inherited entry it overrides — intentional, since a TypeScript/JS consumer already resolves the
903
+ rest through the generated `.d.ts` `extends` chain. Reading `custom-elements.json` directly for
904
+ those four kinds means walking each declaration's own `superclass` chain, or using the already-
905
+ resolved `web-types.json`/`vscode-html-data.json` above instead.
906
+
900
907
  ## Components
901
908
 
902
909
  The catalog below lists all 284 tags in the current Custom Elements Manifest, grouped by