@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
@@ -16,44 +16,21 @@
16
16
 
17
17
  ## `lr-button`
18
18
 
19
- Host `aria-keyshortcuts` is forwarded reactively to the internal native button or link, including
20
- attribute removal and button/link presentation changes.
21
-
22
- A generic action-button primitive. Renders an internal native `<button>`; `type="submit"`/
23
- `type="reset"` are handled by the component itself via its browser-resolved form owner (including
24
- an external owner named by `form`), since a shadow-internal native button doesn't participate in a
25
- light-DOM form's submission on its own. They remain default actions of the composed native
26
- `click`: `preventDefault()` from any listener on that click path vetoes submit/reset before it
27
- runs, while `stopPropagation()` alone does not. Canceling the form's later `submit` or `reset`
28
- event remains an independent veto point.
29
-
30
- External descriptions follow the current source element identity when an element with the same ID
31
- replaces it, when a source is removed or reinserted, and when the control reconnects or moves to
32
- another document. Host-root lookup and ordering follow the current `aria-describedby` list,
33
- including unresolved IDs and duplicates. Switching between native button and anchor modes keeps the
34
- relationship on the current action. Existing accessible names and `aria-controls` relationships
35
- retain their separate contracts.
36
-
37
- Set `href` to a safe link URL and the root renders as a real `<a part="base" href=…>` instead — a
38
- link styled as a button (e.g. a CTA). Native navigation is then the activation, so the submit/reset
39
- handling and `type` have no effect in that mode. A disabled link button (its own `disabled` or an
40
- ancestor `<fieldset disabled>`) renders the anchor with `aria-disabled="true"` and **no `href`**, so
41
- it is neither focusable nor navigable; it also dims to `--lr-opacity-disabled` with a `not-allowed`
42
- cursor and no hover/press feedback, exactly like the disabled `<button>` path (an `<a>` can never
43
- match `:disabled`, so that arm of the styling keys off `aria-disabled` instead). An
44
- unsafe/unparseable `href` falls back to the native `<button>`.
45
-
46
- The label does **not** grow to fill a stretched button. `[part="label"]` shrink-wraps its text and
47
- the whole icon+label pair centres under `--lr-button-justify`, so the icon-to-text distance is
48
- exactly `--lr-button-gap`. Before 16.0.0 the label was `flex: 1 1 auto`, which parked every spare
49
- pixel inside the label box and — because the native `<button>` UA stylesheet centres text, which the
50
- label wrapper inherited — floated the text in the middle of a wide empty row. A `with-caret` button,
51
- and one with an `end`/`suffix` adornment, keep the growing label so that trailing affordance stays
52
- pinned to the trailing content edge. `--lr-button-label-grow: 1` restores the old stretch and `0`
53
- opts a caret/end-adornment row out of pinning. The label is also `text-align: start` now, which
54
- fixes two side effects of the inherited centring: a label narrower than its own text centred the
55
- overflow so the ellipsis appeared at the end while the start of the word was clipped, and the `<a>`
56
- root (which never inherited the centring) disagreed with the `<button>` root across a mode switch.
19
+ Renders a native `<button>` or, with a safe `href`, a native `<a>`. Submit/reset use the
20
+ browser-resolved form owner, including an external `form` owner, and run as default actions of the
21
+ composed `click`; `preventDefault()` vetoes them, while `stopPropagation()` alone does not. The
22
+ form's later `submit`/`reset` event can be canceled separately. Link mode navigates instead, and a
23
+ disabled link has `aria-disabled="true"` with no `href`, focus, or navigation.
24
+
25
+ Host `aria-keyshortcuts` and `aria-describedby` follow the internal button or link reactively.
26
+ Description IDs resolve in the host root, preserving order, unresolved IDs, and duplicates; source
27
+ replacement, removal, reconnection, and adoption update the relationship. Accessible names and
28
+ `aria-controls` have separate contracts below.
29
+
30
+ `[part="label"]` shrink-wraps with `text-align: start`, keeping ellipsis at the trailing edge.
31
+ The icon and label stay centered under `--lr-button-justify`, separated by `--lr-button-gap`.
32
+ `with-caret` or an `end`/`suffix` adornment makes the label grow to pin trailing content; use
33
+ `--lr-button-label-grow: 1` to opt into that stretch or `0` to opt out.
57
34
 
58
35
  **Properties:**
59
36
 
@@ -63,7 +40,8 @@ root (which never inherited the centring) disagreed with the `<button>` root acr
63
40
  so a `mailto:` href paired with `download` falls back to the native `<button>`. Unset (the default)
64
41
  renders a plain `<button>`, unchanged. `type` (submit/reset) has no effect while the anchor
65
42
  renders. While the button is disabled the anchor is rendered **without** `href` (keeping
66
- `aria-disabled="true"`), so a disabled link button cannot navigate. An unsafe/unparseable value
43
+ `aria-disabled="true"`), so it cannot navigate; it also uses `--lr-opacity-disabled`, a
44
+ `not-allowed` cursor, and no hover/press feedback. An unsafe/unparseable value
67
45
  falls back to the native `<button>`
68
46
  - `target?: string` — native anchor `target`, used only while `href` resolves to a link. Setting it
69
47
  (e.g. `'_blank'`) automatically force-adds `noopener noreferrer` to the rendered anchor's
@@ -81,15 +59,11 @@ root (which never inherited the centring) disagreed with the `<button>` root acr
81
59
  `primary` → `brand`, and `text` → neutral `appearance="plain"`. The Lyra/Web Awesome default is
82
60
  intentionally still `neutral`
83
61
  - `appearance: 'accent' | 'filled' | 'outlined' | 'filled-outlined' | 'plain' | 'quiet' | 'link' =
84
- 'accent'` (reflected) — the library's shared fill vocabulary plus this component's own two extra
85
- tiers. **Breaking in 8.0.0: the default moved from `'filled'` to `'accent'`**, so a bare
86
- `<lr-button>` now paints the loud fill it used to need `appearance="accent"` for. The two are no
87
- longer near-duplicates: `'accent'` takes the active `variant`'s **loud** fill
62
+ 'accent'` (reflected) — the shared fill vocabulary plus two button-specific tiers. `'accent'`
63
+ takes the active `variant`'s **loud** fill
88
64
  (`--lr-button-accent-fill`) with the foreground guaranteed legible on it, while `'filled'` takes
89
65
  that variant's **quiet** tint (`--lr-button-fill`) — a secondary-action fill that still reads as a
90
- fill rather than as the page surface. Before 8.0.0 every chromatic variant's `'filled'` and
91
- `'accent'` resolved to the same loud token and rendered identically, while `variant="neutral"`'s
92
- `'filled'` was the page surface, i.e. no fill at all. `'filled-outlined'` is `'filled'`'s fill and
66
+ fill rather than as the page surface. `'filled-outlined'` is `'filled'`'s fill and
93
67
  foreground carrying the outlined tier's border colour, for a filled button that must still read as
94
68
  bounded on a same-toned surface. `'quiet'` is a de-emphasized tier:
95
69
  transparent background with a bordered, muted-text chrome; its text/border tokens are **not**
@@ -164,21 +138,12 @@ root (which never inherited the centring) disagreed with the `<button>` root acr
164
138
  - `formTarget?: string` (attribute `formtarget`) — overrides the form owner's `target`. Distinct
165
139
  from `target`, which is the anchor target used in link mode
166
140
 
167
- All five are `undefined`/`false` by default. When any of them — or `name`/`value` — is set, the
168
- submission runs through a **transient native `<button type="submit">`** inserted directly after the
169
- host, used as `requestSubmit()`'s submitter and removed again in the same synchronous step (in a
170
- `finally`, so a throwing or validation-blocked submission can't leave it behind). That is what makes
171
- the name/value pair reach the submitted `FormData` and the overrides reach the real submission:
172
- `requestSubmit()` only accepts a submitter the form actually owns, and a custom element is never
173
- one. While that stand-in exists it _is_ the form's submitter, so **`SubmitEvent.submitter` is the
174
- transient native button, not this host**. With none of those properties set, submission stays a
175
- plain `requestSubmit()` with a `null` submitter, and all of it is inert in link mode.
176
- For each string override, presence rather than truthiness chooses the transient path and its raw
177
- attribute is copied, so explicit empty values remain distinguishable from absence. Only the
178
- canonical native/upstream spellings are supported; the former hyphenated Lyra aliases were
179
- removed.
180
-
181
- Each size tier's `min-block-size` floor is exposed as its own token (see below).
141
+ All five default to `undefined`/`false`. When one or `name`/`value` is set, the component inserts a
142
+ transient native submit button after the host, passes it to `requestSubmit()`, and removes it in the
143
+ same synchronous step even if submission fails. Its `name`/`value` reaches `FormData`, its `form*`
144
+ overrides apply, and **`SubmitEvent.submitter` is that native button, not the host**. With none
145
+ set, `requestSubmit()` has a `null` submitter. Presence, including an explicitly empty string,
146
+ selects the transient path; string attributes are copied verbatim. Link mode ignores all of this.
182
147
 
183
148
  **Getters/methods:** `click()`, `focus(options?)`, and `blur()` — forwarded to the internal base
184
149
  element (the `<button>`, or the `<a>` in anchor mode); `click()` also runs the component's
@@ -189,9 +154,7 @@ consumer error and restores the current `required`/`value` constraint. `formStat
189
154
  restores `value` for session history/autofill without changing submitter-only form-data semantics.
190
155
 
191
156
  **Events:** a plain native `click` bubbles and composes through the shadow boundary unmodified
192
- (disabled while `disabled` or `loading`). In button mode, submit/reset runs only after that click's
193
- listener path has accepted the default action; calling `preventDefault()` on the host or an
194
- ancestor therefore vetoes it, while propagation control by itself does not. The internal button's
157
+ (disabled while `disabled` or `loading`). The internal button's
195
158
  `focus` and `blur` — which do not
196
159
  cross the shadow boundary on their own — are re-dispatched from the host as bubbling, composed
197
160
  events. `lr-invalid` (no
@@ -220,9 +183,8 @@ set), `spinner` (present only while `loading`).
220
183
  **CSS custom states:** `disabled` (including fieldset-disablement and loading), `icon-button`
221
184
  (one text-free default-slot element), `link` (safe anchor mode), and `loading`.
222
185
 
223
- **Themeable custom properties.** The colour slots below are re-pointed at the active `variant`'s row
224
- of the library's shared semantic colour grid, so the component carries no `:host([variant='…'])`
225
- block of its own — the ones marked variant-independent are the exceptions:
186
+ **Themeable custom properties.** Colour slots follow the active `variant`'s semantic colour row
187
+ unless marked variant-independent:
226
188
 
227
189
  - `--lr-button-accent` (default `--lr-color-fill-loud`) — text/glyph colour for the chrome-less
228
190
  tiers (`outlined`, `plain`, `link`), i.e. the variant's loud fill borrowed as a foreground.
@@ -261,13 +223,9 @@ text/border counterparts, letting e.g. `appearance="quiet"` (which has its own r
261
223
  default**. Chromatic `plain` text moves toward body text during hover/press to retain contrast
262
224
  against the moving fill; the other appearances keep their resting text colour. The hover colour
263
225
  override also applies while pressed, and the border fallback remains the resting border colour.
264
- `appearance="link"` ignores `--lr-button-hover-color` (its own hover rule sets a higher-specificity
265
- colour mix) and renders with no border at any state, so `--lr-button-hover-border` has no visible
266
- effect there. **Breaking in 8.0.0:** this replaced `--lr-button-hover-brightness`,
267
- which no longer exists — a `filter: brightness()` multiplies every channel, so it moved a mid-toned
268
- fill but did nothing at all to a pure white or pure black one, and it dimmed the label and icons
269
- along with the box. Retuning `--lr-button-fill` or `--lr-button-accent-fill` now retunes that tier's
270
- hover and press with it.
226
+ `appearance="link"` ignores `--lr-button-hover-color` and renders without a border, so
227
+ `--lr-button-hover-border` has no effect there. Retuning either fill token also retunes its tier's
228
+ hover and press. For removed historical tokens, see the [release history archive](https://github.com/aceshooting/lyra-ui/tree/main/docs/changelog).
271
229
 
272
230
  `--lr-button-width` (default `100%`) is the internal control's inline size, so it follows the host's
273
231
  own width; override it to `auto` for a compact inline composition. `--lr-button-active-scale`
@@ -279,11 +237,9 @@ the `loading` spinner's rotation period; that token itself collapses to `0.001ms
279
237
  The per-`size` `min-block-size` floors are `--lr-button-size-2xs`, `--lr-button-size-xs`,
280
238
  `--lr-button-size-s`, `--lr-button-size-m`, `--lr-button-size-l` and
281
239
  `--lr-button-size-xl`. Each defaults to the matching tier of the shared form-control ladder
282
- (`--lr-form-control-height-2xs` … `-xl`, i.e. 1.25rem, 1.5rem, 1.875rem, 2.5rem, 3rem, 3.5rem), so a
283
- button shares the same minimum-height ladder as sibling form controls rather than relying on a
284
- second hand-maintained list — which is exactly how the scales drifted apart before 8.0.0. This is
285
- density/floor parity, not guaranteed pixel-height parity: content and nested actions can make a
286
- composed control such as `lr-date-input` taller. Each token is read only by its own tier
240
+ (`--lr-form-control-height-2xs` … `-xl`, i.e. 1.25rem, 1.5rem, 1.875rem, 2.5rem, 3rem, 3.5rem).
241
+ These are minimum-height floors; content and nested actions can make a composed control taller.
242
+ Each token is read only by its own tier
287
243
  (`--lr-button-size-s` also serves `size="small"`, and so on for the other two aliases), and all are
288
244
  ignored by `appearance="link"`.
289
245
  Retheming `--lr-theme-form-control-height-*` moves every control on the ladder together.
@@ -301,16 +257,14 @@ changes its private default to `--lr-radius-pill`. `--lr-button-caret-size` (def
301
257
  `var(--lr-size-0-75em)`) is the `with-caret`
302
258
  chevron's font size — declared in `em`, so it tracks every `size` tier through the button's own font
303
259
  size instead of needing a per-tier value.
304
- `--lr-button-shadow` is **undeclared by default**, so `box-shadow` falls back to `none` —
305
- byte-identical to before this property existed — set it to add a drop shadow (e.g. an
306
- elevated/floating action button) without a `::part(base)` rule. `appearance="link"` always renders
260
+ `--lr-button-shadow` is **undeclared by default**, so `box-shadow` falls back to `none`; set it
261
+ for a drop shadow without a `::part(base)` rule. `appearance="link"` always renders
307
262
  with no shadow regardless of this token — a zero-chrome inline link has no box to elevate.
308
263
  `--lr-button-justify` (default `center`) is the `justify-content` of the internal button's row. With
309
264
  the label no longer growing, this is what positions the icon+label pair inside a stretched control:
310
265
  `flex-start` packs it against the leading edge, `space-between` pushes the adornments apart.
311
- `--lr-button-label-grow` (default `0`) is the `flex-grow` of `[part="label"]`; `1` restores the
312
- pre-16.0.0 behaviour where the label absorbed every spare pixel of a stretched button, and it also
313
- overrides the automatic grow a `with-caret`/`end`-adornment button applies.
266
+ `--lr-button-label-grow` (default `0`) is the `flex-grow` of `[part="label"]`; `1` fills spare
267
+ space, and an explicit value overrides the grow applied by `with-caret`/`end` adornments.
314
268
 
315
269
  **Retuning one `size` tier's geometry, without a `::part(base)` rule.** Four more properties carry
316
270
  the active tier's geometry. Every `:host([size='…'])` rule changes only private defaults — no
@@ -376,10 +330,8 @@ box no matter what tier or override is in play.
376
330
 
377
331
  **Known gotchas:**
378
332
 
379
- - `accessibleLabel`/a host `aria-label` is forwarded reactively to the internal button or anchor as
380
- a literal string (for an icon-only button). Host `aria-describedby` targets in the host's root
381
- are resolved onto the focused internal control through `ariaDescribedByElements`; external
382
- `aria-labelledby` is not copied across the shadow boundary.
333
+ - Host `aria-describedby` targets resolve onto the focused internal control through
334
+ `ariaDescribedByElements`; external `aria-labelledby` is not copied across the shadow boundary.
383
335
  - For a toggle that owns its pressed state — a vetoable request, `lr-change`, and optional grouping
384
336
  behind one tab stop — use `lr-toggle` / `lr-toggle-group` rather than flipping host `aria-pressed`
385
337
  in a click handler.
@@ -387,13 +339,12 @@ box no matter what tier or override is in play.
387
339
  For toggle buttons, host `aria-pressed="true|false|mixed"` reaches the focused native button —
388
340
  BUTTONS only. A link button (`href` set) never receives it, because `role="link"` does not support
389
341
  `aria-pressed`; remove `href` and the same host attribute starts reaching the `<button>` that
390
- replaces the anchor. That link carve-out arrived in **16.0.0** — before it, `aria-pressed` was
391
- forwarded onto the anchor as well, asserting a state `role="link"` does not have. Navigation can
342
+ replaces the anchor. Navigation can
392
343
  use the global `aria-current="page|step|location|date|time|true|false"`, which does reach the
393
344
  anchor. Both states update reactively, including native `ariaPressed`/`ariaCurrent` property
394
345
  assignments, attribute removal and `href` changes. Empty or unsupported tokens are omitted. The native button/link role
395
346
  remains unchanged for an enabled control: use pressed state for button toggles and current state
396
- for navigation links. A DISABLED link button drops `href` (so it genuinely cannot navigate) and
347
+ for navigation links. A disabled link button drops `href` and
397
348
  therefore also drops the anchor's implicit role, so it renders an explicit `role="link"` — without
398
349
  it, the forwarded `aria-label`/`aria-haspopup`/`aria-expanded`/`aria-current` would sit on a
399
350
  role-less generic element, which is prohibited.
@@ -406,12 +357,7 @@ box no matter what tier or override is in play.
406
357
  - Is form-associated (`static formAssociated = true` + `attachInternals()`), so it participates in
407
358
  an ancestor `<form>.elements` the same way `wa-button` does — a sibling text field's own
408
359
  Enter-to-submit lookup (which scans `form.elements` for a `type === 'submit'` control) finds it.
409
- - **`SubmitEvent.submitter` is not this element** whenever `name`/`value` or any `form*` override is
410
- set: it is the transient native `<button>` described above. That native submitter remains
411
- connected throughout synchronous `requestSubmit()` handling, so a `submit` listener can read
412
- its `name`, `value` and `form*` fields and construct `FormData` with it. It is removed after
413
- submission handling returns; its identity is distinct from the `lr-button` host.
414
- - The `form*` overrides and `type` are all inert while `href` renders the anchor — native navigation
415
- is the activation there, and an anchor has no submit/reset concept.
360
+ - A `submit` listener can read the transient native submitter's `name`, `value`, and `form*` fields
361
+ while it remains connected during synchronous `requestSubmit()` handling.
416
362
 
417
363
  ---
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/overlays/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [overlays](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/overlays.md)
10
- - **Deprecated property** `accessibleLabel` since `22.0.0`; use attribute `Use element.ariaLabel or setAttribute('aria-label', label); host attribute presence takes precedence over the compatibility fallback.`; removal not before `24.0.0` — The native host accessible-name API replaces this fallback property. The earlier accessible-label attribute deprecation has its own published release window; the programmatic property remains supported throughout its later window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 8 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`
@@ -40,8 +40,7 @@ property and rich-slot heading wrapper at that semantic level, invalid untyped v
40
40
  carries when it first mounts; see the announcement paragraph that closes this section),
41
41
  `open: boolean = true`
42
42
  (reflected as a presence attribute — `open="false"` is accepted in plain markup; `false` removes the
43
- semantic content and hides the host surface), and `accessibleLabel: string = ''` (property only;
44
- used only when the host has no `aria-label` attribute). In markup, name the callout with the host
43
+ semantic content and hides the host surface). In markup, name the callout with the host
45
44
  `aria-label`, which has highest precedence by presence, including an explicitly empty value.
46
45
 
47
46
  Every reflected closed set normalizes identically from markup and untyped JavaScript writes:
@@ -132,7 +131,7 @@ any nested level. `display:none`/`content-visibility:hidden` prune a branch; a
132
131
  stay silent. Nested forwarding slots expose their flattened assigned text instead of fallback
133
132
  content, and later assignment plus assigned-node text/style/visibility mutations are observed.
134
133
  Mutations that leave that accessible text unchanged are deduplicated. A nonempty host
135
- `aria-label` (or `accessibleLabel` fallback) prefixes visible update text as context, with an
134
+ `aria-label` prefixes visible update text as context, with an
136
135
  equality check preventing duplicate copy. The complete localized
137
136
  `calloutAnnouncementWithContext: '{context}: {content}'` message owns both fields, their order, and
138
137
  punctuation; override that key through `strings` rather than prejoining either field. An explicitly
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/layout/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [layout](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/layout.md)
10
- - **Deprecated property** `accessibleLabel` since `22.0.0`; use attribute `Use element.ariaLabel or setAttribute('aria-label', label); host attribute presence takes precedence over the compatibility fallback.`; removal not before `24.0.0` — The native host accessible-name API replaces this fallback property. The earlier accessible-label attribute deprecation has its own published release window; the programmatic property remains supported throughout its later window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 18 parts, 18 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`
@@ -62,10 +62,8 @@ slide itself; they do not change the active slide or move focus away from it.
62
62
  custom, shadow-wrapped, labelled, disabled, and editable controls retain their own pointer input.
63
63
  - `slides: number` (read-only) — live assigned-slide count, updated after dynamic child changes.
64
64
  - `aria-label` (host attribute) — names the carousel landmark, taking precedence by presence,
65
- including an explicitly empty value.
66
- - `accessibleLabel?: string` (attribute: false) — fallback landmark name used while the host has no
67
- `aria-label`. Omitting it reads back `undefined` and uses the localized `carouselLabel` default;
68
- an explicitly empty value is used as-is.
65
+ including an explicitly empty value; when absent, the component uses the localized
66
+ `carouselLabel` default.
69
67
 
70
68
  **9.0 cleanup:** the redundant Lyra-only `index`, `showIndicators`, and `goTo()` aliases were
71
69
  removed. Use mapped `currentSlide`, `pagination`, and `goToSlide()`. The writable/reflected
@@ -63,8 +63,7 @@ after the write fulfills.
63
63
 
64
64
  **Events:** `lr-message-retry` (`detail: { messageId?: string }`; fired by the built-in retry button,
65
65
  only rendered when `status="failed"`). `lr-toggle-request` is cancelable and carries
66
- `{ expanded: boolean, collapsed: boolean }` (`ChatMessageToggleDetail`) — `expanded` is the
67
- proposed state; the deprecated `collapsed` key is its inverse and is removed in 23.0.0; preventing
66
+ `{ expanded: boolean }` (`ChatMessageToggleDetail`) — `expanded` is the proposed state; preventing
68
67
  it vetoes the built-in collapse/expand transaction. `lr-toggle` carries that same detail after the
69
68
  accepted state is committed.
70
69
 
@@ -67,5 +67,5 @@ Selection is controlled: activation emits the complete claim but does not assign
67
67
  **Slots:** none. **Optional peer deps:** none.
68
68
 
69
69
  ```ts
70
- import "@aceshooting/lyra-ui/components/retrieval/claim-evidence/claim-evidence.js";
70
+ import "@aceshooting/lyra-ui/components/lr-claim-evidence.js";
71
71
  ```
@@ -85,7 +85,7 @@ toggle, the loading-skeleton behavior while the fine-grained highlighter resolve
85
85
  If `languages` changes while highlighting is loading, only results for the current map can update
86
86
  the displayed code. For a
87
87
  TypeScript annotation, use `import type { ShikiLanguageSource } from
88
- '@aceshooting/lyra-ui/components/conversation/code-block/code-block-core.js'`; the type-only
88
+ '@aceshooting/lyra-ui/components/lr-code-block-core.js'`; the type-only
89
89
  granular import emits no registration side effect.
90
90
  - `copyAppearance: 'text' | 'icon' = 'text'` (attribute `copy-appearance`, reflected) — identical to
91
91
  `<lr-code-block>`'s own property: `'text'` is the labelled button, `'icon'` swaps the visible label
@@ -138,7 +138,7 @@ constant also avoids repeated component snapshots.
138
138
  ```ts
139
139
  import { html } from "lit";
140
140
  import jsonGrammar from "shiki/langs/json.mjs";
141
- import "@aceshooting/lyra-ui/components/conversation/code-block/code-block-core.js";
141
+ import "@aceshooting/lyra-ui/components/lr-code-block-core.js";
142
142
 
143
143
  const languages = { json: jsonGrammar };
144
144
  const view = html`<lr-code-block-core
@@ -83,7 +83,7 @@ highlighted markup.
83
83
  for that language — an additive, opt-in escape hatch for a build scoped to just the languages a
84
84
  consumer actually needs. A `language` absent from this map (or `languages` left unset) falls back
85
85
  to the default dynamic-import path unchanged. For a TypeScript annotation, use
86
- `import type { ShikiLanguageInput } from '@aceshooting/lyra-ui/components/conversation/code-block/code-block.js'`;
86
+ `import type { ShikiLanguageInput } from '@aceshooting/lyra-ui/components/lr-code-block.js'`;
87
87
  the type-only granular import emits no registration side effect.
88
88
  The map key need not be the grammar module's own registered name or one of its declared
89
89
  aliases — Lyra derives the Shiki `langAlias` mapping this needs automatically, so a key such as
@@ -104,10 +104,9 @@ when the anchor isn't a `line-range`, the id isn't found, or the start line is o
104
104
  was written successfully), `lr-error` (`detail: null` — generic notification when clipboard writing
105
105
  fails), `lr-copy-error` (frozen `detail: { ok: false, text, reason, error }`, where `reason` is
106
106
  `'unsupported' | 'denied' | 'failed'`), `lr-toggle-request` (cancelable;
107
- `detail: { expanded, collapsed }` is the proposed next state —
108
- `expanded` is the canonical key, the deprecated `collapsed` key is its inverse and is removed in
109
- 23.0.0 — and canceling leaves `collapsed` unchanged), `lr-toggle` (`detail: { expanded: boolean,
110
- collapsed: boolean }` — the committed state after the request is accepted),
107
+ `detail: { expanded }` is the proposed next state; canceling leaves the host `collapsed` property
108
+ unchanged),
109
+ `lr-toggle` (`detail: { expanded: boolean }` — the committed state after the request is accepted),
111
110
  `lr-line-activate` (`detail: { line: number }` — a gutter line number was activated while
112
111
  `activatableLines` is set),
113
112
  `lr-text-select` (`detail: { text, anchor, rects }` — a text selection inside the code body ended;
@@ -205,7 +204,7 @@ highlighting.
205
204
 
206
205
  ```ts
207
206
  import { html } from "lit";
208
- import "@aceshooting/lyra-ui/components/conversation/code-block/code-block.js";
207
+ import "@aceshooting/lyra-ui/components/lr-code-block.js";
209
208
 
210
209
  const view = html`<lr-code-block
211
210
  language="typescript"
@@ -317,7 +317,7 @@ of authoring `positioning-strategy`/`hoist` on each instance.
317
317
  swatches="#e11d48;#2563eb;#16a34a"
318
318
  ></lr-color-picker>
319
319
  <script type="module">
320
- import "@aceshooting/lyra-ui/components/forms/color-picker/color-picker.js";
320
+ import "@aceshooting/lyra-ui/components/lr-color-picker.js";
321
321
  const picker = document.querySelector("lr-color-picker");
322
322
  // Objects give each entry a real accessible name:
323
323
  picker.swatches = [
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/forms/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [forms](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/forms.md)
10
- - **Deprecated event** `lr-retry` since `22.0.0`; use event `addEventListener('lr-retry-request', event => { /* Call preventDefault() to veto the proposed action. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 34 parts, 36 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Documented with** `lr-option` (same section below)
@@ -70,7 +70,7 @@ focus explicitly — the browser does not replay the focus event after custom-el
70
70
  input.addEventListener("focus", async () => {
71
71
  if (!combobox.hidden) return;
72
72
  registration ??= import(
73
- "@aceshooting/lyra-ui/components/forms/combobox/combobox.js"
73
+ "@aceshooting/lyra-ui/components/lr-combobox.js"
74
74
  ).catch((error) => {
75
75
  registration = undefined; // let a later interaction retry
76
76
  throw error;
@@ -416,16 +416,13 @@ async `source` call plus the exact query string that call was made with (the rej
416
416
  query, not necessarily the live `query`/`inputValue`, which may have moved on — or been cleared by
417
417
  closing the listbox — by the time the rejection settles). The rendered copy stays localized and
418
418
  never shows the raw error.
419
- `lr-retry-request` and `lr-retry` are cancelable; the built-in failed-load action calls `refresh()`, and `preventDefault()`
419
+ `lr-retry-request` is cancelable; the built-in failed-load action calls `refresh()`, and `preventDefault()`
420
420
  leaves the failure on screen. While the failure state is the only popup content, the popup swaps
421
421
  `role="listbox"` for `role="dialog"` (the input gains the matching `aria-haspopup="dialog"` and
422
422
  drops `aria-activedescendant`, and the popup carries the localized failure heading as its accessible
423
423
  name). `dialog` is one of the four popup roles WAI-ARIA lets a `role="combobox"` own, so the still
424
424
  expanded `aria-controls` target keeps a valid owner while holding a retry `button` that is not a
425
425
  legal listbox child. A successful retry restores `role="listbox"`.
426
- `lr-retry` is the deprecated cancelable alias, dispatched after `lr-retry-request` with the same
427
- null detail. Either event can veto the built-in refresh; subscribe to one spelling. Removal of the
428
- alias is not before 24.0.0.
429
426
 
430
427
  **The clear button covers two axes, and announces only the one that moved.** A combobox owns both a
431
428
  committed selection and an in-progress filter query, so the button renders whenever either has
@@ -732,3 +729,5 @@ synchronous and fires no `input`/`change`/`lr-change` event.
732
729
  - `part="tag-label"` — The selected-tag label. Kept on one line and truncated with an ellipsis at `--tag-max-size` (default `var(--lr-size-5rem)`), rather than wrapped. Note that `lr-select`'s tag of the same name defaults to `var(--lr-size-12rem)`, so the same `--tag-max-size` value yields a wider tag there.
733
730
 
734
731
  ---
732
+
733
+ <a id="popup-select-keyboard"></a>
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/agent-tools/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [agent-tools](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/agent-tools.md)
10
- - **Deprecated event** `lr-vote` since `22.0.0`; use event `addEventListener('lr-vote-request', event => { /* Call preventDefault() to veto the proposed action. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 9 parts, 5 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`
@@ -42,11 +42,9 @@ scroll position. `disabled: boolean = false` (reflected) disables every vote but
42
42
  **Slots:** `a` (the first output — any content, a chat message, markdown, a viewer), `b` (the second
43
43
  output), and `prompt` (optional shared-input header above both panes).
44
44
 
45
- **Events:** `lr-vote-request` and `lr-vote` — `detail: { choice: 'a' | 'b' | 'tie' | 'both-bad'; itemId: string }`.
45
+ **Events:** `lr-vote-request` — `detail: { choice: 'a' | 'b' | 'tie' | 'both-bad'; itemId: string }`.
46
46
  This is a cancelable veto point emitted before `vote` changes; call `preventDefault()` to preserve
47
47
  the prior vote.
48
- `lr-vote` is the deprecated cancelable alias, dispatched after `lr-vote-request` with the same
49
- detail. Either event can veto the vote change; subscribe to one spelling, not both.
50
48
 
51
49
 
52
50
  **CSS parts:** `base` (the outer wrapper), `prompt` (the optional prompt header, hidden when the
@@ -7,8 +7,7 @@
7
7
  - **Family** `components/agent-tools/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [agent-tools](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/agent-tools.md)
10
- - **Deprecated event** `lr-approve` since `22.0.0`; use event `addEventListener('lr-approve-request', event => { /* Call preventDefault() to veto the proposed action. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
11
- - **Deprecated event** `lr-deny` since `22.0.0`; use event `addEventListener('lr-deny-request', event => { /* Call preventDefault() to veto the proposed action. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
10
+ - **Deprecations** none
12
11
  - **Optional peers** none
13
12
  - **Themeable via** 19 parts, 5 custom properties — see this component's own `@csspart`/`@cssprop` list below
14
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -107,13 +106,10 @@ deliberately *not* affected: while a decision is awaiting resolution, focus stil
107
106
  **Slots:** default — supplementary body content between the heading and the actions (e.g. a
108
107
  `lr-diff-view`). `footer` — extra content at the start of the action row.
109
108
 
110
- **Events:** `lr-approve-request` and `lr-approve` (`detail: { args, waitUntil }` — `args` is the `args` prop as-is, matching
111
- `lr-tool-approval-dialog`'s own `args` detail; cancelable), `lr-deny-request` and `lr-deny` (`detail: { waitUntil }`, the
109
+ **Events:** `lr-approve-request` (`detail: { args, waitUntil }` — `args` is the `args` prop as-is, matching
110
+ `lr-tool-approval-dialog`'s own `args` detail; cancelable), `lr-deny-request` (`detail: { waitUntil }`, the
112
111
  same resolver and no denial data of its own; cancelable), `lr-decision-settled`
113
112
  (`detail: { decision }`; non-cancelable).
114
- `lr-approve` and `lr-deny` are deprecated cancelable aliases of their respective requests. Each
115
- follows its request with the same detail, including `waitUntil`; either spelling can veto.
116
- Subscribe to one spelling per action to avoid handling the same proposal twice.
117
113
 
118
114
  `waitUntil(promise: Promise<unknown>) => void` is ExtendableEvent-style. Calling it from the
119
115
  listener holds the bar in its `pendingAction` presentation — `loading` on the activated control,
@@ -49,8 +49,9 @@ end: number; reason?: string }` marks character ranges within `text` that are re
49
49
  **Events:** `lr-citation-activate` (`detail: { sourceId: string; index: number }`, surfaced by a
50
50
  segment's embedded `lr-citation-badge`), `lr-citation-open` (`detail: { sourceId: string; index:
51
51
  number; href?: string }`, the "full preview" signal), `lr-copy` (`detail: { ok: true; text: string }`, from the
52
- embedded `lr-copy-button`), `lr-export` (`detail: { format: string }`, from the embedded
53
- `lr-export-button`), `lr-export-complete` (`detail: { format: string }`, after a non-cancelled export
52
+ embedded `lr-copy-button`), cancelable `lr-export-request` (`detail: { format: string }`, surfaced by
53
+ the embedded `lr-export-button`; call `preventDefault()` to handle the request without its built-in
54
+ download), `lr-export-complete` (`detail: { format: 'csv' | 'json' }`, after a non-cancelled export
54
55
  finishes), `lr-error` (the embedded clipboard write failed), `lr-copy-error` (`detail: { ok: false;
55
56
  text: string; reason: string; error: unknown }`, the detailed clipboard failure),
56
57
  `lr-toolbar-actions-change` (no detail, surfaced unchanged when the embedded copy button's logical
@@ -31,8 +31,8 @@ The menu content is exactly what `lr-dropdown` takes, so every row type composes
31
31
 
32
32
  ```html
33
33
  <script type="module">
34
- import '@aceshooting/lyra-ui/components/overlays/context-menu/context-menu.js';
35
- import '@aceshooting/lyra-ui/components/layout/menu/menu-label.js';
34
+ import '@aceshooting/lyra-ui/components/lr-context-menu.js';
35
+ import '@aceshooting/lyra-ui/components/lr-menu-label.js';
36
36
  </script>
37
37
 
38
38
  <lr-context-menu label="File actions">
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/data/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [data](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/data.md)
10
- - **Deprecated event** `lr-segment-activate` since `22.0.0`; use event `addEventListener('lr-segment-activate-request', event => { /* Call preventDefault() to veto the proposed selection toggle. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 17 parts, 14 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`
@@ -87,9 +87,7 @@ library event. **Cancelable, and a real veto point**: the default action is this
87
87
  `index` in its own `selectedIndices`, so `preventDefault()` keeps the current selection and hands
88
88
  that state entirely to the consumer. Never emitted in the default presentational mode. Because the
89
89
  event dispatches synchronously *before* the write, a listener reading `selectedIndices` inside its
90
- own handler sees the pre-activation value. The deprecated cancelable `lr-segment-activate` alias fires
91
- after the request and before that write, with the same detail. Either event can veto; vetoing only
92
- the legacy alias issues a development warning. Reentrant activation during dispatch is ignored.
90
+ own handler sees the pre-activation value. Reentrant activation during dispatch is ignored.
93
91
  Replacing the segment collection, disabling interaction, or disconnecting during dispatch cancels
94
92
  the default write.
95
93
 
@@ -138,7 +138,7 @@ for an application-level fallback:
138
138
  value="npm install @aceshooting/lyra-ui"
139
139
  ></lr-copy-button>
140
140
  <script type="module">
141
- import "@aceshooting/lyra-ui/components/utility/copy-button/copy-button.js";
141
+ import "@aceshooting/lyra-ui/components/lr-copy-button.js";
142
142
 
143
143
  const button = document.getElementById("copy");
144
144
  button.addEventListener("lr-copy", (event) =>
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/data/` — see `llms/index.md` for its siblings
8
8
  - **Status** `experimental` since `4.0.0` — see the maturity and deprecation policy in `llms/shared.md`
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [data](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/data.md)
10
- - **Deprecated event** `lr-retry` since `22.0.0`; use event `addEventListener('lr-retry-request', event => { /* Call preventDefault() to veto the proposed action. */ })`; removal not before `24.0.0` — Cancelable proposals use request event names. The historical event remains a veto alias during its compatibility window.
10
+ - **Deprecations** none
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 59 parts, 28 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`
@@ -27,7 +27,7 @@ shadow root, runs that control without also emitting `lr-cell-click`. Passive ce
27
27
  to activate the cell.
28
28
 
29
29
  ```js
30
- import "@aceshooting/lyra-ui/components/data/data-grid/data-grid.js";
30
+ import "@aceshooting/lyra-ui/components/lr-data-grid.js";
31
31
  ```
32
32
 
33
33
  Give the grid an accessible name with `label` or a host `aria-label`; the host attribute wins.
@@ -216,17 +216,14 @@ contract;
216
216
  `lr-copy` (frozen `{ ok: true, text }` after fulfillment); `lr-copy-error`
217
217
  (frozen `{ ok: false, text, reason, error }` after failure); `lr-error` (compatibility failure
218
218
  notification with no raw platform error text); `lr-data-error` does NOT itself set the built-in
219
- `error` state (see `error` above); `lr-retry-request` and `lr-retry` (`detail: null`, cancelable) — the built-in
219
+ `error` state (see `error` above); `lr-retry-request` (`detail: null`, cancelable) — the built-in
220
220
  `[part='retry-button']` was activated, only rendered while `error` is set; the default action
221
221
  clears `error`, `preventDefault()` leaves it set instead. Every library event bubbles and is
222
- composed; only `lr-cell-contextmenu`, `lr-sort-request`, `lr-retry-request`, and `lr-retry` are cancelable. Structured
222
+ composed; only `lr-cell-contextmenu`, `lr-sort-request`, and `lr-retry-request` are cancelable. Structured
223
223
  details and their owned collections are frozen. The toolbar search and active column-filter inputs
224
224
  re-dispatch `focus` and `blur` once from the grid host as bubbling, composed native `FocusEvent`s,
225
225
  preserving `relatedTarget` so delegated ancestors can observe editor entry and exit without
226
226
  crossing the shadow boundary.
227
- `lr-retry` is the deprecated cancelable alias, dispatched after `lr-retry-request` with the same
228
- null detail. Either event can veto clearing the error; subscribe to one spelling. Removal of the
229
- alias is not before 24.0.0.
230
227
 
231
228
  **Row context menus with `lr-context-menu`.** Wrap the grid in an `lr-context-menu` region and
232
229
  leave `lr-cell-contextmenu` **un-prevented**: preventing it suppresses the native menu, and the
@@ -149,9 +149,9 @@ invariant.
149
149
 
150
150
  The Details events `lr-show` and `lr-hide` have no detail payload and are cancelable; preventing
151
151
  either leaves the panel in its previous state. Accepted changes emit `lr-toggle` with
152
- `detail: { expanded, open, source }` (`expanded` is the new state; the deprecated `open` key, removed
153
- in 23.0.0, carries the same value), then the non-cancelable `lr-after-show` or `lr-after-hide` once
154
- rendering and motion settle. `source` is `user` for a summary click or keyboard activation,
152
+ `detail: { expanded, source }` (`expanded` is the new state), then the non-cancelable
153
+ `lr-after-show` or `lr-after-hide` once rendering and motion settle. `source` is `user` for a
154
+ summary click or keyboard activation,
155
155
  `programmatic` for `show()`, `hide()`, or assigning `open`, and `peer` when another Details with
156
156
  the same non-empty `name` closes this one. The full orders are `lr-show` → `lr-toggle` →
157
157
  `lr-after-show` and `lr-hide` → `lr-toggle` → `lr-after-hide`. Initially open markup emits