@aceshooting/lyra-ui 23.0.0 → 24.0.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 (278) hide show
  1. package/CHANGELOG.md +9 -43
  2. package/README.md +72 -35
  3. package/custom-elements.json +1 -1
  4. package/design-tokens.json +1 -1
  5. package/dist/cli/lyra-rename-ledger.mjs +1 -1
  6. package/dist/cli/migration-contract.json +1 -1
  7. package/dist/cli/migration-contract.mjs +1 -1
  8. package/dist/cli/migration-renames.mjs +2 -2
  9. package/dist/cli/migration-transforms.mjs +2 -2
  10. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +1 -4
  11. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -3
  12. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +1 -4
  13. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +1 -1
  14. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.d.ts +1 -7
  15. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  16. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -1
  17. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +2 -5
  18. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -3
  19. package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -4
  20. package/dist/components/agent-tools/terminal/terminal.class.js +2 -2
  21. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +1 -7
  22. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  23. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +1 -4
  24. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -3
  25. package/dist/components/charts/chart/lite-chart-axis-layout.d.ts +13 -0
  26. package/dist/components/charts/chart/lite-chart-axis-layout.js +1 -0
  27. package/dist/components/charts/chart/lite-chart.class.d.ts +1 -11
  28. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  29. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +2 -2
  30. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +0 -1
  31. package/dist/components/conversation/chat-message/chat-message.class.d.ts +3 -9
  32. package/dist/components/conversation/chat-message/chat-message.class.js +1 -1
  33. package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
  34. package/dist/components/conversation/code-block/code-block-core.class.d.ts +6 -8
  35. package/dist/components/conversation/code-block/code-block-shared.d.ts +1 -4
  36. package/dist/components/conversation/code-block/code-block.class.d.ts +4 -6
  37. package/dist/components/conversation/markdown/markdown-base.class.d.ts +1 -3
  38. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  39. package/dist/components/conversation/markdown/markdown-core.class.d.ts +1 -4
  40. package/dist/components/conversation/markdown/markdown.class.d.ts +1 -4
  41. package/dist/components/conversation/message-actions/message-actions.class.d.ts +1 -4
  42. package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
  43. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +1 -4
  44. package/dist/components/conversation/message-feedback/message-feedback.class.js +2 -2
  45. package/dist/components/conversation/message-parts/message-parts.class.d.ts +2 -5
  46. package/dist/components/conversation/message-parts/message-parts.class.js +3 -3
  47. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +1 -1
  48. package/dist/components/conversation/streaming-text/streaming-text-core.class.d.ts +2 -0
  49. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +0 -1
  50. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +2 -0
  51. package/dist/components/conversation/streaming-text/streaming-text.class.js +0 -1
  52. package/dist/components/conversation/thread-list/thread-list.class.d.ts +6 -17
  53. package/dist/components/conversation/thread-list/thread-list.class.js +6 -6
  54. package/dist/components/data/context-meter/context-meter.class.d.ts +1 -6
  55. package/dist/components/data/context-meter/context-meter.class.js +1 -1
  56. package/dist/components/data/data-grid/data-grid.class.d.ts +0 -1
  57. package/dist/components/data/data-grid/data-grid.class.js +2 -2
  58. package/dist/components/data/document-library/document-library.class.d.ts +6 -13
  59. package/dist/components/data/document-library/document-library.class.js +1 -2
  60. package/dist/components/data/heatmap/heatmap-grid-navigation.d.ts +7 -0
  61. package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -0
  62. package/dist/components/data/heatmap/heatmap.class.d.ts +3 -23
  63. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  64. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +3 -9
  65. package/dist/components/data/sequence-strip/sequence-strip.class.js +3 -3
  66. package/dist/components/data/table/table.class.d.ts +5 -14
  67. package/dist/components/data/table/table.class.js +6 -6
  68. package/dist/components/forms/button/button.class.d.ts +2 -2
  69. package/dist/components/forms/button/button.class.js +9 -9
  70. package/dist/components/forms/combobox/combobox.class.d.ts +1 -4
  71. package/dist/components/forms/combobox/combobox.class.js +2 -2
  72. package/dist/components/forms/input/time-input.class.d.ts +1 -1
  73. package/dist/components/forms/input/time-input.class.js +1 -1
  74. package/dist/components/forms/select/select.class.d.ts +1 -2
  75. package/dist/components/layout/app-rail/app-rail-item.class.d.ts +3 -6
  76. package/dist/components/layout/app-rail/app-rail-item.class.js +1 -1
  77. package/dist/components/layout/app-rail/app-rail.class.d.ts +2 -4
  78. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  79. package/dist/components/layout/app-rail-group/app-rail-group.class.d.ts +2 -6
  80. package/dist/components/layout/app-rail-group/app-rail-group.class.js +1 -1
  81. package/dist/components/layout/carousel/carousel.class.d.ts +1 -4
  82. package/dist/components/layout/carousel/carousel.class.js +2 -2
  83. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  84. package/dist/components/layout/details/details.class.d.ts +2 -4
  85. package/dist/components/layout/details/details.class.js +1 -1
  86. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +3 -7
  87. package/dist/components/layout/dock-panel/dock-panel.class.js +1 -1
  88. package/dist/components/layout/menu/menu.class.js +1 -1
  89. package/dist/components/layout/multi-split/multi-split.class.d.ts +2 -4
  90. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  91. package/dist/components/layout/navigation-menu-item/navigation-menu-item.class.d.ts +2 -4
  92. package/dist/components/layout/navigation-menu-item/navigation-menu-item.class.js +1 -1
  93. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +1 -4
  94. package/dist/components/layout/reorder-list/reorder-item.class.js +2 -2
  95. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts +5 -9
  96. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +5 -5
  97. package/dist/components/media/av-player/av-player.class.js +3 -3
  98. package/dist/components/media/file-input/file-input.class.d.ts +3 -6
  99. package/dist/components/media/file-input/file-input.class.js +3 -3
  100. package/dist/components/media/lightbox/lightbox.class.d.ts +11 -20
  101. package/dist/components/media/lightbox/lightbox.class.js +1 -1
  102. package/dist/components/media/map/map-data-layers.d.ts +20 -0
  103. package/dist/components/media/map/map-data-layers.js +1 -0
  104. package/dist/components/media/map/map.class.js +3 -3
  105. package/dist/components/media/media-time.d.ts +2 -0
  106. package/dist/components/media/media-time.js +1 -0
  107. package/dist/components/media/video/video.class.js +5 -5
  108. package/dist/components/media/video-playlist/video-playlist.class.js +2 -2
  109. package/dist/components/overlays/callout/callout.class.d.ts +2 -5
  110. package/dist/components/overlays/callout/callout.class.js +2 -2
  111. package/dist/components/overlays/dialog/dialog.class.d.ts +4 -7
  112. package/dist/components/overlays/dialog/dialog.class.js +2 -2
  113. package/dist/components/overlays/overlay/dropdown.class.d.ts +5 -10
  114. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  115. package/dist/components/overlays/overlay/popover.class.d.ts +2 -3
  116. package/dist/components/overlays/popup/popup.class.js +1 -1
  117. package/dist/components/overlays/progress/progress-bar.class.d.ts +1 -4
  118. package/dist/components/overlays/progress/progress-bar.class.js +2 -2
  119. package/dist/components/overlays/progress/progress-ring.class.d.ts +1 -4
  120. package/dist/components/overlays/progress/progress-ring.class.js +2 -2
  121. package/dist/components/overlays/progress/progress-shared.d.ts +3 -3
  122. package/dist/components/overlays/progress/progress-shared.js +1 -1
  123. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  124. package/dist/components/retrieval/graph/graph.class.d.ts +5 -10
  125. package/dist/components/retrieval/graph/graph.class.js +1 -1
  126. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +7 -14
  127. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +2 -3
  128. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +2 -8
  129. package/dist/components/retrieval/memory-panel/memory-panel.class.js +0 -4
  130. package/dist/components/retrieval/rag-answer/rag-answer.class.js +1 -1
  131. package/dist/components/utility/export-button/export-button.class.d.ts +6 -10
  132. package/dist/components/utility/export-button/export-button.class.js +1 -1
  133. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  134. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +1 -1
  135. package/dist/components/viewers/highlight-layer/highlight-layer-timing.js +1 -1
  136. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  137. package/dist/events.d.ts +17 -78
  138. package/dist/framework-types.d.ts +1 -1
  139. package/dist/internal/catalog-picker.js +1 -1
  140. package/dist/internal/css-motion-time.d.ts +7 -0
  141. package/dist/internal/css-motion-time.js +1 -0
  142. package/dist/internal/data-state-renderer.d.ts +1 -3
  143. package/dist/internal/data-state-renderer.js +1 -1
  144. package/dist/internal/localization-runtime.d.ts +2 -0
  145. package/dist/internal/localization-runtime.js +1 -1
  146. package/dist/internal/lyra-element.js +2 -2
  147. package/dist/internal/package-metadata.d.ts +1 -1
  148. package/dist/internal/package-metadata.js +1 -1
  149. package/dist/looks/data.css +1 -1
  150. package/dist/looks/terminal.css +1 -1
  151. package/dist/lyra.d.ts +1 -592
  152. package/dist/lyra.js +1 -1
  153. package/dist/testing/event-factory.d.ts +2 -2
  154. package/dist/testing/interaction-drivers.d.ts +5 -3
  155. package/dist/testing/lyra-tag-event-map.js +1 -1
  156. package/dist/theme/looks/data.d.ts +1 -1
  157. package/dist/theme/looks/data.js +1 -1
  158. package/dist/theme/looks/terminal.d.ts +1 -1
  159. package/dist/theme/looks/terminal.js +1 -1
  160. package/dist/theme/theme.d.ts +2 -80
  161. package/dist/theme/theme.js +1 -1
  162. package/llms/components/lr-agent-workspace.md +1 -1
  163. package/llms/components/lr-alert.md +1 -1
  164. package/llms/components/lr-animation.md +1 -1
  165. package/llms/components/lr-app-rail.md +8 -10
  166. package/llms/components/lr-approval-queue.md +2 -4
  167. package/llms/components/lr-attachment-trigger.md +3 -4
  168. package/llms/components/lr-badge.md +2 -2
  169. package/llms/components/lr-button.md +45 -99
  170. package/llms/components/lr-callout.md +3 -4
  171. package/llms/components/lr-carousel.md +3 -5
  172. package/llms/components/lr-chat-message.md +1 -2
  173. package/llms/components/lr-claim-evidence.md +1 -1
  174. package/llms/components/lr-code-block-core.md +2 -2
  175. package/llms/components/lr-code-block.md +5 -6
  176. package/llms/components/lr-color-picker.md +1 -1
  177. package/llms/components/lr-combobox.md +5 -6
  178. package/llms/components/lr-compare-panel.md +2 -4
  179. package/llms/components/lr-confirm-bar.md +3 -7
  180. package/llms/components/lr-context-inspector.md +3 -2
  181. package/llms/components/lr-context-menu.md +2 -2
  182. package/llms/components/lr-context-meter.md +2 -4
  183. package/llms/components/lr-copy-button.md +1 -1
  184. package/llms/components/lr-data-grid.md +4 -7
  185. package/llms/components/lr-details.md +3 -3
  186. package/llms/components/lr-dialog.md +4 -6
  187. package/llms/components/lr-dock-panel.md +5 -6
  188. package/llms/components/lr-document-library.md +5 -7
  189. package/llms/components/lr-drawer.md +3 -3
  190. package/llms/components/lr-dropdown.md +4 -5
  191. package/llms/components/lr-eval-run.md +3 -5
  192. package/llms/components/lr-export-button.md +4 -7
  193. package/llms/components/lr-file-input.md +0 -5
  194. package/llms/components/lr-funnel.md +1 -1
  195. package/llms/components/lr-graph.md +3 -7
  196. package/llms/components/lr-icon.md +1 -1
  197. package/llms/components/lr-include.md +1 -1
  198. package/llms/components/lr-input.md +31 -79
  199. package/llms/components/lr-json-viewer.md +1 -1
  200. package/llms/components/lr-knowledge-base.md +4 -6
  201. package/llms/components/lr-knowledge-graph-explorer.md +2 -5
  202. package/llms/components/lr-known-date.md +1 -1
  203. package/llms/components/lr-lightbox.md +9 -7
  204. package/llms/components/lr-lite-chart.md +1 -5
  205. package/llms/components/lr-markdown-core.md +3 -4
  206. package/llms/components/lr-markdown.md +3 -5
  207. package/llms/components/lr-mcp-app.md +1 -1
  208. package/llms/components/lr-message-actions.md +2 -3
  209. package/llms/components/lr-message-feedback.md +1 -3
  210. package/llms/components/lr-message-parts.md +4 -5
  211. package/llms/components/lr-multi-split.md +8 -7
  212. package/llms/components/lr-native-time-input.md +1 -1
  213. package/llms/components/lr-navigation-menu.md +5 -5
  214. package/llms/components/lr-number-input.md +3 -1
  215. package/llms/components/lr-otp-input.md +2 -0
  216. package/llms/components/lr-page.md +1 -1
  217. package/llms/components/lr-pan-zoom.md +1 -1
  218. package/llms/components/lr-phone-input.md +3 -1
  219. package/llms/components/lr-popover.md +2 -2
  220. package/llms/components/lr-progress-bar.md +3 -5
  221. package/llms/components/lr-progress-ring.md +5 -7
  222. package/llms/components/lr-prompt-input.md +1 -1
  223. package/llms/components/lr-prompt-queue.md +1 -1
  224. package/llms/components/lr-prompt-studio.md +1 -1
  225. package/llms/components/lr-rag-eval-dashboard.md +1 -1
  226. package/llms/components/lr-rating.md +2 -2
  227. package/llms/components/lr-realtime-session.md +1 -1
  228. package/llms/components/lr-reorder-item.md +1 -1
  229. package/llms/components/lr-reorder-list.md +2 -3
  230. package/llms/components/lr-retrieval-compare.md +1 -1
  231. package/llms/components/lr-select.md +3 -1
  232. package/llms/components/lr-selection-toolbar.md +1 -1
  233. package/llms/components/lr-sequence-strip.md +3 -8
  234. package/llms/components/lr-span-waterfall.md +1 -1
  235. package/llms/components/lr-split-panel.md +1 -1
  236. package/llms/components/lr-streaming-text-core.md +2 -1
  237. package/llms/components/lr-streaming-text.md +3 -2
  238. package/llms/components/lr-subagent-panel.md +1 -1
  239. package/llms/components/lr-swatch-picker.md +4 -4
  240. package/llms/components/lr-switch.md +3 -1
  241. package/llms/components/lr-table.md +33 -85
  242. package/llms/components/lr-terminal.md +2 -5
  243. package/llms/components/lr-textarea.md +1 -1
  244. package/llms/components/lr-thread-list.md +8 -14
  245. package/llms/components/lr-time-input.md +1 -1
  246. package/llms/components/lr-toggle-group.md +2 -2
  247. package/llms/components/lr-toggle.md +1 -1
  248. package/llms/components/lr-tool-approval-dialog.md +4 -7
  249. package/llms/components/lr-tool-call-block.md +1 -1
  250. package/llms/components/lr-tool-timeline.md +2 -5
  251. package/llms/components/lr-video-playlist.md +1 -1
  252. package/llms/components/lr-video.md +1 -1
  253. package/llms/components/lr-widget-renderer.md +7 -6
  254. package/llms/components/lr-zoomable-frame.md +1 -1
  255. package/llms/index.md +3 -618
  256. package/llms/migration.md +614 -614
  257. package/llms/shared/events-and-types.md +25 -24
  258. package/llms/shared/frameworks-and-ssr.md +7 -3
  259. package/llms/shared/imports-and-registration.md +22 -22
  260. package/llms/shared/localization-and-rtl.md +2 -2
  261. package/llms/shared/native-styles-and-utilities.md +263 -0
  262. package/llms/shared/styles-and-tokens.md +85 -676
  263. package/llms/shared/testing-and-utilities.md +12 -11
  264. package/llms/shared/v23-to-v24-migration.md +167 -0
  265. package/llms/shared.md +142 -487
  266. package/llms/tokens.md +3 -3
  267. package/llms.txt +9 -4
  268. package/package.json +7 -311
  269. package/registrations.json +1 -1
  270. package/vscode-html-data.json +1 -1
  271. package/web-types.json +1 -1
  272. package/dist/ssr-loader.d.ts +0 -2
  273. package/dist/ssr-loader.js +0 -1
  274. package/dist/theme/presets/shadcn.d.ts +0 -22
  275. package/dist/theme/presets/shadcn.js +0 -1
  276. package/dist/theme/presets.d.ts +0 -49
  277. package/dist/theme/presets.js +0 -1
  278. package/dist/themes/shadcn.css +0 -1
package/CHANGELOG.md CHANGED
@@ -1,57 +1,23 @@
1
1
  # Changelog
2
2
 
3
- ## 23.0.0
3
+ ## 24.0.0
4
4
 
5
5
  ### Major Changes
6
6
 
7
- - f9415f2: The Storybook gallery adds a theme builder for previewing and customizing looks, with validated JSON import and export, reset controls, contrast diagnostics, and options for typography, motion, shape, elevation, and palettes. Three optional looks—data, terminal, and high contrast—join the existing choices without changing Lyra's default appearance or coupling look selection to density, contrast, mode, accent, or motion preferences.
7
+ - aa25ee4: Remove the eligible v22 compatibility APIs after their supported v23 transition period. Use granular component registration and class imports, the independent style APIs, and the `lyra-v21` and `lyra-v22` migration profiles when upgrading. Upstream-mirrored aliases and saved style-preference readers remain supported.
8
8
 
9
- This major removes v21 compatibility aliases, entry points, and types whose published migration notices permit removal. The `lyra-v21` and `lyra-v22` migration profiles remain available for consumers upgrading across versions; exact aliases are rewritten, while semantic or ambiguous changes still require review. The `lr-geojson-view` element tag, its registration and event-map alias, and its direct compatibility package routes are removed. The deprecated `LyraGeojsonView` remains available through the root and viewers family exports as a distinct class through v23; removing the old tag does not remove this class.
9
+ Consolidate component implementations and behavioral tests, refresh library documentation, and qualify styling, localization, package costs and representative compositions for the new release.
10
10
 
11
- Compatibility APIs first deprecated in v22 remain available throughout v23 and are not eligible for removal before v24. Upstream-mirrored APIs remain available while their upstreams publish them.
11
+ Data grids resolve themed row heights once per measurement pass, reducing repeated layout work for large and expanded tree views while preserving live theme changes.
12
12
 
13
- Replace the removed `utilities/localization.js` import with `localization.js`. Replace `LyraGraphLink` with `LyraGraphEdge`, and the document registry types `DocumentFile` and `DocumentRendererDefinition` with `LyraDocumentFile` and `LyraDocumentRendererDefinition`. The [migration reference](./llms/migration.md) covers retired properties, events, parts and CSS aliases, including cases that require manual review.
13
+ Clearing a component's locale override now observes the inherited locale even when the public locale resolver was called before its next render. Time inputs reuse the active locale's native-digit map across keystrokes while continuing to accept ASCII digits. Media controls share locale-aware time formatting, and animation timing uses a shared CSS time parser; the AV player retains its whole-second rounding behavior.
14
14
 
15
- The deprecated `accessible-label` attribute is removed from attachment-trigger, callout, carousel, dialog, drawer, file-input, lite-chart, progress-bar, progress-ring and reorder-item. Use the native host `aria-label`; their programmatic `accessibleLabel` properties remain available through v23. Table and sequence-strip retain both forms through v23.
15
+ Map data layers skip unused fallback color resolution when explicit colors are valid. Command palettes project visible result rows plus the active row without filtering every group, and Lite Chart reuses the category-label width it already measured for automatic axis selection. These changes preserve the existing rendered and interaction contracts; no latency claim is implied.
16
16
 
17
- `LyraNativeTimeInput` now shares input behavior without extending `LyraInput`, so use its own class for typed references and `instanceof` checks. Its deprecated `noSpinButtons` property is removed. `LyraNumberInput` still extends `LyraInput`; both retain the mirrored `noSpinButtons` contract alongside `withoutSpinButtons`.
17
+ Lite Chart no longer reads the retired `accessibleLabel` property as a fallback. Streaming text documents and types its existing internal-link event, while RAG answers contain their owned markdown child's link events. Buttons share identical slot and focus handlers, and locale resolution shares one cache record per component.
18
18
 
19
- The Swiss German catalog now reuses German messages where their resolved content is identical and retains Swiss-specific wording overrides. Locale loading and resolution behavior are unchanged.
19
+ The package README, migration guides and agent skill now route to focused v24 import, styling, SSR and event-detail guidance. Historical roadmap scope remains available through stable anchors and focused pages.
20
20
 
21
- Unsized details panels now follow their content without expanding to include siblings in auto-sized grid rows. Long content still scrolls within a definite containing block. Short content no longer automatically fills an ordinary bounded block parent; set `block-size: 100%` on the component when that fill is wanted, or give it a grid or flex allocation.
22
-
23
- Unsized `lr-textarea`, `lr-code-block`, `lr-code-block-core`, and `lr-code-editor` now follow their content instead of filling a definite-height ancestor automatically. Set `block-size: 100%` on the component where full-height filling is intended. Auto-growing textareas keep overflowing content scrollable when an explicit allocation is smaller than their content or shrinks later.
24
-
25
- Cancelled agent-run steps now appear as neutral incomplete steps in the default task list, with a polite incomplete announcement instead of an error indication and a failed-step announcement.
26
-
27
- ### Minor Changes
28
-
29
- - Poll status adds an optional `with-refresh` action and a built-in `refresh` icon. Manual refresh emits `lr-poll-due` with `{ manual: true }` and restarts the configured delay; paused polling stays paused. Automatic polling keeps its existing event payload.
30
- - Tooltip, select, combobox, locale-picker, navigation-menu and app-rail-item add an opt-in `top-layer` mode for popups that must appear above sibling stacking contexts. App-rail forwards this choice to its item tooltips, and navigation-menu forwards it to its item panels.
31
- - Random-content adds an optional `with-next` action, the `next-button` part, and a public `restart()` method. The localized “Show another” action advances the content and restarts active autoplay without bypassing pause, focus, or reduced-motion preferences.
32
- - Trace spans, task-list steps and research-progress steps support an `incomplete` status for work stopped without success or failure. Research-progress preserves steps with unknown statuses as pending.
33
- - Knowledge-graph-explorer exposes `fit()`, `resetView()` and `focusNode()` so consumers can frame its graph without reaching into its shadow root.
34
-
35
- ### Patch Changes
36
-
37
- - Modal dialogs and related modal surfaces remain interactive when opened above a native `dialog.showModal()`, preserving close vetoes, Escape handling and focus return. Toast helpers and announcements follow the active modal context, including components without a default slot.
38
- - Tool approval, result and selection dialogs apply the host's `aria-label` to the element that owns the dialog role, ahead of their generated heading labels.
39
- - Virtual lists remeasure rendered rows after their key callback or indexed source changes, and group markers after their labels change, even when their DOM boxes keep the same size. This prevents estimated heights from replacing measured heights and overlapping rows or group headers.
40
- - Navigation-menu indicators stay aligned with the open trigger when a sibling item resizes, in both left-to-right and right-to-left layouts.
41
- - Popup positioning resolves containing blocks across shadow roots and ignores ineffective transform and containment declarations on inline ancestors. Dropdowns and checkbox filter menus inside dialogs stay anchored to their triggers without introducing horizontal dialog scrolling, including right-to-left layouts.
42
- - Model and voice picker listboxes honor the inherited `--lr-positioning-strategy` override, while retaining fixed positioning when no recognized override is set.
43
- - Migration diagnostics recognize browser-supported HTML comment endings, keeping following markup and migration review acknowledgements visible to the scanner.
44
- - Map legends reserve a stable scrollbar gutter to prevent transparent compositor artifacts over the canvas. Icon legend entries omit the color-swatch border in normal and forced-colors modes while retaining their glyph cue.
45
- - Details headers hide empty action wrappers from layout, allowing the summary to span the full header. Populated actions keep their responsive layout.
46
- - Agent-workspace headers omit empty action wrappers so narrow layouts do not reserve a blank row.
47
- - Tours align the scrim, spotlight and interactive target opening under transformed or contained ancestors, and preserve caller-owned inline positioning when the tour closes.
48
- - Tours, command palettes, lightboxes and tool approval, result and selection dialogs return focus when an opener becomes visible after close. Chat-message preserves focus when a failure action clears its state inside a consumer shadow root.
49
- - Callout, empty-state and toast announcements observe text rendered later inside slotted custom elements, including elements defined after insertion. Spinner, chip, tag, card, widget and progress labels also follow changes inside slotted shadow roots.
50
- - Carousel autoplay stays paused while a slide's dropdown or other tracked overlay is open, including when focus moves into its top-layer popup.
51
- - Charts preserve a user's zoom across data and locale updates. GeoJSON viewers frame data through the map's size-aware, padded, antimeridian-safe `fitBounds()` API.
52
- - Calendar heatmap month labels and span-waterfall axis labels avoid overlap and clipping, including right-to-left layouts.
53
- - Menu-item details and suffix hints, and command-palette shortcuts, retain their space beside overflowing labels or descriptions.
54
- - Icon-only toggles preserve glyph glows when accompanying text is visually hidden, including when visibility changes after mounting. Buttons and toggles share icon-only content detection.
55
- - Slider readouts, thumb tooltips and range endpoints, and stat values and breakdown values, preserve formatted numeric reading order in right-to-left layouts.
21
+ Event-detail migration diagnostics distinguish payload fields from component properties, avoiding conflicting advice for `lr-app-rail-group` listeners. The retained migration profiles continue to report manual changes for consumers upgrading across multiple major versions.
56
22
 
57
23
  Older major versions: [release history archive](https://github.com/aceshooting/lyra-ui/tree/main/docs/changelog).
package/README.md CHANGED
@@ -29,7 +29,7 @@ library for accessible forms, dashboards, charts, data visualization, and AI cha
29
29
  Built with [Lit](https://lit.dev), it works with Lit, React, Vue, Angular, Svelte, and plain JavaScript.
30
30
  It is a practical open-source alternative to [Shoelace](https://shoelace.style/) and
31
31
  [Web Awesome](https://webawesome.com/), with 303 custom elements, native custom-element APIs,
32
- tree-shakeable imports, its own `--lr-*` design tokens, built-in localization and RTL support,
32
+ tree-shakeable, granular per-component imports, its own `--lr-*` design tokens, built-in localization and RTL support,
33
33
  and no runtime dependency on either project.
34
34
 
35
35
  > **Independent implementation.** Lyra is not affiliated with, endorsed by, or a fork or rebrand of
@@ -55,6 +55,10 @@ and no runtime dependency on either project.
55
55
  | Languages | 66 optional complete message catalogs plus built-in English. The [`locales.json` manifest](./locales.json) lists canonical tags, authored source spellings, import paths and structural coverage. Import a [whole catalog](./llms/shared.md#ready-made-catalogs-aceshootinglyra-uitranslationslocalejs) (`@aceshooting/lyra-ui/translations/<locale>.js`) or only the [family slices](./llms/shared.md#smaller-catalogs-aceshootinglyra-uitranslationslocalefamilyjs) the application renders. |
56
56
  | Typography | [Typography utilities](./llms/shared.md#typography) apply a shared scale and reading styles to native content alongside custom elements. |
57
57
 
58
+ The [release roadmap](../../docs/roadmap.md#roadmap-index-and-release-status) tracks v24 styling,
59
+ localization, cleanup and qualification work, then the separate website and consumer rollout after
60
+ v24 publication.
61
+
58
62
  Choose the original Lyra look by loading `theme.css`. To select shadcn through the runtime:
59
63
 
60
64
  ```js
@@ -85,6 +89,27 @@ Cancelled agent-run steps now appear as neutral incomplete steps in the default
85
89
  a polite incomplete announcement instead of a failed-step announcement. The run itself keeps its
86
90
  cancelled status and retry behavior.
87
91
 
92
+ ## Upgrading to v24
93
+
94
+ V24 removes eligible v22 compatibility APIs while retaining component tags and the eight mirrored
95
+ upstream spellings. Import constructors from their registration-free family `.class.js` paths and
96
+ register tags through `components/lr-<tag>.js`; the duplicate nested registration routes and
97
+ `ssr-loader.js` are removed. For browser hydration import `hydration.js` before Lit, then chosen
98
+ registrations. Server rendering uses `ssr.js` and, when needed, `ssr/all.js`; see the
99
+ [SSR examples](#ssr--declarative-shadow-dom).
100
+
101
+ The old theme and preset facade, `data-lr-theme-preset`, and fixed `themes/shadcn.css` are also
102
+ removed. Use `setLyraStyle()` from `theme.js` with independent look, surface, density, mode and
103
+ accent choices. Theme calls and saved data need semantic review: the former `surface` color maps to
104
+ `accentBackground`, while the new `surface` selects a treatment. Saved v1 preferences remain
105
+ readable. The [style guide](./llms/shared/styles-and-tokens.md#composing-looks-surfaces-and-density)
106
+ documents the current API.
107
+
108
+ Run the installed, version-matched CLI with `--origin=lyra-v22` and review its report. The
109
+ [v23-to-v24 migration guide](./llms/shared/v23-to-v24-migration.md) gives the project sequence,
110
+ import and SSR replacements, theme semantics, event-detail changes and historical profile rules.
111
+ The generated [`llms/migration.md`](./llms/migration.md) has per-component `wa-*`/`sl-*` mappings.
112
+
88
113
  ## Install
89
114
 
90
115
  ```bash
@@ -125,16 +150,17 @@ setup.
125
150
 
126
151
  ## Usage
127
152
 
128
- Import just what you use (tree-shakeable, granular entry points):
153
+ Register components from tree-shakeable, granular per-component entry points:
129
154
 
130
155
  ```js
131
156
  import "@aceshooting/lyra-ui/components/lr-combobox.js";
132
157
  import "@aceshooting/lyra-ui/components/lr-option.js";
133
158
  ```
134
159
 
135
- The tag-shaped path is stable even if Lyra later reorganizes its internal family folders. Existing
136
- family-shaped paths remain supported, but new application code should prefer
137
- `components/<tag>.js`.
160
+ The tag-shaped path is stable even if Lyra later reorganizes its internal family folders. Family
161
+ barrel paths remain supported, while tag-shaped paths are the canonical per-component registration
162
+ imports. Nested per-component registration routes have been retired; use the stable tag path or the
163
+ registration-free family `.class.js` route.
138
164
 
139
165
  Application-shell and media components have the same granular shape:
140
166
 
@@ -187,8 +213,9 @@ import "@aceshooting/lyra-ui/all.js";
187
213
  ```
188
214
 
189
215
  > **Registration is explicit.** The package root is a side-effect-free export surface for
190
- > classes, helpers, and types; importing it does not define custom elements. Import each component's
191
- > registration entry, a family entry, or `@aceshooting/lyra-ui/all.js` for bulk registration.
216
+ > library helpers and types; it does not export component classes or define custom elements.
217
+ > Import a registration-free class from its tag's family path when subclassing, or import a
218
+ > component registration entry, family entry, or `@aceshooting/lyra-ui/all.js` to define tags.
192
219
  > An unregistered tag remains inert even when the import and build succeed.
193
220
 
194
221
  `all.js` registers 288 tags — every component **except** the 15 inventory-designated
@@ -306,14 +333,14 @@ toast({ message: "Saved", variant: "success" });
306
333
  ## For AI agents / LLMs
307
334
 
308
335
  **Using this library from a consuming project?** The package ships a reference written for coding
309
- assistants, split so a lookup costs a few hundred tokens instead of the whole catalog:
336
+ assistants, split by component and topic so a lookup can skip unrelated parts of the catalog:
310
337
 
311
338
  | Need | Read |
312
339
  | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
313
340
  | Which component to use, and its import path | [`llms/index.md`](./llms/index.md) |
314
341
  | One component's full API | `llms/components/<tag>.md` — path derived from the tag, no search needed |
315
- | Library-wide behavior (imports, events, forms, theming, i18n, TypeScript, frameworks, SSR, AI types) | [`llms/shared.md`](./llms/shared.md) |
316
- | One shared-guide topic (imports, forms, styles, localization, frameworks, AI, or testing) | `llms/shared/<topic>.md` — linked from [`llms.txt`](./llms.txt) |
342
+ | One shared-guide topic (imports, v23-to-v24 migration, forms, styles, localization, frameworks, AI, or testing) | `llms/shared/<topic>.md` — linked from [`llms.txt`](./llms.txt) |
343
+ | Combined shared reference for tools requiring one document | [`llms/shared.md`](./llms/shared.md) |
317
344
  | Design tokens | [`llms/tokens.md`](./llms/tokens.md) |
318
345
  | Which optional peer a component needs | [`llms/peers.md`](./llms/peers.md) |
319
346
  | `wa-*`/`sl-*` migration classifications and safe codemod rules | [`llms/migration.md`](./llms/migration.md) |
@@ -490,17 +517,25 @@ matching `data-lr-theme` attribute) on an ancestor:
490
517
  ring. It layers over `theme.css` whatever the load order, also answers to shadcn's `.dark`/`.light`
491
518
  classes, and keeps gemstone accents working. A few values deliberately differ from shadcn to keep
492
519
  WCAG contrast (control borders, focus colour, danger red, chart colours); see
493
- [The shadcn look](./llms/shared.md#the-shadcn-look--themesshadcncss).
520
+ [The shadcn look](./llms/shared.md#the-shadcn-look--looksshadcncss).
494
521
 
495
522
  ```css
496
523
  @import "@aceshooting/lyra-ui/theme.css";
497
- @import "@aceshooting/lyra-ui/themes/shadcn.css";
524
+ @import "@aceshooting/lyra-ui/looks/shadcn.css";
525
+ @import "@aceshooting/lyra-ui/accents.css";
498
526
  ```
499
527
 
500
- The same look also ships as a runtime preset, `@aceshooting/lyra-ui/theme/presets/shadcn.js`
501
- (`applyLyraThemePreset(LYRA_SHADCN_THEME_PRESET)`), which persists, is restored before first paint
502
- by the no-flash bootstrap, and is written inline, so it beats unlayered `:root` overrides like the
503
- accent does; see [Theme presets](./llms/shared.md#theme-modeaccentsurface-runtime-aceshootinglyra-uithemejs).
528
+ Select the same look through the canonical style API after importing its stylesheet:
529
+
530
+ ```js
531
+ import { setLyraStyle } from '@aceshooting/lyra-ui/theme.js';
532
+
533
+ setLyraStyle({ look: 'shadcn', mode: 'system', accent: 'sapphire' });
534
+ ```
535
+
536
+ The style API persists the independent look, surface, density, mode and accent choices. See the
537
+ [style API guide](./llms/shared/styles-and-tokens.md#composing-looks-surfaces-and-density) for
538
+ scoped styling, reset and saved-preference behavior.
504
539
 
505
540
  Tooling can consume the canonical DTCG interchange document from
506
541
  `@aceshooting/lyra-ui/design-tokens.json`. The generated
@@ -536,7 +571,7 @@ Applications can override any `--lr-theme-*` input directly:
536
571
  `theme.css` declares `@layer lr-base, lr-theme, lr-theme-preset, lr-utilities, lr-overrides` and
537
572
  puts its own tokens in `lr-theme`, so an _unlayered_ rule of yours — like the `:root` block above —
538
573
  wins over every Lyra declaration regardless of specificity or which stylesheet the bundler emitted
539
- first. The optional `themes/shadcn.css` preset uses `lr-theme-preset`, and the optional `native.css`
574
+ first. The optional `looks/shadcn.css` stylesheet uses `lr-theme-preset`, and the optional `native.css`
540
575
  and `utilities.css` assets use `lr-base` and `lr-utilities`; `lr-overrides` remains available for
541
576
  application rules. If you declare Lyra's layer order yourself, name all five. See [`llms/tokens.md`](./llms/tokens.md) for the complete shared token list.
542
577
  Component-specific `--lr-*` custom properties remain available for local overrides.
@@ -596,9 +631,8 @@ setLyraLocale("fr"); // or just set <html lang="fr">/an ancestor `lang` — comp
596
631
  The dedicated `localization.js` entry is side-effect-free: it does not register the component
597
632
  graph. The package root continues to re-export the same runtime for compatibility, but importing
598
633
  the root remains registration-free. The same entry also carries `bridgeLyraLocale()`,
599
- `subscribeLyraLocale()` and `resolveLyraScopedString()`. Their former
600
- `@aceshooting/lyra-ui/utilities/localization.js` entry point was removed in 23.0.0;
601
- use the canonical `localization.js` route.
634
+ `subscribeLyraLocale()` and `resolveLyraScopedString()`. Their former utility-scoped entry point was
635
+ removed in 23.0.0; use the canonical `localization.js` route.
602
636
 
603
637
  ```html
604
638
  <!-- Per-instance: override specific keys on one element without a global registry. -->
@@ -638,13 +672,9 @@ remains available for the complete M+1 line and cannot be removed before M+2. Se
638
672
 
639
673
  ## SSR & Declarative Shadow DOM
640
674
 
641
- Every Lyra entry point is server-safe under Node 22+ — the package root, `all.js`, the family
642
- barrels, and every granular registration module alike. The `@aceshooting/lyra-ui/ssr-loader.js`
643
- entry installs Lit's hydration hook before registering Lyra (it still pulls the whole `all.js`
644
- closure independently of the package root) and exports the machine-readable
645
- `LYRA_SSR_SUPPORT_MATRIX`. New integrations that want granular registration can import
646
- `@aceshooting/lyra-ui/hydration.js` first instead, then their own component modules. The matrix has
647
- two explicit tiers:
675
+ Lyra's package root, `all.js`, family entries and granular registration modules are server-safe
676
+ under Node 22+. On the server, register the tags your page renders and use the SSR helpers from
677
+ `@aceshooting/lyra-ui/ssr.js`. The matrix has two explicit tiers:
648
678
 
649
679
  - `render-and-hydrate` components emit Declarative Shadow DOM (DSD) and reuse that shadow root and
650
680
  its nodes during browser hydration.
@@ -653,13 +683,18 @@ two explicit tiers:
653
683
  components whose initial render needs light-DOM traversal, layout, canvas, observers, or media
654
684
  APIs that Lit's intentionally small server DOM does not emulate.
655
685
 
686
+ For an application that intentionally registers the full inventory on the server,
687
+ `@aceshooting/lyra-ui/ssr/all.js` provides that side effect plus the SSR helpers. Granular imports
688
+ avoid loading unused optional-peer families.
689
+
656
690
  Configure Lit's server renderer with Lyra's fallback before `LitElementRenderer`:
657
691
 
658
692
  ```ts
693
+ import '@aceshooting/lyra-ui/components/lr-page.js';
659
694
  import {
660
695
  lyraSsrElementRenderers,
661
696
  LYRA_SSR_SUPPORT_MATRIX,
662
- } from "@aceshooting/lyra-ui/ssr-loader.js";
697
+ } from '@aceshooting/lyra-ui/ssr.js';
663
698
  import { render, LitElementRenderer } from "@lit-labs/ssr";
664
699
  import { collectResult } from "@lit-labs/ssr/lib/render-result.js";
665
700
  import { html } from "lit";
@@ -670,22 +705,24 @@ const result = render(html`<lr-page><main>Dashboard</main></lr-page>`, {
670
705
  const markup = await collectResult(result);
671
706
  ```
672
707
 
673
- On the client, make the loader the first import that can reach Lit; it installs
674
- `@lit-labs/ssr-client/lit-element-hydrate-support.js` before loading component definitions:
708
+ In a browser bundle that hydrates server-rendered markup, make `hydration.js` the first import that
709
+ can reach Lit. It installs `@lit-labs/ssr-client/lit-element-hydrate-support.js`; then register the
710
+ tags the page uses:
675
711
 
676
712
  ```ts
713
+ import '@aceshooting/lyra-ui/hydration.js';
714
+ import '@aceshooting/lyra-ui/components/lr-page.js';
677
715
  import {
678
716
  diagnoseLyraHydration,
679
717
  getLyraSsrMode,
680
- } from "@aceshooting/lyra-ui/ssr-loader.js";
718
+ } from '@aceshooting/lyra-ui/ssr.js';
681
719
 
682
720
  const diagnostics = await diagnoseLyraHydration(document);
683
721
  ```
684
722
 
685
- Root-excluded optional-peer families still use their granular registration import after the loader;
686
- the loader does not make optional peers eager. Property bindings cannot be serialized by a fallback
687
- renderer, so express initial fallback state as attributes/light DOM or assign properties on the
688
- client. A `render-and-hydrate` component whose rendering depends on something only a browser can
723
+ Optional-peer families use their granular registration imports as needed. Property bindings cannot
724
+ be serialized by a fallback renderer, so express initial fallback state as attributes/light DOM or
725
+ assign properties on the client. A `render-and-hydrate` component whose rendering depends on something only a browser can
689
726
  answer — its own light-DOM children, or a browser global such as `EyeDropper` — reproduces the
690
727
  server's answer on the hydrating render and corrects itself on the very next update rather than
691
728
  contradicting the markup it is hydrating, so a slotted override or an eyedropper button appears one