@aceshooting/lyra-ui 21.0.0 → 21.1.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 (272) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +6 -3
  3. package/custom-elements.json +1 -1
  4. package/dist/ai/runtime.js +1 -1
  5. package/dist/ai/types.d.ts +13 -5
  6. package/dist/cli/lyra-rename-ledger.mjs +1 -0
  7. package/dist/cli/migrate-wa.mjs +33 -13
  8. package/dist/cli/migration-contract.json +1 -1
  9. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +5 -3
  10. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +3 -2
  11. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.d.ts +15 -3
  12. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.js +3 -3
  13. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +24 -8
  14. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +3 -3
  15. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +4 -0
  16. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +9 -5
  17. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  18. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  19. package/dist/components/agent-tools/tool-status.js +2 -2
  20. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +8 -0
  21. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +3 -2
  22. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js +1 -1
  23. package/dist/components/agent-tools/trace-tree/span.d.ts +2 -2
  24. package/dist/components/charts/chart/box-plot.class.d.ts +3 -1
  25. package/dist/components/charts/chart/box-plot.class.js +9 -9
  26. package/dist/components/charts/chart/chart-bidi.d.ts +109 -0
  27. package/dist/components/charts/chart/chart-bidi.js +1 -0
  28. package/dist/components/charts/chart/chart.class.d.ts +17 -2
  29. package/dist/components/charts/chart/chart.class.js +10 -8
  30. package/dist/components/charts/chart/histogram.class.js +1 -1
  31. package/dist/components/charts/chart/lite-chart.class.d.ts +24 -5
  32. package/dist/components/charts/chart/lite-chart.class.js +9 -9
  33. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  34. package/dist/components/conversation/code-block/shiki-dark-theme.d.ts +2 -2
  35. package/dist/components/conversation/code-block/shiki-dark-theme.js +1 -1
  36. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +18 -2
  37. package/dist/components/conversation/conversation-item/conversation-item.class.js +3 -3
  38. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  39. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  40. package/dist/components/conversation/markdown/markdown-core.class.d.ts +3 -1
  41. package/dist/components/conversation/markdown/markdown.class.d.ts +3 -1
  42. package/dist/components/conversation/message-actions/message-actions.class.d.ts +7 -2
  43. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  44. package/dist/components/conversation/message-parts/message-parts.class.d.ts +6 -2
  45. package/dist/components/conversation/message-parts/message-parts.class.js +5 -3
  46. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +3 -2
  47. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  48. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +1 -5
  49. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +2 -2
  50. package/dist/components/conversation/streaming-text/streaming-text-core.class.d.ts +7 -1
  51. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +3 -4
  52. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +7 -1
  53. package/dist/components/conversation/streaming-text/streaming-text.class.js +3 -4
  54. package/dist/components/conversation/thread-list/thread-list.class.d.ts +13 -2
  55. package/dist/components/conversation/thread-list/thread-list.class.js +3 -3
  56. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  57. package/dist/components/data/document-library/document-library.class.js +2 -0
  58. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -1
  59. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  60. package/dist/components/data/flow-node/flow-node.class.d.ts +6 -2
  61. package/dist/components/data/flow-node/flow-node.class.js +6 -2
  62. package/dist/components/data/flow-node/flow-node.styles.js +1 -1
  63. package/dist/components/data/gauge/gauge.styles.js +1 -1
  64. package/dist/components/data/heatmap/heatmap.class.d.ts +3 -0
  65. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  66. package/dist/components/data/heatmap/heatmap.styles.js +1 -1
  67. package/dist/components/data/sparkline/sparkline.class.d.ts +5 -3
  68. package/dist/components/data/stat/stat.class.d.ts +4 -3
  69. package/dist/components/data/table/table.class.d.ts +32 -5
  70. package/dist/components/data/table/table.class.js +3 -2
  71. package/dist/components/forms/button/button.class.d.ts +7 -1
  72. package/dist/components/forms/button/button.styles.js +1 -1
  73. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  74. package/dist/components/forms/input/input.styles.js +1 -1
  75. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -0
  76. package/dist/components/layout/app-rail/app-rail.class.d.ts +50 -11
  77. package/dist/components/layout/app-rail/app-rail.class.js +2 -2
  78. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  79. package/dist/components/layout/menu/menu.class.d.ts +6 -5
  80. package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
  81. package/dist/components/media/flag/language-map.d.ts +8 -0
  82. package/dist/components/media/flag/language-map.js +1 -1
  83. package/dist/components/media/map/map-loader.d.ts +7 -1
  84. package/dist/components/media/map/map.class.d.ts +111 -5
  85. package/dist/components/media/map/map.class.js +3 -3
  86. package/dist/components/media/media-card/media-card.class.d.ts +18 -5
  87. package/dist/components/media/media-card/media-card.class.js +1 -1
  88. package/dist/components/overlays/overlay/popover.class.d.ts +20 -0
  89. package/dist/components/overlays/overlay/popover.class.js +2 -2
  90. package/dist/components/retrieval/graph/graph.class.d.ts +3 -3
  91. package/dist/components/retrieval/graph/graph.class.js +1 -1
  92. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +5 -3
  93. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +3 -2
  94. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +3 -3
  95. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  96. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +4 -1
  97. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -1
  98. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +4 -1
  99. package/dist/components/retrieval/source-picker/source-picker.class.js +5 -1
  100. package/dist/components/utility/icon/icon.class.d.ts +9 -3
  101. package/dist/components/utility/icon/icon.class.js +1 -1
  102. package/dist/components/utility/mutation-observer/mutation-observer.class.d.ts +14 -8
  103. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  104. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +6 -1
  105. package/dist/components/viewers/document-viewer/document-viewer.class.js +7 -1
  106. package/dist/components/viewers/document-viewer/registry.d.ts +12 -3
  107. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +13 -5
  108. package/dist/components/viewers/geojson-view/geojson-view.class.js +1 -1
  109. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -2
  110. package/dist/custom-elements-jsx.d.ts +1 -1
  111. package/dist/events.d.ts +644 -1242
  112. package/dist/internal/anchored-overlay-runtime.d.ts +2 -2
  113. package/dist/internal/cell-range.d.ts +0 -6
  114. package/dist/internal/cell-range.js +1 -1
  115. package/dist/internal/css-token-length.d.ts +7 -0
  116. package/dist/internal/css-token-length.js +1 -0
  117. package/dist/internal/default-strings.generated.d.ts +1 -1
  118. package/dist/internal/default-strings.generated.js +1 -1
  119. package/dist/internal/deferred-focus-return.d.ts +7 -4
  120. package/dist/internal/deferred-focus-return.js +1 -1
  121. package/dist/internal/dev-mode-attribute-warning.d.ts +35 -0
  122. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  123. package/dist/internal/localization-runtime.js +1 -1
  124. package/dist/internal/localization-types.d.ts +1 -1
  125. package/dist/internal/localization.js +2 -2
  126. package/dist/internal/package-metadata.d.ts +1 -1
  127. package/dist/internal/package-metadata.js +1 -1
  128. package/dist/internal/papaparse-loader.d.ts +1 -1
  129. package/dist/internal/papaparse-loader.js +1 -1
  130. package/dist/internal/positioner.d.ts +10 -0
  131. package/dist/internal/positioner.js +1 -1
  132. package/dist/internal/shared-unions.d.ts +2 -1
  133. package/dist/internal/slotted-overlay-controller.d.ts +20 -0
  134. package/dist/internal/slotted-overlay-controller.js +1 -0
  135. package/dist/internal/text-quote.d.ts +1 -1
  136. package/dist/internal/text-quote.js +1 -1
  137. package/dist/internal/theme-observation.d.ts +4 -0
  138. package/dist/internal/theme-observation.js +1 -0
  139. package/dist/internal/theme-watcher.js +1 -1
  140. package/dist/localization.d.ts +6 -1
  141. package/dist/localization.js +1 -1
  142. package/dist/lyra.d.ts +1 -1
  143. package/dist/lyra.js +1 -1
  144. package/dist/svelte.d.ts +1 -1
  145. package/dist/testing/lyra-tag-event-map.js +1 -1
  146. package/dist/translations/ar/agent-tools.js +1 -1
  147. package/dist/translations/cs/agent-tools.js +1 -1
  148. package/dist/translations/da/agent-tools.js +1 -1
  149. package/dist/translations/de/agent-tools.js +1 -1
  150. package/dist/translations/de-CH/agent-tools.js +1 -1
  151. package/dist/translations/es/agent-tools.js +1 -1
  152. package/dist/translations/fa/agent-tools.js +1 -1
  153. package/dist/translations/fi/agent-tools.js +1 -1
  154. package/dist/translations/fr/agent-tools.js +1 -1
  155. package/dist/translations/he/agent-tools.js +1 -1
  156. package/dist/translations/hi/agent-tools.js +1 -1
  157. package/dist/translations/hr/agent-tools.js +1 -1
  158. package/dist/translations/hu/agent-tools.js +1 -1
  159. package/dist/translations/id/agent-tools.js +1 -1
  160. package/dist/translations/it/agent-tools.js +1 -1
  161. package/dist/translations/ja/agent-tools.js +1 -1
  162. package/dist/translations/kk/agent-tools.js +1 -1
  163. package/dist/translations/ko/agent-tools.js +1 -1
  164. package/dist/translations/nb/agent-tools.js +1 -1
  165. package/dist/translations/nl/agent-tools.js +1 -1
  166. package/dist/translations/nn/agent-tools.js +1 -1
  167. package/dist/translations/pl/agent-tools.js +1 -1
  168. package/dist/translations/pt-BR/agent-tools.js +1 -1
  169. package/dist/translations/pt-PT/agent-tools.js +1 -1
  170. package/dist/translations/pt-PT/charts.js +1 -1
  171. package/dist/translations/pt-PT/conversation.js +1 -1
  172. package/dist/translations/pt-PT/data.js +1 -1
  173. package/dist/translations/pt-PT/forms.js +1 -1
  174. package/dist/translations/pt-PT/layout.js +1 -1
  175. package/dist/translations/pt-PT/media.js +1 -1
  176. package/dist/translations/pt-PT/retrieval.js +1 -1
  177. package/dist/translations/pt-PT/shared.js +1 -1
  178. package/dist/translations/pt-PT/utility.js +1 -1
  179. package/dist/translations/pt-PT/viewers.js +2 -2
  180. package/dist/translations/ro/agent-tools.js +1 -1
  181. package/dist/translations/ru/agent-tools.js +1 -1
  182. package/dist/translations/sl/agent-tools.js +1 -1
  183. package/dist/translations/sv/agent-tools.js +1 -1
  184. package/dist/translations/tr/agent-tools.js +1 -1
  185. package/dist/translations/uk/agent-tools.js +1 -1
  186. package/dist/translations/zh-CN/agent-tools.js +1 -1
  187. package/dist/translations/zh-TW/agent-tools.js +1 -1
  188. package/dist/utilities/index.d.ts +1 -1
  189. package/dist/utilities/index.js +1 -1
  190. package/dist/utilities/localization.d.ts +28 -10
  191. package/dist/vue.d.ts +1 -1
  192. package/llms/components/lr-accordion-item.md +2 -344
  193. package/llms/components/lr-accordion.md +2 -344
  194. package/llms/components/lr-app-rail-group.md +2 -721
  195. package/llms/components/lr-app-rail-item.md +2 -721
  196. package/llms/components/lr-app-rail.md +29 -4
  197. package/llms/components/lr-bar-chart.md +2 -87
  198. package/llms/components/lr-box-plot.md +1 -1
  199. package/llms/components/lr-breadcrumb-item.md +2 -67
  200. package/llms/components/lr-bubble-chart.md +2 -87
  201. package/llms/components/lr-button.md +7 -0
  202. package/llms/components/lr-chart.md +4 -5
  203. package/llms/components/lr-chip-group.md +2 -272
  204. package/llms/components/lr-conversation-item.md +20 -2
  205. package/llms/components/lr-date-input.md +2 -457
  206. package/llms/components/lr-date-picker.md +6 -2
  207. package/llms/components/lr-document-library.md +3 -3
  208. package/llms/components/lr-document-viewer.md +14 -5
  209. package/llms/components/lr-doughnut-chart.md +2 -87
  210. package/llms/components/lr-dropdown-item.md +2 -306
  211. package/llms/components/lr-dropdown.md +6 -0
  212. package/llms/components/lr-flag.md +9 -1
  213. package/llms/components/lr-flow-node.md +4 -1
  214. package/llms/components/lr-geojson-view.md +3 -90
  215. package/llms/components/lr-geojson-viewer.md +13 -5
  216. package/llms/components/lr-icon-button.md +4 -1
  217. package/llms/components/lr-icon.md +14 -6
  218. package/llms/components/lr-input.md +9 -2
  219. package/llms/components/lr-lite-chart.md +17 -9
  220. package/llms/components/lr-map.md +87 -2
  221. package/llms/components/lr-markdown-core.md +5 -4
  222. package/llms/components/lr-markdown.md +4 -2
  223. package/llms/components/lr-media-card.md +10 -5
  224. package/llms/components/lr-menu-item.md +2 -306
  225. package/llms/components/lr-menu.md +9 -6
  226. package/llms/components/lr-menubar-item.md +2 -125
  227. package/llms/components/lr-message-actions.md +4 -1
  228. package/llms/components/lr-message-parts.md +14 -5
  229. package/llms/components/lr-mutation-observer.md +12 -6
  230. package/llms/components/lr-navigation-menu-item.md +2 -237
  231. package/llms/components/lr-number-input.md +4 -0
  232. package/llms/components/lr-option.md +2 -712
  233. package/llms/components/lr-pie-chart.md +2 -87
  234. package/llms/components/lr-polar-area-chart.md +2 -87
  235. package/llms/components/lr-popover.md +10 -0
  236. package/llms/components/lr-prompt-input.md +5 -1
  237. package/llms/components/lr-radar-chart.md +2 -87
  238. package/llms/components/lr-reorder-item.md +2 -157
  239. package/llms/components/lr-result-field.md +2 -117
  240. package/llms/components/lr-retrieval-results.md +3 -1
  241. package/llms/components/lr-rubric-form.md +3 -2
  242. package/llms/components/lr-scatter-chart.md +2 -87
  243. package/llms/components/lr-selection-toolbar.md +4 -2
  244. package/llms/components/lr-source-card.md +2 -186
  245. package/llms/components/lr-source-picker.md +3 -1
  246. package/llms/components/lr-sparkline.md +9 -4
  247. package/llms/components/lr-split-panel.md +5 -3
  248. package/llms/components/lr-stat.md +4 -3
  249. package/llms/components/lr-streaming-text-core.md +7 -5
  250. package/llms/components/lr-streaming-text.md +9 -6
  251. package/llms/components/lr-swatch-picker.md +130 -0
  252. package/llms/components/lr-tag.md +2 -177
  253. package/llms/components/lr-thread-list.md +27 -4
  254. package/llms/components/lr-timeline-item.md +2 -120
  255. package/llms/components/lr-toast-item.md +2 -223
  256. package/llms/components/lr-tool-call-block.md +12 -3
  257. package/llms/components/lr-tool-call-chip.md +12 -6
  258. package/llms/components/lr-tool-param-form.md +3 -2
  259. package/llms/components/lr-tool-result-dialog.md +7 -3
  260. package/llms/components/lr-tool-result-view.md +4 -3
  261. package/llms/components/lr-tool-timeline.md +12 -5
  262. package/llms/components/lr-tree-item.md +2 -354
  263. package/llms/index.md +22 -4
  264. package/llms/migration.md +75 -1
  265. package/llms/peers.md +1 -1
  266. package/llms/shared.md +86 -39
  267. package/llms-full.txt +739 -163
  268. package/package.json +6 -6
  269. package/registrations.json +1 -1
  270. package/vscode-css-data.json +1 -1
  271. package/vscode-html-data.json +1 -1
  272. package/web-types.json +1 -1
@@ -9,91 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 16 parts, 37 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
- - **Documented with** `lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart` (same section below)
12
+ - **Themeable via** 16 parts, 37 custom properties — see `lr-line-chart.md`
13
+ - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
15
-
16
- ---
17
-
18
- ## Typed subclasses: `lr-line-chart`, `lr-bar-chart`, `lr-pie-chart`, `lr-doughnut-chart`, `lr-radar-chart`, `lr-polar-area-chart`, `lr-bubble-chart`, `lr-scatter-chart`
19
-
20
- Each is `LyraChart` with a named default `type` — respectively `line`, `bar`, `pie`, `doughnut`,
21
- `radar`, `polarArea`, `bubble`, `scatter`. In parity with the mirrored tags, `type` remains writable
22
- and accepts the full `LyraChartType` vocabulary; the tag name is a convenient default, not a lock.
23
-
24
- Everything else is inherited verbatim from `lr-chart`; each name below has the same type, default,
25
- and behavior there. **See `llms/components/lr-chart.md` for the details, code example, and gotchas
26
- of every entry in these lists.**
27
-
28
- **Properties:** `description`, `grid`, `axes`, `compact`, `indexAxis` (`index-axis`), `label`, `hiddenDatasets`, `legendPosition`
29
- (`legend-position`), `hiddenDatums`, `legendMode` (`legend-mode`), `legendDisplay` (`legend-display`),
30
- `max`, `min`, `plugins`, `scaleType` (`scale-type`), `annotations`,
31
- `stacked`, `stackedAxes`, `withoutAnimation` (`without-animation`),
32
- `withoutLegend` (`without-legend`), `withoutTooltip` (`without-tooltip`), `xLabel` (`x-label`),
33
- `yLabel` (`y-label`), plus additive `labels`, `datasets`, `valueFormatter`, `formatter`,
34
- `tooltipTitleFormatter`, `tooltipFooterFormatter`, `area`, `zoom`,
35
- `height`, `y2Label` (`y2-label`), `beginAtZero` (`begin-at-zero`), `dataLabels`
36
- (`data-labels`), `stackTotals` (`stack-totals`), `config`, `showDataTable`
37
- (`show-data-table`), `dataTableToggle` (`data-table-toggle`), `chartArea` (readonly), and `chart`.
38
- `type` differs only in its initial value.
39
-
40
- **Methods:** `appendData(label, values, maxPoints?)`, `exportData('csv' | 'png')`, `renderChart()`, `resetZoom()`,
41
- `refreshTheme()`.
42
-
43
- **Events:** `lr-zoom` (`detail: { zoomed: boolean }`), `lr-datum-activate`, `lr-point-click` (`detail: { datasetIndex,
44
- index, label, value }`), `lr-legend-visibility-change-request` (cancelable), and
45
- `lr-legend-visibility-change` (commit; both legend events carry `datasetIndex`, `visible`, and the
46
- complete `hiddenDatasets` snapshot). `lr-before-legend-visibility-change` is a **deprecated** alias
47
- of `lr-legend-visibility-change-request` (removal not before 21.0.0).
48
- Radial category legends additionally emit `lr-datum-visibility-change-request` (cancelable) and
49
- `lr-datum-visibility-change`, carrying `index`, `visible` and the frozen `hiddenDatums` snapshot.
50
- `lr-before-datum-visibility-change` is a **deprecated** alias of `lr-datum-visibility-change-request`
51
- (removal not before 21.0.0).
52
-
53
- **Slots:** default JSON configuration script, `data-table`, `center`.
54
-
55
- **CSS parts:** `base`, `plot`, `canvas`, `legend`, `legend-item`, `legend-item-hidden`, `legend-swatch`,
56
- `reset-zoom-button`, `description`, `notices`, `data-table`, `data-table-toggle`, `data-truncation`, `feature-warning`, `center`, `error` (neutral visible message
57
- rendered in place of `canvas` when the optional `chart.js` peer dependency fails to load; the
58
- failure transition is announced through the shared document-level light-DOM assertive sink — see
59
- `llms/components/lr-chart.md`).
60
-
61
- **Themeable custom properties:** `--lr-chart-height`, `--lr-chart-grid-color`,
62
- `--lr-chart-tick-color`, `--lr-chart-tick-font-size`, `--lr-chart-legend-color`, `--lr-chart-tooltip-bg`,
63
- `--lr-chart-tooltip-text`, `--lr-chart-legend-item-hover-bg`,
64
- `--lr-chart-legend-item-active-bg`, `--lr-chart-data-table-button-hover-bg`,
65
- `--lr-chart-data-table-button-active-bg`, `--lr-chart-data-table-toggle-hover-bg`,
66
- `--lr-chart-data-table-toggle-active-bg`, `--lr-chart-reset-zoom-button-hover-bg`,
67
- `--lr-chart-reset-zoom-button-active-bg`, `--lr-chart-canvas-hover-outline-width`, and
68
- `--lr-chart-canvas-hover-outline-color`, `--lr-chart-pattern-step`, plus `--lr-chart-legend-side-max` — all inherited from `LyraChart`, identical in meaning and default (see
69
- `lr-chart` above); each of the eight variants below reads the same set, so one rule retunes them
70
- together. The mirrored hooks are `--border-color-1`,
71
- `--border-color-2`, `--border-color-3`, `--border-color-4`, `--border-color-5`,
72
- `--border-color-6`, `--fill-color-1`, `--fill-color-2`, `--fill-color-3`, `--fill-color-4`,
73
- `--fill-color-5`, `--fill-color-6`, `--border-radius`, `--border-width`, `--grid-border-width`,
74
- `--grid-color`, `--line-border-width`, and `--point-radius`, also identical to the core chart.
75
-
76
- **Optional peer deps:** same as `lr-chart` — `chart.js`, plus `chartjs-plugin-zoom` only once
77
- `zoom` is set, `chartjs-plugin-datalabels` only once `data-labels`/`stack-totals` is set, and
78
- `chartjs-plugin-annotation` only once `annotations` contains a usable entry.
79
-
80
- ```html
81
- <lr-bar-chart></lr-bar-chart>
82
- <lr-pie-chart></lr-pie-chart>
83
- <script>
84
- document.querySelector('lr-bar-chart').labels = ['A', 'B'];
85
- document.querySelector('lr-bar-chart').datasets = [{ label: 'Count', data: [4, 9] }];
86
-
87
- document.querySelector('lr-pie-chart').labels = ['A', 'B', 'C'];
88
- document.querySelector('lr-pie-chart').datasets = [{ label: 'Share', data: [30, 45, 25], color: ['#2563eb', '#16a34a', '#dc2626'] }];
89
- </script>
90
- ```
91
-
92
- **Known gotchas (in addition to the core `lr-chart` list in `llms/components/lr-chart.md`):**
93
- - Changing `type` after construction may rebuild the underlying Chart.js instance; any active zoom
94
- state is reset and announced before the new type renders.
95
- - `lr-bubble-chart` consumes the exported `LyraChartPoint` shape directly. Set `x`/`y`, optional `r`
96
- for bubble radius, and optional `label` for the point-level accessible/event/export label; no
97
- runtime cast is needed.
98
-
99
- ---
@@ -64,8 +64,10 @@ movement starts from the action that received the event rather than stale contro
64
64
  private so controlled rect updates cannot be silently overridden by stale authored CSS.
65
65
  **Themeable custom properties:** `--lr-selection-toolbar-placement-gap` (default
66
66
  `var(--lr-space-s)`) is the non-negative distance from the selection and from viewport edges while
67
- the toolbar avoids collisions. It accepts unitless pixel values and `px`, `rem`, and `em` values; unsupported
68
- values fall back to the default and negative values clamp to `0`. Collision math uses the active
67
+ the toolbar avoids collisions. It accepts unitless pixel values, `px`, `rem`, and `em` values, and
68
+ CSS length math (`calc()`, `min()`, `max()`, `clamp()`) resolved in its live theme scope. Percentages
69
+ have no placement-gap basis. Invalid values fall back to the default and negative values clamp to
70
+ `0`. Collision math uses the active
69
71
  `visualViewport` bounds and offsets when available, including after visual-viewport changes.
70
72
 
71
73
  The toolbar is a floating surface and paints from the **shared overlay-surface family** (16.0.0):
@@ -9,190 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [llms-full.txt](../../llms-full.txt)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 5 parts, 3 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
- - **Documented with** `lr-source-list` (same section below)
12
+ - **Themeable via** 5 parts, 3 custom properties — see `lr-source-list.md`
13
+ - **Documented with** `lr-source-list`: see [lr-source-list.md](./lr-source-list.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
15
-
16
- ---
17
-
18
- ## `lr-source-list` / `lr-source-card`
19
-
20
- A collapsible "Sources" panel for one chat message (`lr-source-list`) that groups a set of
21
- `lr-source-card` entries. First-party invention (no Web Awesome equivalent). Cards are meant to be
22
- direct light-DOM children of the list (plain composition — no `.items` array prop, the same shape
23
- `<lr-multi-split>`'s panels take), though `lr-source-card` renders and functions fine standalone.
24
-
25
- ### `lr-source-list`
26
-
27
- **Properties:**
28
-
29
- - `expanded: boolean = false` (reflected) — whether the card list is currently shown. Starts
30
- collapsed by default so a message's sources don't eat vertical space until asked for.
31
- - `label?: string` — header text used when `label-plural` isn't set, e.g. `"Sources"`.
32
- - `labelPlural: string = ''` (attribute `label-plural`) — fully consumer-built, already-pluralized
33
- header summary, e.g. `"3 sources"` or `"1 source"`; this component never counts or pluralizes on
34
- its own. Takes precedence over `label` when both are set. If neither is set, the header falls back
35
- to the localized `sourceListDefaultLabel` string (English default: `"Sources"`).
36
- - `compact: boolean = false` (reflected) — tighter header and list padding/gap, for a panel
37
- rendered repeatedly down a message transcript — same convention as this list's own slotted
38
- `lr-source-card` children's `compact`. Purely a density knob: the outer border and surface stay,
39
- so pair it with `frame="plain"` to remove card chrome.
40
- - `frame: LyraFrame = 'card'` (reflected) — container treatment, in the library-wide `frame`
41
- vocabulary (`'card' | 'plain'`). `'card'` (the default) keeps the bordered, filled outer
42
- container. `'plain'` removes that outer border, background, and corner radius so a list nested
43
- inside existing message chrome does not double it. Plain preserves the header/list divider and
44
- whichever regular or compact padding applies.
45
-
46
- **Getters:** `sourceCount: number` — read-only, live-updated count of the currently-slotted children,
47
- handy for building a `label-plural` string reactively, e.g. `` list.labelPlural = `${list.sourceCount} sources` ``.
48
-
49
- **Events:** `lr-toggle` (`detail: { expanded: boolean }`) — the header was activated, expanding or
50
- collapsing the list.
51
-
52
- **Slots:** default — `<lr-source-card>` elements, neutral `<div>`/`<span>` wrappers, or
53
- author-owned `role="listitem"` entries. When every assigned child is one of those list-compatible
54
- forms, `[part="list"]` supplies `role="list"` and neutral, unroled children temporarily receive
55
- `role="listitem"`. Native controls and children with another explicit or native semantic role retain
56
- their own semantics; their presence omits list/listitem roles rather than creating an invalid ARIA
57
- list context. When every assigned child returns to this list-compatible allowlist, the
58
- list/listitem semantics return.
59
-
60
- **CSS parts:** `base` (outer container), `header` (the clickable `<button>` toggling `expanded`),
61
- `toggle` (the chevron indicator inside the header), `list` (wrapper around the default slot, `hidden`
62
- while collapsed).
63
-
64
- **Themeable custom properties:** `--lr-source-list-compact-header-padding` (default
65
- `var(--lr-space-2xs) var(--lr-space-s)`) and `--lr-source-list-compact-header-gap` (default
66
- `var(--lr-space-2xs)`) — `[part="header"]` padding/gap while `compact`; `--lr-source-list-compact-gap`
67
- (default `var(--lr-space-2xs)`) and `--lr-source-list-compact-list-padding` (default
68
- `var(--lr-space-s)`) — `[part="list"]` gap/padding while `compact`. All four are inline `var()`
69
- fallbacks at their point of use, so any can be set on the element or an ancestor. Otherwise shared
70
- tokens — `--lr-color-border`, `--lr-color-border-subtle`, `--lr-color-surface`,
71
- `--lr-color-text`, `--lr-color-brand` / `-brand-quiet`, `--lr-radius`, `--lr-space-xs`/`-s`/
72
- `-m`, `--lr-transition-fast`, `--lr-focus-ring-*`.
73
-
74
- **Optional peer deps:** none.
75
-
76
- ### `lr-source-card`
77
-
78
- **Properties:**
79
-
80
- - `sourceId: string = ''` (attribute `source-id`) — stable identifier matching a
81
- `<lr-citation-badge>` elsewhere on the page.
82
- - `title: string = ''` — the source's display title, e.g. a filename. Falls back to `"Untitled
83
- source"` when empty.
84
- - `page?: string | number` — optional page reference, e.g. `12` or `"iv"`, rendered as-is (never
85
- parsed/validated as a number), appended to the title as `" — p. {page}"`.
86
- - `href?: string` — optional URL, echoed back (unopened) in `lr-open`'s detail.
87
- - `compact: boolean = false` (reflected) — tighter root padding and row gap, for the dense citation
88
- lists these cards usually render in — the same convention as `lr-empty`'s `compact`. Purely a
89
- density knob: the border and background stay. `false` (the default) keeps the full card padding.
90
- - `frame: LyraFrame = 'card'` (reflected) — container treatment, in the library-wide `frame`
91
- vocabulary (`'card' | 'plain'`). `'card'` (the default) keeps the bordered, filled, padded box;
92
- `'plain'` removes the border, background, padding and corner radius, so a card inside a
93
- `<lr-source-list>` (or any container already drawing its own border/dividers) doesn't double it.
94
- `plain` wins over `compact` when both are set — nothing left to tighten. The title and toggle keep
95
- their brand color and hover underline under `plain`, since neither ever depended on the card
96
- chrome. Use the shared `LyraFrame` type when authoring this property.
97
- - `disabled: boolean = false` (reflected) — turns off this card's OWN controls. The `title` button
98
- and the "Show more"/"Show less" `toggle` both render `disabled`, so neither one can emit `lr-open`
99
- or `lr-expand` and neither remains in the tab order, and the card paints at
100
- `--lr-opacity-disabled` with a `not-allowed` cursor on both. The one `lr-expand` a disabled card
101
- can still emit is the automatic collapse when the `full` slot empties while expanded — that
102
- reports a state change the card genuinely made, exactly as it does when enabled. Both buttons
103
- carry the native `:disabled`, so `::part(title):disabled` / `::part(toggle):disabled` restyle the
104
- disabled affordance from outside. Every self-rendered sub-control is
105
- gated, not just the primary one: a card whose title is inert but whose disclosure toggle still
106
- expands reads as half-broken rather than disabled. Slotted `excerpt`/`full` content stays yours
107
- to disable. Not form-associated, so an ancestor `<fieldset disabled>` does not cascade here.
108
- - `aria-pressed` and `aria-current` (attributes only) — forwarded reactively onto the `title`
109
- button, the control that carries this card's action, the same mechanism `<lr-button>` and
110
- `<lr-icon-button>` use. `aria-pressed` accepts `'true' | 'false' | 'mixed'`; `aria-current`
111
- accepts `'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false'`. Anything outside
112
- those sets is dropped rather than passed through. The `toggle` button never receives either — it
113
- already owns `aria-expanded` for its own disclosure state, and two conflicting state claims on
114
- one control is worse than one. This is what lets a single-select citation list announce which
115
- source is the active one.
116
-
117
- **Events:**
118
-
119
- - `lr-expand` (`detail: { sourceId: string; expanded: boolean }`) — the per-card "Show
120
- more"/"Show less" toggle was activated. Unrelated to the parent `lr-source-list`'s own
121
- expand/collapse, which only ever hides/shows the _set_ of cards, never a single card's own content.
122
- - `lr-open` (`detail: { sourceId: string; href?: string }`) — the title was activated. This
123
- component never navigates on its own (a controlled component, the same convention
124
- `<lr-tool-call-chip>`'s `lr-tool-call-chip-select` follows); a listener decides what "open"
125
- means.
126
-
127
- **Slots:** `excerpt` (a short preview; when left empty, the `excerpt` part collapses away entirely —
128
- its wrapper is `hidden`, not just visually empty), `full` (the complete source text/chunk, hidden
129
- behind the "Show more"/"Show less" toggle — when left empty, no toggle renders at all; removing all
130
- `full`-slotted content while expanded auto-collapses it back).
131
-
132
- **CSS parts:** `base` (outer container), `title` (the clickable title/page heading, a `<button>`),
133
- `excerpt` (wrapper around the `excerpt` slot, `hidden` when the slot has no assigned content), `full`
134
- (wrapper around the `full` slot, `hidden` while collapsed), `toggle` (the "Show more"/"Show less"
135
- button — only rendered when the `full` slot has content).
136
-
137
- **Themeable custom properties:** `--lr-source-card-bg` (default `var(--lr-color-surface)`) —
138
- `[part='base']`'s RESTING background, the companion to the `compact` tier's levers below;
139
- `frame='plain'` still drops the fill entirely. `--lr-source-card-compact-padding` (default
140
- `var(--lr-space-xs)`) —
141
- `[part='base']`'s padding while `compact`; `--lr-source-card-compact-gap` (default
142
- `var(--lr-space-2xs)`) — the gap between `[part='base']`'s rows while `compact`. Both apply only in
143
- the `compact` state, so a dense citation list can be tuned without re-pointing shared spacing tokens
144
- elsewhere. Plus shared tokens — `--lr-color-border-subtle`, `--lr-color-surface`,
145
- `--lr-color-text` / `-text-quiet`, `--lr-color-brand`, `--lr-radius`, `--lr-space-xs`/`-s`,
146
- `--lr-focus-ring-*`.
147
-
148
- **Optional peer deps:** none.
149
-
150
- ```html
151
- <lr-source-list label-plural="2 sources">
152
- <lr-source-card source-id="doc-1" title="annual_report.pdf" page="12">
153
- <span slot="excerpt">Revenue grew 12% year over year...</span>
154
- <span slot="full"
155
- >Revenue grew 12% year over year, driven primarily by...</span
156
- >
157
- </lr-source-card>
158
- <lr-source-card source-id="doc-2" title="q3_notes.md">
159
- <span slot="excerpt">No matching full-text chunk for this source.</span>
160
- </lr-source-card>
161
- </lr-source-list>
162
- <script type="module">
163
- // Elsewhere, a <lr-citation-badge>'s activation handler can scroll to and
164
- // highlight the matching card -- neither component needs extra API surface
165
- // for that, only source-id to be targeted by:
166
- document.addEventListener("lr-citation-activate", (e) => {
167
- const card = document.querySelector(
168
- `lr-source-card[source-id="${e.detail.sourceId}"]`
169
- );
170
- card?.scrollIntoView({ block: "center" });
171
- });
172
- </script>
173
- ```
174
-
175
- `lr-source-list` removes the card list from the accessibility tree (not just visually hides it)
176
- while collapsed, via the native `hidden` attribute on `[part="list"]` — a screen reader user tabbing
177
- past the header never lands on off-screen source cards they can't currently see. Both components
178
- track slot presence in JS state (`slottedCount` on the list, `hasFullSlot` on the card) rather than
179
- relying on CSS `:empty`, since a `[part]` wrapper always contains a literal `<slot>` child regardless
180
- of assigned content; both also reconcile that state in `firstUpdated()` as a fallback for slot-
181
- forwarding scenarios or engines that don't fire `slotchange` for content already present at parse
182
- time.
183
-
184
- **Known gotchas:**
185
-
186
- - `lr-source-list` does not automatically build an “N sources” plural summary: provide
187
- `labelPlural` when that is wanted. Its no-label fallback is localized through
188
- `sourceListDefaultLabel`, and a per-instance `.strings` override reaches the rendered header.
189
- - `lr-source-card`'s own expand/collapse (`full` slot, `lr-expand` event) is completely
190
- independent of the parent list's `expanded`/`lr-toggle` — collapsing the list doesn't reset an
191
- individual card's `fullExpanded` state, and there is no cross-talk between the two components at
192
- all beyond DOM nesting.
193
- - `lr-source-card` actively strips a bare host-level `title` attribute right after Lit syncs it into
194
- the `title` property — otherwise the whole card would grow an unsolicited native tooltip repeating
195
- the title text on hover. Set `title` only as a property/attribute meant to become the rendered
196
- heading; don't rely on it surviving as a DOM attribute afterward.
197
-
198
- ---
@@ -58,7 +58,9 @@ string; mimeType?: string; name?: string; children?: LyraSourceEntry[] }`; flat
58
58
  **Events:** `lr-sources-change` (`detail: { selectedSourceIds }`, the complete updated leaf-id array,
59
59
  fired after every toggle including select-all. Also fired when a `sources` reassignment prunes a
60
60
  previously-selected id that is no longer a valid leaf. Not fired when a consumer sets
61
- `selectedSourceIds` directly; that assignment is normalized silently).
61
+ `selectedSourceIds` directly; that assignment is normalized silently). The select-all checkbox's
62
+ own `lr-checkbox-toggle-request`, native `input`/`change`, and `lr-input`/`lr-change` stay inside
63
+ the component; `lr-sources-change` is the host-level report of that toggle.
62
64
 
63
65
  **Slots:** none.
64
66
 
@@ -7,6 +7,8 @@
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: [llms-full.txt](../../llms-full.txt)
10
+ - **Deprecated css-property** `--lr-sparkline-stroke-width` since `21.1.0`; use css-property `--line-width (the same value, declared on lr-sparkline itself)`; removal not before `23.0.0` — --lr-sparkline-stroke-width predates the mirrored Web Awesome --line-width and is read only as its fallback, so it has no effect wherever --line-width is set. Scope the replacement to lr-sparkline, because the unprefixed --line-width also reaches any other element that reads it. It keeps working through the 22.x line; a stylesheet cannot be observed using it, so it never logs a warning.
11
+ - **Deprecated part** `area` since `21.1.0`; use part `::part(fill)`; removal not before `23.0.0` — area is a Lyra-only alias for the mirrored fill part on the same path; fill is the Web Awesome name. The area token stays on that path through the 22.x line; a stylesheet cannot be observed using a part, so it never logs a warning.
10
12
  - **Deprecated part** `base` since `8.0.0`; use part `::part(sparkline)`; removal not before `10.0.0` — The sparkline part names the rendered SVG wrapper unambiguously; base remains on that same node during the compatibility window. That version is a policy floor, not a plan: `wa-sparkline` still publishes its own deprecated `base` part, so this alias is removed only when upstream's is.
11
13
  - **Optional peers** none
12
14
  - **Themeable via** 6 parts, 4 custom properties — see this component's own `@csspart`/`@cssprop` list below
@@ -56,14 +58,17 @@ space-separated samples restores the attribute-driven path.
56
58
  **Slots:** none.
57
59
 
58
60
  **CSS parts:** `sparkline` and deprecated `base` are aliases on the same outer SVG, `fill` is the
59
- area path for solid/gradient appearance, `line` is the stroke path. Additive aliases are `area` on
60
- the same fill path and `bar` on each extension-mode rectangle.
61
+ area path for solid/gradient appearance, `line` is the stroke path, and the additive `bar` is each
62
+ extension-mode rectangle. `area` is a deprecated alias of `fill` on the same path (removal not
63
+ before 23.0.0); use `::part(fill)`.
61
64
 
62
65
  **Themeable custom properties:** `--fill-color` (area/gradient stop color), `--line-color` (stroke
63
66
  color), and `--line-width` (stroke width). Each reads through the live CSS cascade; line/fill
64
67
  default to the selected `trend`'s semantic Lyra tokens and `--line-width` falls back through the
65
- compatibility `--lr-sparkline-stroke-width` to `--lr-border-width-medium`. No canvas bridge or
66
- manual refresh is needed.
68
+ deprecated `--lr-sparkline-stroke-width` (removal not before 23.0.0) to `--lr-border-width-medium`.
69
+ Replace that alias with `--line-width` scoped to the element (`lr-sparkline { --line-width: 2px; }`),
70
+ since the unprefixed name also reaches any other element that reads it. No canvas bridge or manual
71
+ refresh is needed. Styling hooks cannot be observed, so neither deprecated alias logs a warning.
67
72
 
68
73
  **Optional peer deps:** none.
69
74
 
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/layout/` — see `llms/index.md` for its siblings
8
8
  - **Status** `stable` since `8.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: [llms-full.txt](../../llms-full.txt)
10
- - **Deprecations** none
10
+ - **Deprecated part** `split-panel` since `21.1.0`; use part `::part(base)`; removal not before `23.0.0` — split-panel is a Lyra-only second token on the same outer wrapper as base. Neither pinned wa-split-panel nor sl-split-panel publishes a wrapper part, so base, the root part name used across the library, remains the single supported spelling. The removal-not-before version is a policy floor, not a plan: should either upstream publish a component-named wrapper part, this alias stays for as long as upstream ships it.
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 6 parts, 10 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`
@@ -66,9 +66,11 @@ custom-handle content inside the separator; its assigned subtree is inert, so th
66
66
  the sole pointer/keyboard resize control). Under RTL, logical start/end and horizontal pointer/arrow
67
67
  behavior mirror together; vertical behavior does not invert.
68
68
 
69
- **CSS parts:** `base split-panel` (both tokens are on the same outer wrapper), `start panel` and
69
+ **CSS parts:** `base split-panel` (both tokens are on the same outer wrapper; `split-panel` is a
70
+ deprecated alias of `base`, removal not before 23.0.0, so style `::part(base)`), `start panel` and
70
71
  `end panel` (each pane exposes its individual token plus the shared `panel` token), `divider`
71
- (focusable `role="separator"`, with value/min/max and disabled ARIA state).
72
+ (focusable `role="separator"`, with value/min/max and disabled ARIA state). The deprecated part
73
+ still matches until its removal; being a stylesheet selector, it logs no runtime warning.
72
74
 
73
75
  **Themeable custom properties:** `--divider-width` (default `4px`), `--divider-hit-area` (requested
74
76
  default `12px`, with Lyra's `--lr-icon-button-size` minimum target remaining the floor), `--min`
@@ -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: [llms-full.txt](../../llms-full.txt)
10
- - **Deprecations** none
10
+ - **Deprecated slot** default slot since `21.1.0`; use slot `slot="start"`; removal not before `23.0.0` — start is the library-wide adornment slot and already takes precedence when both are filled; retiring the unnamed icon alias stops an unnamed child from silently becoming the leading icon. lr-stat has no upstream counterpart, so no mirrored slot is affected.
11
11
  - **Optional peers** none
12
12
  - **Themeable via** 14 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`
@@ -94,8 +94,9 @@ value: string; readonly exactValue?: string }`; at most the first 10,000 rows ar
94
94
 
95
95
  **Events:** none.
96
96
 
97
- **Slots:** `start` (canonical leading icon), default (legacy leading-icon alias, retained as the
98
- fallback; `start` takes precedence when both are filled), `caption` (rich caption content —
97
+ **Slots:** `start` (canonical leading icon), default (deprecated leading-icon alias, removal not
98
+ before 23.0.0: it still renders while `start` is empty and `start` takes precedence when both are
99
+ filled; move the icon to `slot="start"`), `caption` (rich caption content —
99
100
  overrides the `caption` attribute when slotted content is provided), `spark` (a sparkline, e.g. `<lr-sparkline
100
101
  slot="spark">`, or other compact trend visual — `lr-stat` only reserves the slot and doesn't
101
102
  render one itself), `sub` (rich sub-line content — overrides the `sub` attribute when slotted content
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/conversation/` — see `llms/index.md` for its siblings
8
8
  - **Status** `experimental` since `16.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: [llms-full.txt](../../llms-full.txt)
10
- - **Deprecations** none
10
+ - **Deprecated property** `codeBlockChrome` / `code-block-chrome` since `21.1.0`; use property `code-block-header`; removal not before `23.0.0` — code-block-chrome is a second spelling of code-block-header with identical behavior: either one enables the code-block headers of the composed Markdown element, which now always receives code-block-header. One name per concept removes a choice with no difference. It keeps enabling the headers through the 22.x line, and setting it logs a one-time development warning.
11
11
  - **Optional peers** `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
12
12
  - **Themeable via** 25 parts, 2 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`
@@ -48,12 +48,14 @@ attribute names, and defaults described under `<lr-streaming-text>`'s own **Prop
48
48
  `rel="noopener noreferrer"` whenever a `target` is emitted); `internalLinkPrefix: string = ''`
49
49
  (attribute `internal-link-prefix`); `headingOffset: number = 0` (attribute `heading-offset`);
50
50
  `streamingRender: MarkdownStreamingRender = 'plain'` (attribute `streaming-render`, not reflected);
51
- `codeBlockHeader: boolean = false` (attribute `code-block-header`) and its compatibility alias
52
- `codeBlockChrome: boolean = false` (attribute `code-block-chrome`); `highlightCode: boolean = true`
51
+ `codeBlockHeader: boolean = false` (attribute `code-block-header`) and its deprecated
52
+ compatibility alias `codeBlockChrome: boolean = false` (attribute `code-block-chrome`; removal not
53
+ before 23.0.0); `highlightCode: boolean = true`
53
54
  (attribute `highlight-code`); `headingAnchors: boolean = false` (attribute `heading-anchors`);
54
55
  `math: boolean = false`; `maxHeight: string = ''` (attribute `max-height`). All are forwarded to
55
56
  the composed `<lr-markdown-core>`, with matching behavior and defaults. `streamingRender` controls
56
- progressive output, and `codeBlockHeader` (or its `codeBlockChrome` alias) enables the localized
57
+ progressive output, and `codeBlockHeader` (or its deprecated `codeBlockChrome` alias, which reaches
58
+ the composed element as `codeBlockHeader`) enables the localized
57
59
  code label and source-copy action.
58
60
 
59
61
  **Exported helper:** `looksLikeMarkdown(text: string): boolean` — the same standalone heuristic
@@ -104,6 +106,6 @@ The Markdown part set also includes `task-list`, `task-item`, `task-item-checked
104
106
  `task-checkbox`, `table-wrapper`, `code-block-frame`, `code-block-copy-success`,
105
107
  `code-block-copy-error` and `streaming-tail`. `codeBlockHeader: boolean = false`
106
108
  (attribute `code-block-header`) enables the code-block header; `codeBlockChrome` (attribute
107
- `code-block-chrome`) is its compatibility alias. Successful and
109
+ `code-block-chrome`) is its deprecated compatibility alias (removal not before 23.0.0). Successful and
108
110
  failed writes pass through as `lr-copy` and `lr-copy-error`, carrying the immutable clipboard
109
111
  outcome, bubbling and composed.
@@ -7,7 +7,7 @@
7
7
  - **Family** `components/conversation/` — 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: [llms-full.txt](../../llms-full.txt)
10
- - **Deprecations** none
10
+ - **Deprecated property** `codeBlockChrome` / `code-block-chrome` since `21.1.0`; use property `code-block-header`; removal not before `23.0.0` — code-block-chrome is a second spelling of code-block-header with identical behavior: either one enables the code-block headers of the composed Markdown element, which now always receives code-block-header. One name per concept removes a choice with no difference. It keeps enabling the headers through the 22.x line, and setting it logs a one-time development warning.
11
11
  - **Optional peers** `dompurify`, `katex`, `marked`, `shiki` — see `llms/peers.md`
12
12
  - **Themeable via** 25 parts, 2 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`
@@ -61,9 +61,11 @@ properties existed:
61
61
  - `headingOffset: number = 0` (attribute `heading-offset`) — forwarded to the composed
62
62
  `<lr-markdown>`'s own `headingOffset`.
63
63
  - `streamingRender: MarkdownStreamingRender = 'plain'` (attribute `streaming-render`, not reflected)
64
- and `codeBlockHeader: boolean = false` (attribute `code-block-header`), with its compatibility
65
- alias `codeBlockChrome: boolean = false` (attribute `code-block-chrome`) — forwarded to the
66
- composed Markdown element. Their settled-block streaming behavior, code-copy behavior, and defaults match
64
+ and `codeBlockHeader: boolean = false` (attribute `code-block-header`), with its deprecated
65
+ compatibility alias `codeBlockChrome: boolean = false` (attribute `code-block-chrome`; removal not
66
+ before 23.0.0; setting it logs a one-time development warning) — forwarded to the composed
67
+ Markdown element, which receives either header option as its own `codeBlockHeader`. Their
68
+ settled-block streaming behavior, code-copy behavior, and defaults match
67
69
  `<lr-markdown>`; see its **Properties** section above.
68
70
  Use `streaming-render="progressive"` with `content-mode="markdown"`: in `auto` mode the element
69
71
  switches from plain text to Markdown when detection first succeeds, which replaces the displayed
@@ -159,7 +161,8 @@ showing the previous stream's stale final content for the length of the window.
159
161
 
160
162
  Rendering itself is never reimplemented here: Markdown mode composes `<lr-markdown>` directly,
161
163
  forwarding this component's own `streaming` through as that component's `streaming` hint prop,
162
- `streamingRender`, `codeBlockHeader`, `codeBlockChrome`, `languages` verbatim, and the rest of `<lr-markdown>`'s
164
+ `streamingRender`, `codeBlockHeader` (on when either this element's `codeBlockHeader` or its
165
+ deprecated `codeBlockChrome` is), `languages` verbatim, and the rest of `<lr-markdown>`'s
163
166
  configuration surface verbatim too (`tabSize`, `htmlMode`, `gfm`, `linkTarget`,
164
167
  `internalLinkPrefix`, `headingOffset`, `highlightCode`, `headingAnchors`, `math`, `maxHeight` —
165
168
  see **Properties** above); plain-text mode
@@ -190,6 +193,6 @@ The Markdown part set also includes `task-list`, `task-item`, `task-item-checked
190
193
  `task-checkbox`, `table-wrapper`, `code-block-frame`, `code-block-copy-success`,
191
194
  `code-block-copy-error` and `streaming-tail`. `codeBlockHeader: boolean = false`
192
195
  (attribute `code-block-header`) enables the code-block header; `codeBlockChrome` (attribute
193
- `code-block-chrome`) is its compatibility alias. Successful and
196
+ `code-block-chrome`) is its deprecated compatibility alias (removal not before 23.0.0). Successful and
194
197
  failed writes pass through as `lr-copy` and `lr-copy-error`, carrying the immutable clipboard
195
198
  outcome, bubbling and composed.
@@ -212,4 +212,134 @@ class AccentTrigger extends LitElement {
212
212
  tuning the gap and hit size small enough to avoid wrapping is a guess that breaks at the next
213
213
  swatch added.
214
214
 
215
+ ### gemstoneAccentPicker — the signature accent selector
216
+
217
+ `gemstoneAccentPicker` names the canonical composition of `lr-icon-button`, `lr-popover`, and
218
+ `lr-swatch-picker mode="gemstone"`. It is a **pattern name, not an exported component or tag**.
219
+ Use it for application accent selection: a glowing current-gem trigger, one compact
220
+ “Gemstone: selected name” caption, and all nine canonical gemstones, in `GEMSTONE_KEYS` order, in
221
+ one row. Localize the caption, trigger, dialog, radiogroup, and item names. Omit introductory copy
222
+ and a second selected-name paragraph.
223
+
224
+ The consuming Lit component imports these granular entries and lists
225
+ `gemstoneSelectedGlyphStyles` in its `static styles` ahead of the CSS that follows.
226
+ `components/forms/icon-button/icon-button-register.js` can replace `icon-button.js` when no icon
227
+ button in the application uses `icon` or `src`:
228
+
229
+ ```ts
230
+ import '@aceshooting/lyra-ui/components/forms/icon-button/icon-button.js';
231
+ import '@aceshooting/lyra-ui/components/overlays/overlay/popover.js';
232
+ import '@aceshooting/lyra-ui/components/forms/swatch-picker/swatch-picker.js';
233
+ import {
234
+ GEMSTONE_KEYS,
235
+ GEMSTONES,
236
+ gemstoneGlyph,
237
+ gemstoneSelectedGlyphStyles,
238
+ type GemstoneKey,
239
+ } from '@aceshooting/lyra-ui/theme/gemstones.js';
240
+ ```
241
+
242
+ `--accent-color`, `--caption-color`, and `--text-color` are application-owned theme tokens.
243
+ `--lr-overlay-max-inline-size` lifts the popup's default 20rem cap so the 20rem palette plus the
244
+ popover's own padding fits. Both `--lr-gemstone-selected-*` values reach the trigger glyph and the
245
+ picker's checked glyph alike: a 0.42rem halo at 92% of the accent. Leave
246
+ `--lr-gemstone-selected-shine-duration` unset to keep the default 1.8s shine. The
247
+ `--lr-icon-button-*` values keep the trigger free of a rectangular fill at rest, on hover, and
248
+ while pressed:
249
+
250
+ ```css
251
+ .gemstone-accent-picker {
252
+ --lr-overlay-max-inline-size: 22rem;
253
+ --lr-gemstone-selected-color: color-mix(in srgb, var(--accent-color) 92%, transparent);
254
+ --lr-gemstone-selected-blur: .42rem;
255
+ }
256
+ .gemstone-accent-picker lr-icon-button {
257
+ --lr-icon-button-background: transparent;
258
+ --lr-icon-button-background-hover: transparent;
259
+ --lr-icon-button-background-active: transparent;
260
+ --lr-icon-button-border: none;
261
+ }
262
+ .gem { display: inline-flex; inline-size: 1.15rem; block-size: 1.15rem; }
263
+ .gem svg { inline-size: 100%; block-size: 100%; }
264
+ .palette {
265
+ box-sizing: border-box;
266
+ display: flex;
267
+ flex-direction: column;
268
+ gap: .15rem;
269
+ inline-size: 20rem;
270
+ padding: .3rem;
271
+ }
272
+ .heading {
273
+ margin: .2rem .3rem .5rem;
274
+ color: var(--caption-color);
275
+ font-size: .75rem;
276
+ font-weight: 600;
277
+ }
278
+ .name { color: var(--text-color); }
279
+ .palette lr-swatch-picker {
280
+ padding: 0 .3rem .3rem;
281
+ --lr-swatch-picker-hit-size: 1.75rem;
282
+ --lr-swatch-picker-wrap: nowrap;
283
+ --lr-swatch-picker-gap: .25rem;
284
+ }
285
+ @media (max-width: 30rem) {
286
+ .palette { inline-size: auto; }
287
+ .palette lr-swatch-picker {
288
+ --lr-swatch-picker-hit-size: 1.5rem;
289
+ --lr-swatch-picker-gap: .125rem;
290
+ }
291
+ }
292
+ ```
293
+
294
+ At the default 16px root font size, `1.75rem`/`.25rem` give 28px targets with 4px gaps, and
295
+ `1.5rem`/`.125rem` give 24px targets with 2px gaps. Below 30rem the palette shrinks to its row, so
296
+ the popup fits a 320px viewport without scrolling. A `calc(100dvw - 2.5rem)` palette overflows the
297
+ popup by 2px there. Apply `data-lr-gemstone-selected` to the transparent glyph wrapper, not the
298
+ whole trigger, so the halo follows the gem's silhouette. The focus ring belongs to keyboard focus;
299
+ do not add a permanent circular selection border. Leave the popover's default content padding and
300
+ arrow intact.
301
+
302
+ This Lit template assumes `selected` is a `GemstoneKey`. `accentLabel` names the dialog and the
303
+ radiogroup. `triggerLabel(name)` (“Accent color: Ruby”), `captionLabel` (“Gemstone:”, with the
304
+ locale's own separator), and `translateGemstone()` come from the application's catalog.
305
+ `onAccentChange()` validates the string and updates application state:
306
+
307
+ ```ts
308
+ // Build once per locale. A new array on every render re-creates every swatch and briefly blurs
309
+ // the focused one.
310
+ const items = GEMSTONE_KEYS.map((key) => ({
311
+ value: key,
312
+ color: GEMSTONES[key].fill,
313
+ label: translateGemstone(key),
314
+ gemstone: key,
315
+ }));
316
+
317
+ const name = translateGemstone(selected);
318
+ html`
319
+ <lr-popover class="gemstone-accent-picker" placement="bottom-end"
320
+ popup-role="dialog" aria-label=${accentLabel}>
321
+ <lr-icon-button slot="trigger" label=${triggerLabel(name)}>
322
+ <span class="gem" data-lr-gemstone-selected aria-hidden="true">${gemstoneGlyph(GEMSTONES[selected].fill)}</span>
323
+ </lr-icon-button>
324
+ <div class="palette">
325
+ <p class="heading">${captionLabel} <span class="name">${name}</span></p>
326
+ <lr-swatch-picker mode="gemstone" aria-label=${accentLabel}
327
+ .items=${items} .value=${selected}
328
+ @lr-change=${(event: CustomEvent<{ value: string }>) => onAccentChange(event.detail.value)}>
329
+ </lr-swatch-picker>
330
+ </div>
331
+ </lr-popover>
332
+ `;
333
+ ```
334
+
335
+ The parts already supply the behavior, so do not re-implement it. The picker is a roving-tabindex
336
+ `radiogroup` with `aria-checked` and a `:focus-visible` ring per swatch, and its Arrow keys swap
337
+ under RTL. The popover keeps `bottom-end` on the logical end under RTL and returns focus to the
338
+ trigger on Escape. `gemstoneSelectedGlyphStyles` stops the shine under
339
+ `prefers-reduced-motion: reduce`. Verify 320px and desktop layouts, enlarged text, and both color
340
+ modes. In a sidebar or settings panel, the caption and row may appear inline with the same glow
341
+ and spacing; use the compact tier when the container is narrow and allow wrapping if even that
342
+ tier cannot fit. Never shrink targets below 24px. Application theme application, default accent,
343
+ validation, and persistence remain caller-owned.
344
+
215
345
  ---