@aceshooting/lyra-ui 6.1.0 → 6.2.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 (663) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +10 -5
  3. package/custom-elements.json +7947 -860
  4. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts +67 -0
  5. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.d.ts.map +1 -0
  6. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +78 -0
  7. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js.map +1 -0
  8. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts +2 -0
  9. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.d.ts.map +1 -0
  10. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js +5 -0
  11. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js.map +1 -0
  12. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts +2 -0
  13. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.d.ts.map +1 -0
  14. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +17 -0
  15. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js.map +1 -0
  16. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
  17. package/dist/components/agent-tools/agent-trace/agent-trace.class.js.map +1 -1
  18. package/dist/components/agent-tools/agent-trace/agent-trace.styles.d.ts.map +1 -1
  19. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +2 -0
  20. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js.map +1 -1
  21. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +77 -0
  22. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts.map +1 -0
  23. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +144 -0
  24. package/dist/components/agent-tools/approval-queue/approval-queue.class.js.map +1 -0
  25. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts +2 -0
  26. package/dist/components/agent-tools/approval-queue/approval-queue.d.ts.map +1 -0
  27. package/dist/components/agent-tools/approval-queue/approval-queue.js +5 -0
  28. package/dist/components/agent-tools/approval-queue/approval-queue.js.map +1 -0
  29. package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts +2 -0
  30. package/dist/components/agent-tools/approval-queue/approval-queue.styles.d.ts.map +1 -0
  31. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +96 -0
  32. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js.map +1 -0
  33. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  34. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js.map +1 -1
  35. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
  36. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts.map +1 -1
  37. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -1
  38. package/dist/components/agent-tools/context-inspector/context-inspector.class.js.map +1 -1
  39. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +1 -1
  40. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js.map +1 -1
  41. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts.map +1 -1
  42. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +10 -8
  43. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js.map +1 -1
  44. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
  45. package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
  46. package/dist/components/agent-tools/terminal/terminal.class.js +1 -1
  47. package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
  48. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  49. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +11 -5
  50. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
  51. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  52. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
  53. package/dist/components/agent-tools/tool-result-view/registry.d.ts +38 -1
  54. package/dist/components/agent-tools/tool-result-view/registry.d.ts.map +1 -1
  55. package/dist/components/agent-tools/tool-result-view/registry.js.map +1 -1
  56. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +16 -1
  57. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  58. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +32 -1
  59. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
  60. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts.map +1 -1
  61. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +21 -10
  62. package/dist/components/agent-tools/trace-tree/trace-tree.class.js.map +1 -1
  63. package/dist/components/charts/chart/box-plot.class.d.ts +4 -0
  64. package/dist/components/charts/chart/box-plot.class.d.ts.map +1 -1
  65. package/dist/components/charts/chart/box-plot.class.js +43 -11
  66. package/dist/components/charts/chart/box-plot.class.js.map +1 -1
  67. package/dist/components/charts/chart/chart-loader.d.ts +39 -0
  68. package/dist/components/charts/chart/chart-loader.d.ts.map +1 -1
  69. package/dist/components/charts/chart/chart-loader.js +53 -0
  70. package/dist/components/charts/chart/chart-loader.js.map +1 -1
  71. package/dist/components/charts/chart/chart.class.d.ts +113 -10
  72. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  73. package/dist/components/charts/chart/chart.class.js +293 -20
  74. package/dist/components/charts/chart/chart.class.js.map +1 -1
  75. package/dist/components/charts/chart/lite-chart.class.d.ts +17 -5
  76. package/dist/components/charts/chart/lite-chart.class.d.ts.map +1 -1
  77. package/dist/components/charts/chart/lite-chart.class.js +60 -9
  78. package/dist/components/charts/chart/lite-chart.class.js.map +1 -1
  79. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +4 -0
  80. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts.map +1 -1
  81. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +17 -4
  82. package/dist/components/conversation/agent-workspace/agent-workspace.class.js.map +1 -1
  83. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +2 -7
  84. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
  85. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +29 -58
  86. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
  87. package/dist/components/conversation/code-block/code-block-core.class.d.ts.map +1 -1
  88. package/dist/components/conversation/code-block/code-block-core.class.js +12 -1
  89. package/dist/components/conversation/code-block/code-block-core.class.js.map +1 -1
  90. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  91. package/dist/components/conversation/code-block/code-block.class.js +3 -0
  92. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  93. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +7 -0
  94. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
  95. package/dist/components/conversation/conversation-item/conversation-item.class.js +8 -0
  96. package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
  97. package/dist/components/conversation/conversation-item/conversation-item.styles.d.ts.map +1 -1
  98. package/dist/components/conversation/conversation-item/conversation-item.styles.js +12 -0
  99. package/dist/components/conversation/conversation-item/conversation-item.styles.js.map +1 -1
  100. package/dist/components/conversation/markdown/markdown-core.class.d.ts.map +1 -1
  101. package/dist/components/conversation/markdown/markdown-core.class.js +2 -1
  102. package/dist/components/conversation/markdown/markdown-core.class.js.map +1 -1
  103. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  104. package/dist/components/conversation/markdown/markdown.class.js +2 -1
  105. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  106. package/dist/components/conversation/message-actions/message-actions.class.d.ts.map +1 -1
  107. package/dist/components/conversation/message-actions/message-actions.class.js +5 -2
  108. package/dist/components/conversation/message-actions/message-actions.class.js.map +1 -1
  109. package/dist/components/conversation/model-select/model-select.class.d.ts +4 -0
  110. package/dist/components/conversation/model-select/model-select.class.d.ts.map +1 -1
  111. package/dist/components/conversation/model-select/model-select.class.js +4 -0
  112. package/dist/components/conversation/model-select/model-select.class.js.map +1 -1
  113. package/dist/components/conversation/model-select/model-select.styles.d.ts.map +1 -1
  114. package/dist/components/conversation/model-select/model-select.styles.js +7 -3
  115. package/dist/components/conversation/model-select/model-select.styles.js.map +1 -1
  116. package/dist/components/conversation/thread-list/thread-list.class.d.ts +2 -0
  117. package/dist/components/conversation/thread-list/thread-list.class.d.ts.map +1 -1
  118. package/dist/components/conversation/thread-list/thread-list.class.js +4 -2
  119. package/dist/components/conversation/thread-list/thread-list.class.js.map +1 -1
  120. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +4 -2
  121. package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts.map +1 -1
  122. package/dist/components/conversation/typing-indicator/typing-indicator.class.js +4 -2
  123. package/dist/components/conversation/typing-indicator/typing-indicator.class.js.map +1 -1
  124. package/dist/components/conversation/typing-indicator/typing-indicator.styles.d.ts.map +1 -1
  125. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +35 -21
  126. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js.map +1 -1
  127. package/dist/components/data/graph-query-builder/graph-query-builder.styles.d.ts.map +1 -1
  128. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +2 -0
  129. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js.map +1 -1
  130. package/dist/components/data/heatmap/heatmap.class.d.ts +1 -6
  131. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  132. package/dist/components/data/heatmap/heatmap.class.js +118 -136
  133. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  134. package/dist/components/data/table/table.class.d.ts +27 -0
  135. package/dist/components/data/table/table.class.d.ts.map +1 -1
  136. package/dist/components/data/table/table.class.js +67 -2
  137. package/dist/components/data/table/table.class.js.map +1 -1
  138. package/dist/components/data/table/table.styles.d.ts.map +1 -1
  139. package/dist/components/data/table/table.styles.js +17 -2
  140. package/dist/components/data/table/table.styles.js.map +1 -1
  141. package/dist/components/data/tree/tree.class.d.ts +16 -1
  142. package/dist/components/data/tree/tree.class.d.ts.map +1 -1
  143. package/dist/components/data/tree/tree.class.js.map +1 -1
  144. package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -0
  145. package/dist/components/data/word-cloud/word-cloud.class.d.ts.map +1 -1
  146. package/dist/components/data/word-cloud/word-cloud.class.js +43 -0
  147. package/dist/components/data/word-cloud/word-cloud.class.js.map +1 -1
  148. package/dist/components/data/word-cloud/word-cloud.styles.d.ts.map +1 -1
  149. package/dist/components/data/word-cloud/word-cloud.styles.js +18 -15
  150. package/dist/components/data/word-cloud/word-cloud.styles.js.map +1 -1
  151. package/dist/components/forms/button/button.class.d.ts +51 -7
  152. package/dist/components/forms/button/button.class.d.ts.map +1 -1
  153. package/dist/components/forms/button/button.class.js +102 -15
  154. package/dist/components/forms/button/button.class.js.map +1 -1
  155. package/dist/components/forms/button/button.styles.d.ts.map +1 -1
  156. package/dist/components/forms/button/button.styles.js +12 -4
  157. package/dist/components/forms/button/button.styles.js.map +1 -1
  158. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  159. package/dist/components/forms/checkbox/checkbox.class.d.ts.map +1 -1
  160. package/dist/components/forms/checkbox/checkbox.class.js +19 -2
  161. package/dist/components/forms/checkbox/checkbox.class.js.map +1 -1
  162. package/dist/components/forms/combobox/combobox.class.d.ts +61 -10
  163. package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
  164. package/dist/components/forms/combobox/combobox.class.js +62 -17
  165. package/dist/components/forms/combobox/combobox.class.js.map +1 -1
  166. package/dist/components/forms/combobox/combobox.styles.d.ts.map +1 -1
  167. package/dist/components/forms/combobox/combobox.styles.js +7 -3
  168. package/dist/components/forms/combobox/combobox.styles.js.map +1 -1
  169. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  170. package/dist/components/forms/emoji-picker/emoji-picker.styles.d.ts.map +1 -1
  171. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +4 -5
  172. package/dist/components/forms/emoji-picker/emoji-picker.styles.js.map +1 -1
  173. package/dist/components/forms/icon-button/icon-button.class.d.ts +3 -0
  174. package/dist/components/forms/icon-button/icon-button.class.d.ts.map +1 -1
  175. package/dist/components/forms/icon-button/icon-button.class.js +3 -0
  176. package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
  177. package/dist/components/forms/icon-button/icon-button.styles.js +2 -2
  178. package/dist/components/forms/input/input.class.d.ts +25 -1
  179. package/dist/components/forms/input/input.class.d.ts.map +1 -1
  180. package/dist/components/forms/input/input.class.js +51 -4
  181. package/dist/components/forms/input/input.class.js.map +1 -1
  182. package/dist/components/forms/select/select.class.d.ts +23 -4
  183. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  184. package/dist/components/forms/select/select.class.js +24 -8
  185. package/dist/components/forms/select/select.class.js.map +1 -1
  186. package/dist/components/forms/select/select.styles.d.ts.map +1 -1
  187. package/dist/components/forms/select/select.styles.js +8 -3
  188. package/dist/components/forms/select/select.styles.js.map +1 -1
  189. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +16 -0
  190. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts.map +1 -1
  191. package/dist/components/forms/swatch-picker/swatch-picker.class.js +22 -4
  192. package/dist/components/forms/swatch-picker/swatch-picker.class.js.map +1 -1
  193. package/dist/components/forms/swatch-picker/swatch-picker.styles.d.ts.map +1 -1
  194. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +31 -4
  195. package/dist/components/forms/swatch-picker/swatch-picker.styles.js.map +1 -1
  196. package/dist/components/forms/textarea/textarea.class.d.ts +30 -0
  197. package/dist/components/forms/textarea/textarea.class.d.ts.map +1 -1
  198. package/dist/components/forms/textarea/textarea.class.js +54 -0
  199. package/dist/components/forms/textarea/textarea.class.js.map +1 -1
  200. package/dist/components/forms/token-input/token-input.styles.d.ts.map +1 -1
  201. package/dist/components/forms/token-input/token-input.styles.js +6 -1
  202. package/dist/components/forms/token-input/token-input.styles.js.map +1 -1
  203. package/dist/components/layout/app-rail/app-rail.class.d.ts +16 -4
  204. package/dist/components/layout/app-rail/app-rail.class.d.ts.map +1 -1
  205. package/dist/components/layout/app-rail/app-rail.class.js +36 -4
  206. package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
  207. package/dist/components/layout/app-rail/app-rail.styles.d.ts.map +1 -1
  208. package/dist/components/layout/app-rail/app-rail.styles.js +21 -2
  209. package/dist/components/layout/app-rail/app-rail.styles.js.map +1 -1
  210. package/dist/components/layout/card/card.class.d.ts +6 -0
  211. package/dist/components/layout/card/card.class.d.ts.map +1 -1
  212. package/dist/components/layout/card/card.class.js +9 -1
  213. package/dist/components/layout/card/card.class.js.map +1 -1
  214. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.d.ts.map +1 -1
  215. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +2 -0
  216. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js.map +1 -1
  217. package/dist/components/layout/segmented/segmented.class.d.ts +10 -1
  218. package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
  219. package/dist/components/layout/segmented/segmented.class.js +29 -2
  220. package/dist/components/layout/segmented/segmented.class.js.map +1 -1
  221. package/dist/components/layout/split/split.class.d.ts +14 -3
  222. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  223. package/dist/components/layout/split/split.class.js +65 -35
  224. package/dist/components/layout/split/split.class.js.map +1 -1
  225. package/dist/components/layout/widget/widget.class.d.ts +10 -0
  226. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  227. package/dist/components/layout/widget/widget.class.js +29 -1
  228. package/dist/components/layout/widget/widget.class.js.map +1 -1
  229. package/dist/components/media/attachment-chip/attachment-chip.styles.d.ts.map +1 -1
  230. package/dist/components/media/attachment-chip/attachment-chip.styles.js +7 -8
  231. package/dist/components/media/attachment-chip/attachment-chip.styles.js.map +1 -1
  232. package/dist/components/media/file-input/file-input.class.d.ts +16 -1
  233. package/dist/components/media/file-input/file-input.class.d.ts.map +1 -1
  234. package/dist/components/media/file-input/file-input.class.js +42 -2
  235. package/dist/components/media/file-input/file-input.class.js.map +1 -1
  236. package/dist/components/media/file-input/file-input.styles.d.ts.map +1 -1
  237. package/dist/components/media/file-input/file-input.styles.js +12 -0
  238. package/dist/components/media/file-input/file-input.styles.js.map +1 -1
  239. package/dist/components/media/media-card/media-card.class.d.ts +6 -2
  240. package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
  241. package/dist/components/media/media-card/media-card.class.js +7 -3
  242. package/dist/components/media/media-card/media-card.class.js.map +1 -1
  243. package/dist/components/media/qr-code/qr-code.class.d.ts +1 -6
  244. package/dist/components/media/qr-code/qr-code.class.d.ts.map +1 -1
  245. package/dist/components/media/qr-code/qr-code.class.js +31 -67
  246. package/dist/components/media/qr-code/qr-code.class.js.map +1 -1
  247. package/dist/components/overlays/empty/empty.class.d.ts +3 -0
  248. package/dist/components/overlays/empty/empty.class.d.ts.map +1 -1
  249. package/dist/components/overlays/empty/empty.class.js +3 -0
  250. package/dist/components/overlays/empty/empty.class.js.map +1 -1
  251. package/dist/components/overlays/empty/empty.styles.d.ts.map +1 -1
  252. package/dist/components/overlays/empty/empty.styles.js +6 -0
  253. package/dist/components/overlays/empty/empty.styles.js.map +1 -1
  254. package/dist/components/overlays/overlay/popover.class.d.ts +9 -0
  255. package/dist/components/overlays/overlay/popover.class.d.ts.map +1 -1
  256. package/dist/components/overlays/overlay/popover.class.js +13 -0
  257. package/dist/components/overlays/overlay/popover.class.js.map +1 -1
  258. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts +1 -0
  259. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.d.ts.map +1 -1
  260. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js +11 -5
  261. package/dist/components/retrieval/chunk-inspector/chunk-inspector.class.js.map +1 -1
  262. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +54 -0
  263. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts.map +1 -0
  264. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +147 -0
  265. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js.map +1 -0
  266. package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts +2 -0
  267. package/dist/components/retrieval/embedding-explorer/embedding-explorer.d.ts.map +1 -0
  268. package/dist/components/retrieval/embedding-explorer/embedding-explorer.js +5 -0
  269. package/dist/components/retrieval/embedding-explorer/embedding-explorer.js.map +1 -0
  270. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts +2 -0
  271. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.d.ts.map +1 -0
  272. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +51 -0
  273. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js.map +1 -0
  274. package/dist/components/retrieval/graph/graph.class.d.ts +1 -0
  275. package/dist/components/retrieval/graph/graph.class.d.ts.map +1 -1
  276. package/dist/components/retrieval/graph/graph.class.js +21 -6
  277. package/dist/components/retrieval/graph/graph.class.js.map +1 -1
  278. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +73 -0
  279. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts.map +1 -0
  280. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +109 -0
  281. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js.map +1 -0
  282. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts +2 -0
  283. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.d.ts.map +1 -0
  284. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js +5 -0
  285. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.js.map +1 -0
  286. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts +2 -0
  287. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.d.ts.map +1 -0
  288. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +56 -0
  289. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js.map +1 -0
  290. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +1 -0
  291. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts.map +1 -1
  292. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +12 -4
  293. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js.map +1 -1
  294. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts +58 -0
  295. package/dist/components/retrieval/rag-answer/rag-answer.class.d.ts.map +1 -0
  296. package/dist/components/retrieval/rag-answer/rag-answer.class.js +110 -0
  297. package/dist/components/retrieval/rag-answer/rag-answer.class.js.map +1 -0
  298. package/dist/components/retrieval/rag-answer/rag-answer.d.ts +2 -0
  299. package/dist/components/retrieval/rag-answer/rag-answer.d.ts.map +1 -0
  300. package/dist/components/retrieval/rag-answer/rag-answer.js +5 -0
  301. package/dist/components/retrieval/rag-answer/rag-answer.js.map +1 -0
  302. package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts +2 -0
  303. package/dist/components/retrieval/rag-answer/rag-answer.styles.d.ts.map +1 -0
  304. package/dist/components/retrieval/rag-answer/rag-answer.styles.js +13 -0
  305. package/dist/components/retrieval/rag-answer/rag-answer.styles.js.map +1 -0
  306. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts.map +1 -1
  307. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +6 -3
  308. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js.map +1 -1
  309. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -2
  310. package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
  311. package/dist/components/utility/diff-view/diff-view.class.js +16 -6
  312. package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
  313. package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
  314. package/dist/components/utility/icon/icon.class.js +5 -0
  315. package/dist/components/utility/icon/icon.class.js.map +1 -1
  316. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +16 -2
  317. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts.map +1 -1
  318. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +14 -4
  319. package/dist/components/viewers/archive-viewer/archive-viewer.class.js.map +1 -1
  320. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +14 -2
  321. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
  322. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +10 -2
  323. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
  324. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts +14 -2
  325. package/dist/components/viewers/contact-viewer/contact-viewer.class.d.ts.map +1 -1
  326. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +10 -2
  327. package/dist/components/viewers/contact-viewer/contact-viewer.class.js.map +1 -1
  328. package/dist/components/viewers/document-preview/document-preview.class.js +2 -2
  329. package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
  330. package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
  331. package/dist/components/viewers/document-viewer/document-viewer.class.js.map +1 -1
  332. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +14 -2
  333. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
  334. package/dist/components/viewers/email-viewer/email-viewer.class.js +10 -2
  335. package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
  336. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +15 -2
  337. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts.map +1 -1
  338. package/dist/components/viewers/geojson-view/geojson-view.class.js +13 -2
  339. package/dist/components/viewers/geojson-view/geojson-view.class.js.map +1 -1
  340. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +14 -2
  341. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
  342. package/dist/components/viewers/html-viewer/html-viewer.class.js +11 -3
  343. package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
  344. package/dist/components/viewers/include/include.class.d.ts +15 -2
  345. package/dist/components/viewers/include/include.class.d.ts.map +1 -1
  346. package/dist/components/viewers/include/include.class.js +13 -2
  347. package/dist/components/viewers/include/include.class.js.map +1 -1
  348. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +15 -2
  349. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts.map +1 -1
  350. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +14 -3
  351. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js.map +1 -1
  352. package/dist/internal/form-associated.d.ts.map +1 -1
  353. package/dist/internal/form-associated.js +57 -1
  354. package/dist/internal/form-associated.js.map +1 -1
  355. package/dist/internal/length-constraints.d.ts +27 -0
  356. package/dist/internal/length-constraints.d.ts.map +1 -0
  357. package/dist/internal/length-constraints.js +42 -0
  358. package/dist/internal/length-constraints.js.map +1 -0
  359. package/dist/internal/localization.d.ts +1 -1
  360. package/dist/internal/localization.d.ts.map +1 -1
  361. package/dist/internal/localization.js +27 -0
  362. package/dist/internal/localization.js.map +1 -1
  363. package/dist/internal/persisted-state.d.ts +27 -0
  364. package/dist/internal/persisted-state.d.ts.map +1 -0
  365. package/dist/internal/persisted-state.js +57 -0
  366. package/dist/internal/persisted-state.js.map +1 -0
  367. package/dist/internal/root-registration-allowlist.d.ts +1 -1
  368. package/dist/internal/root-registration-allowlist.d.ts.map +1 -1
  369. package/dist/internal/root-registration-allowlist.js +5 -0
  370. package/dist/internal/root-registration-allowlist.js.map +1 -1
  371. package/dist/internal/safe-url.d.ts +13 -2
  372. package/dist/internal/safe-url.d.ts.map +1 -1
  373. package/dist/internal/safe-url.js +27 -4
  374. package/dist/internal/safe-url.js.map +1 -1
  375. package/dist/internal/text-quote.d.ts +4 -0
  376. package/dist/internal/text-quote.d.ts.map +1 -1
  377. package/dist/internal/text-quote.js +21 -0
  378. package/dist/internal/text-quote.js.map +1 -1
  379. package/dist/internal/text-viewer-target.d.ts +27 -0
  380. package/dist/internal/text-viewer-target.d.ts.map +1 -0
  381. package/dist/internal/text-viewer-target.js +179 -0
  382. package/dist/internal/text-viewer-target.js.map +1 -0
  383. package/dist/internal/theme-watcher.d.ts +32 -0
  384. package/dist/internal/theme-watcher.d.ts.map +1 -0
  385. package/dist/internal/theme-watcher.js +67 -0
  386. package/dist/internal/theme-watcher.js.map +1 -0
  387. package/dist/lyra.d.ts +17 -5
  388. package/dist/lyra.d.ts.map +1 -1
  389. package/dist/lyra.js +11 -0
  390. package/dist/lyra.js.map +1 -1
  391. package/dist/theme/gemstones.d.ts +22 -0
  392. package/dist/theme/gemstones.d.ts.map +1 -0
  393. package/dist/theme/gemstones.js +44 -0
  394. package/dist/theme/gemstones.js.map +1 -0
  395. package/dist/theme/theme.d.ts +60 -0
  396. package/dist/theme/theme.d.ts.map +1 -0
  397. package/dist/theme/theme.js +132 -0
  398. package/dist/theme/theme.js.map +1 -0
  399. package/llms/components/lr-accordion-item.md +1 -0
  400. package/llms/components/lr-accordion.md +1 -0
  401. package/llms/components/lr-activity-feed.md +1 -0
  402. package/llms/components/lr-agent-eval-dashboard.md +29 -0
  403. package/llms/components/lr-agent-run.md +1 -0
  404. package/llms/components/lr-agent-trace.md +1 -0
  405. package/llms/components/lr-agent-workspace.md +1 -0
  406. package/llms/components/lr-animated-image.md +1 -0
  407. package/llms/components/lr-animation.md +1 -0
  408. package/llms/components/lr-app-rail-item.md +8 -2
  409. package/llms/components/lr-app-rail.md +8 -2
  410. package/llms/components/lr-approval-queue.md +27 -0
  411. package/llms/components/lr-archive-viewer.md +9 -3
  412. package/llms/components/lr-artifact-panel.md +1 -0
  413. package/llms/components/lr-attachment-chip.md +1 -0
  414. package/llms/components/lr-attachment-trigger.md +1 -0
  415. package/llms/components/lr-audio-visualizer.md +1 -0
  416. package/llms/components/lr-av-player.md +1 -0
  417. package/llms/components/lr-avatar-group.md +1 -0
  418. package/llms/components/lr-avatar.md +1 -0
  419. package/llms/components/lr-badge.md +1 -0
  420. package/llms/components/lr-bar-chart.md +5 -3
  421. package/llms/components/lr-box-plot.md +5 -3
  422. package/llms/components/lr-branch-picker.md +1 -0
  423. package/llms/components/lr-breadcrumb-item.md +1 -0
  424. package/llms/components/lr-breadcrumb.md +1 -0
  425. package/llms/components/lr-browser-frame.md +1 -0
  426. package/llms/components/lr-bubble-chart.md +5 -3
  427. package/llms/components/lr-button-group.md +1 -0
  428. package/llms/components/lr-button.md +29 -3
  429. package/llms/components/lr-calendar-viewer.md +7 -1
  430. package/llms/components/lr-calendar.md +1 -0
  431. package/llms/components/lr-callout.md +1 -0
  432. package/llms/components/lr-card.md +6 -0
  433. package/llms/components/lr-carousel-item.md +1 -0
  434. package/llms/components/lr-carousel.md +1 -0
  435. package/llms/components/lr-chart.md +50 -14
  436. package/llms/components/lr-chat-composer.md +1 -0
  437. package/llms/components/lr-chat-message.md +6 -0
  438. package/llms/components/lr-chat-viewport.md +1 -0
  439. package/llms/components/lr-checkbox-group.md +1 -0
  440. package/llms/components/lr-checkbox.md +5 -0
  441. package/llms/components/lr-checkpoint.md +1 -0
  442. package/llms/components/lr-chip-group.md +1 -0
  443. package/llms/components/lr-chip.md +1 -0
  444. package/llms/components/lr-chunk-inspector.md +1 -0
  445. package/llms/components/lr-citation-badge.md +6 -0
  446. package/llms/components/lr-code-block-core.md +1 -0
  447. package/llms/components/lr-code-block.md +1 -0
  448. package/llms/components/lr-code-editor.md +1 -0
  449. package/llms/components/lr-color-picker.md +1 -0
  450. package/llms/components/lr-combobox.md +61 -14
  451. package/llms/components/lr-command-palette.md +1 -0
  452. package/llms/components/lr-commit-card.md +1 -0
  453. package/llms/components/lr-community-card.md +1 -0
  454. package/llms/components/lr-compare-panel.md +1 -0
  455. package/llms/components/lr-confirm-bar.md +1 -0
  456. package/llms/components/lr-contact-viewer.md +7 -1
  457. package/llms/components/lr-context-inspector.md +1 -0
  458. package/llms/components/lr-context-meter.md +1 -0
  459. package/llms/components/lr-control-group.md +1 -0
  460. package/llms/components/lr-conversation-item.md +10 -2
  461. package/llms/components/lr-copy-button.md +1 -0
  462. package/llms/components/lr-csv-viewer.md +1 -0
  463. package/llms/components/lr-dashboard-grid.md +1 -0
  464. package/llms/components/lr-dataset-viewer.md +1 -0
  465. package/llms/components/lr-date-input.md +1 -0
  466. package/llms/components/lr-date-picker.md +1 -0
  467. package/llms/components/lr-details.md +1 -0
  468. package/llms/components/lr-dialog.md +1 -0
  469. package/llms/components/lr-diff-view.md +1 -0
  470. package/llms/components/lr-divider.md +1 -0
  471. package/llms/components/lr-dock-panel.md +1 -0
  472. package/llms/components/lr-document-compare.md +1 -0
  473. package/llms/components/lr-document-library.md +1 -0
  474. package/llms/components/lr-document-preview.md +5 -3
  475. package/llms/components/lr-document-viewer.md +1 -0
  476. package/llms/components/lr-docx-viewer.md +1 -0
  477. package/llms/components/lr-doughnut-chart.md +5 -3
  478. package/llms/components/lr-drawer.md +1 -0
  479. package/llms/components/lr-drilldown-panel.md +1 -0
  480. package/llms/components/lr-dropdown-item.md +1 -0
  481. package/llms/components/lr-dropdown.md +1 -0
  482. package/llms/components/lr-ebook-viewer.md +1 -0
  483. package/llms/components/lr-email-viewer.md +7 -1
  484. package/llms/components/lr-embedding-explorer.md +26 -0
  485. package/llms/components/lr-emoji-picker.md +1 -0
  486. package/llms/components/lr-empty.md +4 -1
  487. package/llms/components/lr-entity-card.md +1 -0
  488. package/llms/components/lr-entity-chip.md +1 -0
  489. package/llms/components/lr-entity-dossier.md +1 -0
  490. package/llms/components/lr-env-list.md +1 -0
  491. package/llms/components/lr-eval-dataset.md +1 -0
  492. package/llms/components/lr-eval-result.md +1 -0
  493. package/llms/components/lr-evaluation-run.md +1 -0
  494. package/llms/components/lr-export-button.md +1 -0
  495. package/llms/components/lr-file-icon.md +1 -0
  496. package/llms/components/lr-file-input.md +14 -1
  497. package/llms/components/lr-file-tree.md +1 -0
  498. package/llms/components/lr-filter-bar.md +1 -0
  499. package/llms/components/lr-flag.md +1 -0
  500. package/llms/components/lr-flow-canvas.md +1 -0
  501. package/llms/components/lr-flow-controls.md +1 -0
  502. package/llms/components/lr-flow-minimap.md +1 -0
  503. package/llms/components/lr-flow-node.md +1 -0
  504. package/llms/components/lr-flow-run-overlay.md +1 -0
  505. package/llms/components/lr-format-bytes.md +1 -0
  506. package/llms/components/lr-format-date.md +1 -0
  507. package/llms/components/lr-format-number.md +1 -0
  508. package/llms/components/lr-gauge.md +1 -0
  509. package/llms/components/lr-generation-status.md +1 -0
  510. package/llms/components/lr-geojson-view.md +5 -1
  511. package/llms/components/lr-graph-legend.md +1 -0
  512. package/llms/components/lr-graph-query-builder.md +1 -0
  513. package/llms/components/lr-graph.md +1 -0
  514. package/llms/components/lr-grounding-summary.md +1 -0
  515. package/llms/components/lr-handoff-divider.md +1 -0
  516. package/llms/components/lr-heatmap.md +1 -0
  517. package/llms/components/lr-highlight-layer.md +1 -0
  518. package/llms/components/lr-histogram.md +5 -3
  519. package/llms/components/lr-html-viewer.md +7 -1
  520. package/llms/components/lr-icon-button.md +10 -4
  521. package/llms/components/lr-icon.md +1 -0
  522. package/llms/components/lr-image-comparer.md +1 -0
  523. package/llms/components/lr-image-viewer.md +1 -0
  524. package/llms/components/lr-include.md +6 -0
  525. package/llms/components/lr-ingestion-queue.md +1 -0
  526. package/llms/components/lr-input.md +21 -1
  527. package/llms/components/lr-intersection-observer.md +1 -0
  528. package/llms/components/lr-json-viewer.md +1 -0
  529. package/llms/components/lr-kbd.md +1 -0
  530. package/llms/components/lr-knowledge-base-admin.md +30 -0
  531. package/llms/components/lr-knowledge-base.md +1 -0
  532. package/llms/components/lr-knowledge-graph-explorer.md +1 -0
  533. package/llms/components/lr-known-date.md +1 -0
  534. package/llms/components/lr-lightbox.md +1 -0
  535. package/llms/components/lr-line-chart.md +5 -3
  536. package/llms/components/lr-lite-chart.md +20 -2
  537. package/llms/components/lr-live-region.md +1 -0
  538. package/llms/components/lr-locale-picker.md +1 -0
  539. package/llms/components/lr-map.md +1 -0
  540. package/llms/components/lr-markdown-core.md +1 -0
  541. package/llms/components/lr-markdown.md +1 -0
  542. package/llms/components/lr-media-card.md +1 -0
  543. package/llms/components/lr-memory-panel.md +1 -0
  544. package/llms/components/lr-mention-popover.md +1 -0
  545. package/llms/components/lr-menu-item.md +1 -0
  546. package/llms/components/lr-menu.md +1 -0
  547. package/llms/components/lr-message-actions.md +1 -0
  548. package/llms/components/lr-message-feedback.md +1 -0
  549. package/llms/components/lr-mind-map.md +1 -0
  550. package/llms/components/lr-model-select.md +8 -1
  551. package/llms/components/lr-model-settings-panel.md +1 -0
  552. package/llms/components/lr-mutation-observer.md +1 -0
  553. package/llms/components/lr-neighbor-list.md +1 -0
  554. package/llms/components/lr-node-palette.md +1 -0
  555. package/llms/components/lr-notebook-viewer.md +1 -0
  556. package/llms/components/lr-number-input.md +5 -3
  557. package/llms/components/lr-option.md +61 -14
  558. package/llms/components/lr-page-rail.md +1 -0
  559. package/llms/components/lr-pagination.md +1 -0
  560. package/llms/components/lr-path-strip.md +1 -0
  561. package/llms/components/lr-pdf-viewer.md +1 -0
  562. package/llms/components/lr-phone-input.md +1 -0
  563. package/llms/components/lr-pie-chart.md +5 -3
  564. package/llms/components/lr-playback.md +1 -0
  565. package/llms/components/lr-polar-area-chart.md +5 -3
  566. package/llms/components/lr-policy-summary.md +1 -0
  567. package/llms/components/lr-poll-status.md +1 -0
  568. package/llms/components/lr-popover.md +4 -0
  569. package/llms/components/lr-pptx-viewer.md +7 -2
  570. package/llms/components/lr-progress-bar.md +1 -0
  571. package/llms/components/lr-progress-ring.md +1 -0
  572. package/llms/components/lr-provenance-panel.md +1 -0
  573. package/llms/components/lr-push-to-talk.md +1 -0
  574. package/llms/components/lr-qr-code.md +1 -0
  575. package/llms/components/lr-query-builder.md +1 -0
  576. package/llms/components/lr-radar-chart.md +5 -3
  577. package/llms/components/lr-radio-group.md +1 -0
  578. package/llms/components/lr-radio.md +1 -0
  579. package/llms/components/lr-rag-answer.md +31 -0
  580. package/llms/components/lr-random-content.md +1 -0
  581. package/llms/components/lr-rating.md +1 -0
  582. package/llms/components/lr-relative-time.md +1 -0
  583. package/llms/components/lr-reorder-item.md +1 -0
  584. package/llms/components/lr-reorder-list.md +1 -0
  585. package/llms/components/lr-resize-observer.md +1 -0
  586. package/llms/components/lr-responsive-panel.md +1 -0
  587. package/llms/components/lr-result-card.md +1 -0
  588. package/llms/components/lr-result-field.md +1 -0
  589. package/llms/components/lr-retrieval-results.md +1 -0
  590. package/llms/components/lr-retrieval-search.md +1 -0
  591. package/llms/components/lr-retrieval-trace.md +1 -0
  592. package/llms/components/lr-rubric-form.md +1 -0
  593. package/llms/components/lr-scatter-chart.md +5 -3
  594. package/llms/components/lr-scroller.md +1 -0
  595. package/llms/components/lr-segmented.md +8 -0
  596. package/llms/components/lr-select.md +16 -3
  597. package/llms/components/lr-sequence-strip.md +1 -0
  598. package/llms/components/lr-skeleton.md +1 -0
  599. package/llms/components/lr-slider.md +1 -0
  600. package/llms/components/lr-source-card.md +1 -0
  601. package/llms/components/lr-source-list.md +1 -0
  602. package/llms/components/lr-source-picker.md +1 -0
  603. package/llms/components/lr-span-waterfall.md +1 -0
  604. package/llms/components/lr-sparkline.md +1 -0
  605. package/llms/components/lr-spinner.md +1 -0
  606. package/llms/components/lr-split.md +11 -3
  607. package/llms/components/lr-spreadsheet-viewer.md +1 -0
  608. package/llms/components/lr-stack-trace.md +1 -0
  609. package/llms/components/lr-stat.md +1 -0
  610. package/llms/components/lr-stepper.md +1 -0
  611. package/llms/components/lr-stream-status.md +1 -0
  612. package/llms/components/lr-streaming-text.md +1 -0
  613. package/llms/components/lr-suggestion-chips.md +1 -0
  614. package/llms/components/lr-svg-viewer.md +1 -0
  615. package/llms/components/lr-swatch-picker.md +29 -6
  616. package/llms/components/lr-switch.md +1 -0
  617. package/llms/components/lr-table.md +19 -5
  618. package/llms/components/lr-tabs.md +1 -0
  619. package/llms/components/lr-tag.md +1 -0
  620. package/llms/components/lr-task-list.md +1 -0
  621. package/llms/components/lr-terminal.md +1 -0
  622. package/llms/components/lr-test-results.md +1 -0
  623. package/llms/components/lr-textarea.md +20 -0
  624. package/llms/components/lr-thinking-panel.md +1 -0
  625. package/llms/components/lr-thread-list.md +2 -1
  626. package/llms/components/lr-time-input.md +4 -2
  627. package/llms/components/lr-time-range.md +1 -0
  628. package/llms/components/lr-timeline-item.md +1 -0
  629. package/llms/components/lr-timeline.md +1 -0
  630. package/llms/components/lr-toast-item.md +3 -2
  631. package/llms/components/lr-toast.md +3 -2
  632. package/llms/components/lr-token-input.md +1 -0
  633. package/llms/components/lr-tool-approval-dialog.md +1 -0
  634. package/llms/components/lr-tool-call-chip.md +6 -0
  635. package/llms/components/lr-tool-param-form.md +1 -0
  636. package/llms/components/lr-tool-result-dialog.md +1 -0
  637. package/llms/components/lr-tool-result-view.md +53 -4
  638. package/llms/components/lr-tool-select-dialog.md +1 -0
  639. package/llms/components/lr-tool-timeline.md +1 -0
  640. package/llms/components/lr-tooltip.md +1 -0
  641. package/llms/components/lr-tour.md +1 -0
  642. package/llms/components/lr-trace-tree.md +1 -0
  643. package/llms/components/lr-transcript-feed.md +1 -0
  644. package/llms/components/lr-tree-node.md +1 -0
  645. package/llms/components/lr-tree.md +1 -0
  646. package/llms/components/lr-typing-indicator.md +13 -8
  647. package/llms/components/lr-usage-badge.md +1 -0
  648. package/llms/components/lr-virtual-list.md +1 -0
  649. package/llms/components/lr-voice-picker.md +1 -0
  650. package/llms/components/lr-widget-renderer.md +1 -0
  651. package/llms/components/lr-widget.md +13 -0
  652. package/llms/components/lr-word-cloud.md +9 -2
  653. package/llms/components/lr-xml-viewer.md +1 -0
  654. package/llms/components/lr-zoomable-frame.md +1 -0
  655. package/llms/index.md +8 -3
  656. package/llms/peers.md +2 -1
  657. package/llms/shared.md +88 -0
  658. package/llms-full.txt +684 -105
  659. package/llms.txt +2 -2
  660. package/package.json +20 -2
  661. package/vscode-css-data.json +176 -1
  662. package/vscode-html-data.json +551 -23
  663. package/web-types.json +676 -25
@@ -119,6 +119,50 @@
119
119
  }
120
120
  ]
121
121
  },
122
+ {
123
+ "name": "lr-agent-eval-dashboard",
124
+ "description": {
125
+ "kind": "markdown",
126
+ "value": "`<lr-agent-eval-dashboard>` — a controlled evaluation overview with metric cards, a trend chart,\nand run-status history. It never launches or scores evaluations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root dashboard wrapper. |\n| `chart` | The trend chart. |\n| `empty` | The empty history message. |\n| `heading` | The visible heading. |\n| `metric` | One metric card. |\n| `metrics` | The metric-card grid. |\n| `run` | One run row. |\n| `run-label` | A run label. |\n| `run-meta` | Status and metric value. |\n| `run-status` | A run status badge. |\n| `runs` | The run history. |\n| `runs-heading` | The run history heading. |"
127
+ },
128
+ "attributes": [
129
+ {
130
+ "name": "chart-height",
131
+ "description": {
132
+ "kind": "markdown",
133
+ "value": "Type: `string` \nDefault: `'220px'`"
134
+ }
135
+ },
136
+ {
137
+ "name": "label",
138
+ "description": {
139
+ "kind": "markdown",
140
+ "value": "Type: `string` \nDefault: `''`"
141
+ }
142
+ },
143
+ {
144
+ "name": "locale",
145
+ "description": {
146
+ "kind": "markdown",
147
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
148
+ }
149
+ },
150
+ {
151
+ "name": "metric-id",
152
+ "description": {
153
+ "kind": "markdown",
154
+ "value": "Type: `string` \nDefault: `''`"
155
+ }
156
+ },
157
+ {
158
+ "name": "show-chart",
159
+ "description": {
160
+ "kind": "markdown",
161
+ "value": "Type: `boolean` \nDefault: `true`"
162
+ }
163
+ }
164
+ ]
165
+ },
122
166
  {
123
167
  "name": "lr-agent-run",
124
168
  "description": {
@@ -616,7 +660,14 @@
616
660
  "name": "resizable",
617
661
  "description": {
618
662
  "kind": "markdown",
619
- "value": "Opts a continuously draggable width in for the `'full'` state — exposes a `[part=\"resizer\"]`\nhandle (pointer-drag and `ArrowLeft`/`ArrowRight` keyboard stepping, RTL-aware) clamped to\n`[minRailWidthPx, maxRailWidthPx]`. No built-in persistence a consumer that wants the\nchosen width to survive a reload should listen for `lr-rail-resize` and persist `widthPx`\nitself. `false` (the default) renders no resizer and leaves the fixed-width\n`--lr-app-rail-width` CSS token exactly as before this property existed.\n\nType: `boolean` \nDefault: `false`"
663
+ "value": "Opts a continuously draggable width in for the `'full'` state — exposes a `[part=\"resizer\"]`\nhandle (pointer-drag and `ArrowLeft`/`ArrowRight` keyboard stepping, RTL-aware) clamped to\n`[minRailWidthPx, maxRailWidthPx]`. Set `storageKey` to persist the chosen width (and `open`)\nacross reloads; otherwise listen for `lr-rail-resize` and persist `widthPx` yourself. `false`\n(the default) renders no resizer and leaves the fixed-width `--lr-app-rail-width` CSS token\nexactly as before this property existed.\n\nType: `boolean` \nDefault: `false`"
664
+ }
665
+ },
666
+ {
667
+ "name": "storage-key",
668
+ "description": {
669
+ "kind": "markdown",
670
+ "value": "When set, persists `open` and `railWidthPx` to `localStorage` under\n`lr-app-rail:${storageKey}`, restoring them on the next mount — mirrors `lr-split`'s\n`storage-key`. `mode` is breakpoint-derived and is never persisted. Unset (the default) means\nno persistence, exactly as before.\n\nType: `string | undefined`"
620
671
  }
621
672
  }
622
673
  ]
@@ -672,11 +723,55 @@
672
723
  }
673
724
  ]
674
725
  },
726
+ {
727
+ "name": "lr-approval-queue",
728
+ "description": {
729
+ "kind": "markdown",
730
+ "value": "`<lr-approval-queue>` — a controlled queue of tool calls that need human approval, with a\nkeyboard-accessible request list and a single reused `<lr-tool-approval-dialog>`. It never\nexecutes tools, applies permissions, or persists decisions; the host owns those operations.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root queue wrapper. |\n| `count` | The pending-count text. |\n| `empty` | The empty state. |\n| `heading` | The visible queue heading. |\n| `heading-row` | The heading and pending-count row. |\n| `list` | The request list. |\n| `request` | One selectable request row. |\n| `request-id` | The stable request id. |\n| `request-info` | Request name and id wrapper. |\n| `status` | The request status badge. |\n| `tool-name` | The proposed tool name. |"
731
+ },
732
+ "attributes": [
733
+ {
734
+ "name": "editable",
735
+ "description": {
736
+ "kind": "markdown",
737
+ "value": "Allows argument editing in the nested approval dialog.\n\nType: `boolean` \nDefault: `true`"
738
+ }
739
+ },
740
+ {
741
+ "name": "label",
742
+ "description": {
743
+ "kind": "markdown",
744
+ "value": "Accessible name and visible heading.\n\nType: `string` \nDefault: `''`"
745
+ }
746
+ },
747
+ {
748
+ "name": "locale",
749
+ "description": {
750
+ "kind": "markdown",
751
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
752
+ }
753
+ },
754
+ {
755
+ "name": "open",
756
+ "description": {
757
+ "kind": "markdown",
758
+ "value": "Whether the decision dialog is open.\n\nType: `boolean` \nDefault: `false`"
759
+ }
760
+ },
761
+ {
762
+ "name": "selected-id",
763
+ "description": {
764
+ "kind": "markdown",
765
+ "value": "The request currently shown in the dialog.\n\nType: `string` \nDefault: `''`"
766
+ }
767
+ }
768
+ ]
769
+ },
675
770
  {
676
771
  "name": "lr-archive-viewer",
677
772
  "description": {
678
773
  "kind": "markdown",
679
- "value": "Lists names and uncompressed sizes in a ZIP archive without rendering entry contents. File sizes\nare measured through JSZip's public async API, so opening an archive decompresses each file once.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `entry` | An archive entry row. |\n| `entry-icon` | The decorative folder or file icon. |\n| `entry-name` | The entry path. |\n| `entry-name-dir` | The entry path of a directory row (also carries `entry-name`). |\n| `entry-size` | The human-readable file size. |\n| `error` | The error region. |\n| `spinner` | The loading region. |"
774
+ "value": "Lists names and uncompressed sizes in a ZIP archive without rendering entry contents. File sizes\nare measured through JSZip's public async API, so opening an archive decompresses each file once.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root container. |\n| `body` | The archive listing body. |\n| `entry` | An archive entry row. |\n| `entry-icon` | The decorative folder or file icon. |\n| `entry-name` | The entry path. |\n| `entry-name-dir` | The entry path of a directory row (also carries `entry-name`). |\n| `entry-size` | The human-readable file size. |\n| `error` | The error region. |\n| `spinner` | The loading region. |"
680
775
  },
681
776
  "attributes": [
682
777
  {
@@ -1275,6 +1370,13 @@
1275
1370
  "value": "Type: `boolean` \nDefault: `true`"
1276
1371
  }
1277
1372
  },
1373
+ {
1374
+ "name": "data-labels",
1375
+ "description": {
1376
+ "kind": "markdown",
1377
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1378
+ }
1379
+ },
1278
1380
  {
1279
1381
  "name": "height",
1280
1382
  "description": {
@@ -1317,6 +1419,13 @@
1317
1419
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
1318
1420
  }
1319
1421
  },
1422
+ {
1423
+ "name": "stack-totals",
1424
+ "description": {
1425
+ "kind": "markdown",
1426
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
1427
+ }
1428
+ },
1320
1429
  {
1321
1430
  "name": "stacked",
1322
1431
  "description": {
@@ -1365,7 +1474,7 @@
1365
1474
  "name": "lr-box-plot",
1366
1475
  "description": {
1367
1476
  "kind": "markdown",
1368
- "value": "`<lr-box-plot>` — a box-and-whisker chart from precomputed five-number\nsummaries (no raw sample data is shipped to the browser). Beyond Web\nAwesome's chart set — useful for summarizing distributions.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `data-table` | An optional consumer-provided accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The box-plot canvas. |\n| `data-table` | The optional generated or slotted data table. |\n| `description` | The accessible box-plot summary. |"
1477
+ "value": "`<lr-box-plot>` — a box-and-whisker chart from precomputed five-number\nsummaries (no raw sample data is shipped to the browser). Beyond Web\nAwesome's chart set — useful for summarizing distributions.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `data-table` | An optional consumer-provided accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The box-plot canvas. |\n| `data-table` | The optional generated or slotted data table. |\n| `description` | The accessible box-plot summary. |\n| `error` | `role=\"alert\"` message shown instead of the canvas when the optional box-plot peer dependency fails to load. |"
1369
1478
  },
1370
1479
  "attributes": [
1371
1480
  {
@@ -1602,6 +1711,13 @@
1602
1711
  "value": "Type: `boolean` \nDefault: `true`"
1603
1712
  }
1604
1713
  },
1714
+ {
1715
+ "name": "data-labels",
1716
+ "description": {
1717
+ "kind": "markdown",
1718
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
1719
+ }
1720
+ },
1605
1721
  {
1606
1722
  "name": "height",
1607
1723
  "description": {
@@ -1644,6 +1760,13 @@
1644
1760
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
1645
1761
  }
1646
1762
  },
1763
+ {
1764
+ "name": "stack-totals",
1765
+ "description": {
1766
+ "kind": "markdown",
1767
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
1768
+ }
1769
+ },
1647
1770
  {
1648
1771
  "name": "stacked",
1649
1772
  "description": {
@@ -1692,7 +1815,7 @@
1692
1815
  "name": "lr-button",
1693
1816
  "description": {
1694
1817
  "kind": "markdown",
1695
- "value": "`<lr-button>` — a generic action-button primitive. Renders an internal native\n`<button part=\"base\">`. `type=\"submit\"`/`type=\"reset\"`\nare handled by this component itself via the host's own `closest('form')` — a shadow-internal\nnative `<button type=\"submit\">` does not participate in an ancestor light-DOM form's submission\non its own, since form-submitter semantics don't cross the shadow boundary.\n\nA host `aria-label` is forwarded to the internal button as a literal string (for an icon-only\nbutton with no visible label); external `aria-labelledby`/`aria-describedby` idrefs are not\ncopied across the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Default slot: the button's label content. |\n| `end` | Trailing icon/content, rendered after the label. |\n| `start` | Leading icon/content, rendered before the label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The internal native `<button>`. |\n| `end` | The `end` slot wrapper. |\n| `label` | The default-slot label wrapper. |\n| `spinner` | The loading spinner, present only while `loading` is `true`. |\n| `start` | The `start` slot wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-button-width` (default: `100%`) — Inline size of the internal button. The host defaults it to `100%` so the native button follows the host's own width; override to `auto` (or any other value) for a compact inline composition.\n- `--lr-button-hover-brightness` (default: `1.08`) — `filter: brightness()` multiplier applied while hovering a non-disabled button.\n- `--lr-button-active-scale` (default: `0.9875`) — `transform: scale()` factor applied while a non-disabled button is pressed.\n- `--lr-button-spinner-duration` (default: `1s`) — Rotation period of the `loading` spinner.\n- `--lr-button-accent` (default: `var(--lr-color-text)`) — Text/glyph color for the chrome-less appearances (`outlined`, `plain`, `link`). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-fill` (default: `var(--lr-color-surface)`) — Background of `appearance=\"filled\"`. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-on-fill` (default: `var(--lr-color-text)`) — Text color on top of `--lr-button-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-accent-fill` (default: `var(--lr-color-neutral)`) — Background of `appearance=\"accent\"` (and its border color). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-accent-on-fill` (default: `var(--lr-color-on-neutral)`) — Text color on top of `--lr-button-accent-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-border` (default: `var(--lr-color-border)`) — Border color of the internal button. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-outlined-border` (default: `var(--lr-color-border-strong)`) — Border color of `appearance=\"outlined\"`, which overrides `--lr-button-border`.\n- `--lr-button-outlined-fill` (default: `transparent`) — Background of `appearance=\"outlined\"`. Transparent by default; set it to tint the button (e.g. a faint surface wash behind the outline) without a `::part(base)` rule. Like `--lr-button-quiet-*`, it is deliberately *not* swapped per `variant`. Note that the `:hover` `filter: brightness()` applies to whatever fill is set, so a tinted outlined button now visibly brightens on hover where a transparent one did not.\n- `--lr-button-quiet-border` (default: `var(--lr-color-border)`) — Border color of `appearance=\"quiet\"`.\n- `--lr-button-quiet-text` (default: `var(--lr-color-text-quiet)`) — Text color of `appearance=\"quiet\"`.\n- `--lr-button-size-2xs` (default: `var(--lr-size-1-25rem)`) — `min-block-size` at `size=\"2xs\"`.\n- `--lr-button-size-xs` (default: `var(--lr-size-1-5rem)`) — `min-block-size` at `size=\"xs\"`.\n- `--lr-button-size-s` (default: `var(--lr-size-1-875rem)`) — `min-block-size` at `size=\"s\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"s\"` control height.\n- `--lr-button-size-m` (default: `var(--lr-size-2-5rem)`) — `min-block-size` at `size=\"m\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own default control height, so a default-size button sitting next to a default-size input/select/combobox in the same row lines up.\n- `--lr-button-size-l` (default: `var(--lr-size-3rem)`) — `min-block-size` at `size=\"l\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"l\"` control height.\n- `--lr-button-size-xl` (default: `var(--lr-size-3-5rem)`) — `min-block-size` at `size=\"xl\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"xl\"` control height.\n- `--lr-button-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). Override it to retune a tier without a `::part(base)` rule; `appearance=\"link\"` ignores it (it renders with zero padding).\n- `--lr-button-padding-inline` (default: `var(--lr-space-m)`) — Inline padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it.\n- `--lr-button-font-size` (default: `var(--lr-font-size-m)`) — Font size of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it and inherits the ambient font instead.\n- `--lr-button-min-height` (default: `var(--lr-button-size-m)`) — The active tier's `min-block-size` floor. Re-assigned per `size` tier to that tier's own `--lr-button-size-*` token, and used as the fallback when `--lr-button-height` is unset.\n- `--lr-button-height` — Exact height of the internal button. **Undeclared by default** — so the button keeps the active tier's `min-block-size` floor and an `auto` height, exactly as before. Set it (e.g. to pin the button to a fixed toolbar row) to both floor *and* cap the height. Never declare it as `auto`: a declared value wins over the `var()` fallback arm and would make every tier's floor dead code. `appearance=\"link\"` ignores it.\n- `--lr-button-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon/label and any slotted content in the internal button. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(base)` rule.\n- `--lr-button-radius` (default: `var(--lr-radius)`) — Corner radius of the internal button. Does not vary by `size` tier. `appearance=\"link\"` ignores it (it renders with zero radius)."
1818
+ "value": "`<lr-button>` — a generic action-button primitive. Renders an internal native\n`<button part=\"base\">`. `type=\"submit\"`/`type=\"reset\"`\nare handled by this component itself via the host's own `closest('form')` — a shadow-internal\nnative `<button type=\"submit\">` does not participate in an ancestor light-DOM form's submission\non its own, since form-submitter semantics don't cross the shadow boundary.\n\nWhen `href` is set to a safe link URL (`http:`/`https:`/`blob:`/`mailto:`/relative — see\n`safeLinkHref`, or `safeDownloadHref` which drops `mailto:` when `download` is set) the root\nrenders as a real `<a part=\"base\" href=…>` instead — for a link styled\nas a button (e.g. a CTA). Native navigation is then the anchor's own activation, so the\nsubmit/reset click handler and `type` (submit/reset) have no effect in that mode. When the\nbutton is disabled (its own `disabled` or an ancestor `<fieldset disabled>`) the anchor renders\nwith `aria-disabled=\"true\"` and **no `href`** — an href-less anchor is not focusable or\nnavigable, so a disabled link button genuinely cannot be activated (unlike a bare\n`aria-disabled` on a still-navigable link). An unsafe/unparseable `href` falls back to the\nnative `<button>`.\n\nA host `aria-label` is forwarded to the internal button/anchor as a literal string (for an\nicon-only button with no visible label); external `aria-labelledby`/`aria-describedby` idrefs\nare not copied across the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Default slot: the button's label content. |\n| `end` | Trailing icon/content, rendered after the label. |\n| `start` | Leading icon/content, rendered before the label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The internal native `<button>` (or an `<a>` when `href` resolves to a safe link). |\n| `end` | The `end` slot wrapper. |\n| `label` | The default-slot label wrapper. |\n| `spinner` | The loading spinner, present only while `loading` is `true`. |\n| `start` | The `start` slot wrapper. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-button-width` (default: `100%`) — Inline size of the internal button. The host defaults it to `100%` so the native button follows the host's own width; override to `auto` (or any other value) for a compact inline composition.\n- `--lr-button-hover-brightness` (default: `1.08`) — `filter: brightness()` multiplier applied while hovering a non-disabled button.\n- `--lr-button-active-scale` (default: `0.9875`) — `transform: scale()` factor applied while a non-disabled button is pressed.\n- `--lr-button-spinner-duration` (default: `1s`) — Rotation period of the `loading` spinner.\n- `--lr-button-accent` (default: `var(--lr-color-text)`) — Text/glyph color for the chrome-less appearances (`outlined`, `plain`, `link`). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-fill` (default: `var(--lr-color-surface)`) — Background of `appearance=\"filled\"`. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-on-fill` (default: `var(--lr-color-text)`) — Text color on top of `--lr-button-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-accent-fill` (default: `var(--lr-color-neutral)`) — Background of `appearance=\"accent\"` (and its border color). Swapped per `variant` to that variant's semantic color.\n- `--lr-button-accent-on-fill` (default: `var(--lr-color-on-neutral)`) — Text color on top of `--lr-button-accent-fill`. Swapped per `variant` to that variant's `on-*` color.\n- `--lr-button-border` (default: `var(--lr-color-border)`) — Border color of the internal button. Swapped per `variant` to that variant's semantic color.\n- `--lr-button-outlined-border` (default: `var(--lr-color-border-strong)`) — Border color of `appearance=\"outlined\"`, which overrides `--lr-button-border`.\n- `--lr-button-outlined-fill` (default: `transparent`) — Background of `appearance=\"outlined\"`. Transparent by default; set it to tint the button (e.g. a faint surface wash behind the outline) without a `::part(base)` rule. Like `--lr-button-quiet-*`, it is deliberately *not* swapped per `variant`. Note that the `:hover` `filter: brightness()` applies to whatever fill is set, so a tinted outlined button now visibly brightens on hover where a transparent one did not.\n- `--lr-button-quiet-border` (default: `var(--lr-color-border)`) — Border color of `appearance=\"quiet\"`.\n- `--lr-button-quiet-text` (default: `var(--lr-color-text-quiet)`) — Text color of `appearance=\"quiet\"`.\n- `--lr-button-size-2xs` (default: `var(--lr-size-1-25rem)`) — `min-block-size` at `size=\"2xs\"`.\n- `--lr-button-size-xs` (default: `var(--lr-size-1-5rem)`) — `min-block-size` at `size=\"xs\"`.\n- `--lr-button-size-s` (default: `var(--lr-size-1-875rem)`) — `min-block-size` at `size=\"s\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"s\"` control height.\n- `--lr-button-size-m` (default: `var(--lr-size-2-5rem)`) — `min-block-size` at `size=\"m\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own default control height, so a default-size button sitting next to a default-size input/select/combobox in the same row lines up.\n- `--lr-button-size-l` (default: `var(--lr-size-3rem)`) — `min-block-size` at `size=\"l\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"l\"` control height.\n- `--lr-button-size-xl` (default: `var(--lr-size-3-5rem)`) — `min-block-size` at `size=\"xl\"`. Matches `lr-input`/`lr-select`/`lr-combobox`'s own `size=\"xl\"` control height.\n- `--lr-button-padding-block` (default: `var(--lr-space-xs)`) — Block padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). Override it to retune a tier without a `::part(base)` rule; `appearance=\"link\"` ignores it (it renders with zero padding).\n- `--lr-button-padding-inline` (default: `var(--lr-space-m)`) — Inline padding of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it.\n- `--lr-button-font-size` (default: `var(--lr-font-size-m)`) — Font size of the internal button, re-assigned per `size` tier (the default is the `m` tier's value). `appearance=\"link\"` ignores it and inherits the ambient font instead.\n- `--lr-button-min-height` (default: `var(--lr-button-size-m)`) — The active tier's `min-block-size` floor. Re-assigned per `size` tier to that tier's own `--lr-button-size-*` token, and used as the fallback when `--lr-button-height` is unset.\n- `--lr-button-height` — Exact height of the internal button. **Undeclared by default** — so the button keeps the active tier's `min-block-size` floor and an `auto` height, exactly as before. Set it (e.g. to pin the button to a fixed toolbar row) to both floor *and* cap the height. Never declare it as `auto`: a declared value wins over the `var()` fallback arm and would make every tier's floor dead code. `appearance=\"link\"` ignores it.\n- `--lr-button-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon/label and any slotted content in the internal button. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(base)` rule.\n- `--lr-button-radius` (default: `var(--lr-radius)`) — Corner radius of the internal button. Does not vary by `size` tier. `appearance=\"link\"` ignores it (it renders with zero radius).\n- `--lr-button-shadow` — Box shadow of the internal button. **Undeclared by default**, so `box-shadow` falls back to `none` — byte-identical to before this property existed. Set it (e.g. an elevated/floating action button) without a `::part(base)` rule."
1696
1819
  },
1697
1820
  "attributes": [
1698
1821
  {
@@ -1709,6 +1832,20 @@
1709
1832
  "value": "Type: `boolean`"
1710
1833
  }
1711
1834
  },
1835
+ {
1836
+ "name": "download",
1837
+ "description": {
1838
+ "kind": "markdown",
1839
+ "value": "Native anchor `download` attribute, used only while `href` resolves to a link. Ignored in\n`<button>` mode.\n\nType: `string | undefined`"
1840
+ }
1841
+ },
1842
+ {
1843
+ "name": "href",
1844
+ "description": {
1845
+ "kind": "markdown",
1846
+ "value": "When set to a safe link URL, the button's root renders as a real `<a href=…>` instead of a\n`<button>` — for a link styled as a button (e.g. a CTA). Unset (the default) renders a plain\n`<button>`, byte-for-byte as before. Only `http:`/`https:`/`blob:`/`mailto:`/relative URLs are\nhonored (see `safeLinkHref`); an unsafe/unparseable value falls back to the native `<button>`.\nSetting `download` narrows the allowlist to `safeDownloadHref`'s, which drops `mailto:` — a\nmail handoff names no retrievable bytes, so it cannot be a download target.\n`type` (submit/reset) has no effect while the anchor renders — an anchor has no submit/reset\nconcept, and native navigation is its own activation. While the button is disabled the anchor\nrenders with no `href` (see the class doc comment), so a disabled link button cannot navigate.\n\nType: `string | undefined`"
1847
+ }
1848
+ },
1712
1849
  {
1713
1850
  "name": "loading",
1714
1851
  "description": {
@@ -1730,6 +1867,13 @@
1730
1867
  "value": "Visual size, `'2xs'`–`'xl'`. `'2xs'` is the tightest tier — a sub-`xs` size for dense,\ntoolbar-embedded controls (e.g. beside a native `<input type=\"search\">` in a compact dialog\nheader). `'m'` (the default) is the standard size.\n\nType: `ButtonSize` \nDefault: `'m'`"
1731
1868
  }
1732
1869
  },
1870
+ {
1871
+ "name": "target",
1872
+ "description": {
1873
+ "kind": "markdown",
1874
+ "value": "Native anchor `target`, used only while `href` resolves to a link. Setting this to `'_blank'`\n(or any other target) automatically derives `rel=\"noopener noreferrer\"` on the rendered anchor\n— matching `lr-card`'s/`lr-stat`'s identical pattern; `rel` is never independently settable, to\nclose the reverse-tabnabbing vector. Ignored in `<button>` mode.\n\nType: `string | undefined`"
1875
+ }
1876
+ },
1733
1877
  {
1734
1878
  "name": "type",
1735
1879
  "description": {
@@ -1952,6 +2096,13 @@
1952
2096
  "kind": "markdown",
1953
2097
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
1954
2098
  }
2099
+ },
2100
+ {
2101
+ "name": "target",
2102
+ "description": {
2103
+ "kind": "markdown",
2104
+ "value": "Native anchor target, used only while `href` resolves to a link. Setting this to `'_blank'`\n(or any other target) automatically derives `rel=\"noopener noreferrer\"` on the rendered\nanchor -- there is no separately-settable `rel` property, so a consumer can't forget it and\nleave the opened page holding a `window.opener` back-reference (reverse-tabnabbing). Matches\n`lr-stat`'s/`lr-app-rail-item`'s identical pattern.\n\nType: `string | undefined`"
2105
+ }
1955
2106
  }
1956
2107
  ]
1957
2108
  },
@@ -2040,7 +2191,7 @@
2040
2191
  "name": "lr-chart",
2041
2192
  "description": {
2042
2193
  "kind": "markdown",
2043
- "value": "`<lr-chart>` — the core Chart.js wrapper every other `lr-*-chart` tag\nsubclasses. Requires the optional peer deps `chart.js` + `chartjs-plugin-zoom`.\n\n**API mirror note:** the real `wa-chart` docs page\n(https://webawesome.com/docs/components/chart/) documents a `config:\nChartJS['config']` property alongside its simplified attributes — \"a\nflexible wrapper around Chart.js\" supporting *both* simplified attributes\nand full Chart.js configuration passthrough, not a `data`/`options` prop\npair. `lr-chart` mirrors that dual surface: the `Series`-based\n`datasets`/`labels`/`type`/`legend`/`xLabel`/`yLabel`/`zoom` attributes\nbelow are the simplified surface (compatible with WA's `type`, `xLabel`,\n`yLabel`, `withoutLegend`-equivalent `legend`, etc.), and the additional\n`config` property is the raw-passthrough escape hatch — a\n`Partial<ChartConfiguration>` deep-merged over the generated config in\n`buildConfig()`, mirroring WA's `config` property without discarding the\n`Series` shape the rest of this component family (subclasses, box-plot,\nhistogram) is built on.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `description` | The accessible chart summary. |\n| `error` | `role=\"alert\"` message shown instead of `canvas` when the optional `chart.js` peer dependency is not installed. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw."
2194
+ "value": "`<lr-chart>` — the core Chart.js wrapper every other `lr-*-chart` tag\nsubclasses. Requires the optional peer dep `chart.js`; `chartjs-plugin-zoom`\n(for `zoom`) and `chartjs-plugin-datalabels` (for `data-labels`/`stack-totals`)\nare further optional peers loaded only on demand.\n\n**API mirror note:** the real `wa-chart` docs page\n(https://webawesome.com/docs/components/chart/) documents a `config:\nChartJS['config']` property alongside its simplified attributes — \"a\nflexible wrapper around Chart.js\" supporting *both* simplified attributes\nand full Chart.js configuration passthrough, not a `data`/`options` prop\npair. `lr-chart` mirrors that dual surface: the `Series`-based\n`datasets`/`labels`/`type`/`legend`/`xLabel`/`yLabel`/`zoom` attributes\nbelow are the simplified surface (compatible with WA's `type`, `xLabel`,\n`yLabel`, `withoutLegend`-equivalent `legend`, etc.), and the additional\n`config` property is the raw-passthrough escape hatch — a\n`Partial<ChartConfiguration>` deep-merged over the generated config in\n`buildConfig()`, mirroring WA's `config` property without discarding the\n`Series` shape the rest of this component family (subclasses, box-plot,\nhistogram) is built on.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `center` | Optional overlay content positioned at the chart area's center. Useful for doughnut and pie totals. |\n| `data-table` | An optional consumer-provided accessible table alternative. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The chart wrapper. |\n| `canvas` | The Chart.js canvas. |\n| `center` | The chart-area-centered overlay wrapper for the `center` slot. |\n| `data-table` | The optional generated or slotted data table. |\n| `description` | The accessible chart summary. |\n| `error` | `role=\"alert\"` message shown instead of `canvas` when the optional `chart.js` peer dependency is not installed. |\n| `reset-zoom-button` | The reset-zoom control when zoom is active. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-chart-height` (default: `var(--lr-size-280px)`) — The host's `block-size`. Set on the host element from the `height` property on every change (custom properties only cascade downward, so it cannot be set from inside the shadow root); a host-level override is overwritten the next time `height` changes.\n- `--lr-chart-grid-color` (default: `var(--lr-color-border)`) — Grid-line color. Resolved via `getComputedStyle` on every draw (Chart.js paints to canvas and cannot consume `var()`).\n- `--lr-chart-tick-color` (default: `var(--lr-color-text-quiet)`) — Axis tick-label color; also used for the `xLabel`/`yLabel`/`y2Label` axis-title text (there is no separate title-color token). Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-legend-color` (default: `var(--lr-color-text)`) — Legend label color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-bg` (default: `var(--lr-color-surface)`) — Tooltip background color. Resolved via `getComputedStyle` on every draw.\n- `--lr-chart-tooltip-text` (default: `var(--lr-color-text)`) — Tooltip text color. Resolved via `getComputedStyle` on every draw."
2044
2195
  },
2045
2196
  "attributes": [
2046
2197
  {
@@ -2071,6 +2222,13 @@
2071
2222
  "value": "Type: `boolean` \nDefault: `true`"
2072
2223
  }
2073
2224
  },
2225
+ {
2226
+ "name": "data-labels",
2227
+ "description": {
2228
+ "kind": "markdown",
2229
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
2230
+ }
2231
+ },
2074
2232
  {
2075
2233
  "name": "height",
2076
2234
  "description": {
@@ -2113,6 +2271,13 @@
2113
2271
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
2114
2272
  }
2115
2273
  },
2274
+ {
2275
+ "name": "stack-totals",
2276
+ "description": {
2277
+ "kind": "markdown",
2278
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
2279
+ }
2280
+ },
2116
2281
  {
2117
2282
  "name": "stacked",
2118
2283
  "description": {
@@ -2441,7 +2606,7 @@
2441
2606
  "name": "lr-checkbox",
2442
2607
  "description": {
2443
2608
  "kind": "markdown",
2444
- "value": "`<lr-checkbox>` — a boolean form control. Structurally the same idea as\n`<lr-switch>` (form-associated via `ElementInternals`, click and\nSpace both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lr-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nDeliberately no hint/error chrome of its own -- the default slot already carries real, visible\nlabel text (see `@slot` below), so a labeled-field frame built around `label`/`hint`/`errorText`\nprops has nothing to add here. A consumer needing hint/error messaging composes it in their own\nwrapper (e.g. `<lr-tool-param-form>` folds a boolean field's validation error into adjacent\ndescription text / `aria-label` rather than a `<lr-checkbox>`-owned slot), the same way a\nnative `<input type=\"checkbox\">` plus `<label>` pairs with an externally-owned error node.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the box. Clicking it toggles the checkbox, the same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The whole interactive control (`role=\"checkbox\"`); wraps the box and label. |\n| `box` | The small square that shows the checkmark/indeterminate dash. |\n| `checkmark` | The checkmark (or indeterminate dash) glyph inside the box. |\n| `label` | The wrapper around the default slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-checkbox-label-indent` (default: `calc(min(var(--lr-icon-button-size), 1.75rem) + var(--lr-space-s))`) — The inline distance from the control's start edge to the start of the label text, i.e. the box's own floor plus the gap next to it. Published so a consumer composing per-option hint text under the label can align it without re-deriving that formula from the shadow styles, and used as the source of the real gap so the two cannot drift. Setting it on the element (or on `lr-checkbox` in your own stylesheet) moves the label; because custom properties inherit down and not sideways, it is *not* readable from a sibling node in your tree — align a sibling by computing the same formula from `--lr-theme-icon-button-size` and `--lr-theme-space-s`, which you control.\n- `--lr-checkbox-checked-bg` (default: `var(--lr-color-brand)`) — Background of `[part='box']` while `checked` or `indeterminate`. Retint just this control's checked fill without touching the shared `--lr-color-brand` token every other component also reads.\n- `--lr-checkbox-checked-border` (default: `var(--lr-color-brand)`) — Border color of `[part='box']` while `checked` or `indeterminate`."
2609
+ "value": "`<lr-checkbox>` — a boolean form control. Structurally the same idea as\n`<lr-switch>` (form-associated via `ElementInternals`, click and\nSpace both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lr-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nDeliberately no hint/error chrome of its own -- the default slot already carries real, visible\nlabel text (see `@slot` below), so a labeled-field frame built around `label`/`hint`/`errorText`\nprops has nothing to add here. A consumer needing hint/error messaging composes it in their own\nwrapper (e.g. `<lr-tool-param-form>` folds a boolean field's validation error into adjacent\ndescription text / `aria-label` rather than a `<lr-checkbox>`-owned slot), the same way a\nnative `<input type=\"checkbox\">` plus `<label>` pairs with an externally-owned error node.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Label text, rendered next to the box. Clicking it toggles the checkbox, the same as clicking a native checkbox's associated `<label>`. If left empty, set `aria-label` on the host so the control still has an accessible name. A host `aria-describedby` attribute is forwarded to the internal `role=\"checkbox\"` so externally-owned descriptions can be associated with this individual control. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The whole interactive control (`role=\"checkbox\"`); wraps the box and label. |\n| `box` | The small square that shows the checkmark/indeterminate dash. |\n| `checkmark` | The checkmark (or indeterminate dash) glyph inside the box. |\n| `label` | The wrapper around the default slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-checkbox-label-indent` (default: `calc(min(var(--lr-icon-button-size), 1.75rem) + var(--lr-space-s))`) — The inline distance from the control's start edge to the start of the label text, i.e. the box's own floor plus the gap next to it. Published so a consumer composing per-option hint text under the label can align it without re-deriving that formula from the shadow styles, and used as the source of the real gap so the two cannot drift. Setting it on the element (or on `lr-checkbox` in your own stylesheet) moves the label; because custom properties inherit down and not sideways, it is *not* readable from a sibling node in your tree — align a sibling by computing the same formula from `--lr-theme-icon-button-size` and `--lr-theme-space-s`, which you control.\n- `--lr-checkbox-checked-bg` (default: `var(--lr-color-brand)`) — Background of `[part='box']` while `checked` or `indeterminate`. Retint just this control's checked fill without touching the shared `--lr-color-brand` token every other component also reads.\n- `--lr-checkbox-checked-border` (default: `var(--lr-color-brand)`) — Border color of `[part='box']` while `checked` or `indeterminate`."
2445
2610
  },
2446
2611
  "attributes": [
2447
2612
  {
@@ -3245,7 +3410,7 @@
3245
3410
  "name": "lr-combobox",
3246
3411
  "description": {
3247
3412
  "kind": "markdown",
3248
- "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-icon` | An async option row's optional decorative leading visual. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag__remove-button` | A tag's remove button. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-combobox-trigger-min-height` — Minimum input-container block size, scaled by `size`.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-font-size` — Input text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row."
3413
+ "value": "`<lr-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lr-`.\n\nOptions are `<lr-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lr-show`/`lr-hide`/`lr-clear`.\nStandard size tiers share their outer control height with sibling Lyra controls; the decorative\nexpand icon scales inside that allocation without creating an independent action target.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the filter input and the built-in clear action, and before the expand icon — so consumer content never sits outboard of the dropdown chevron. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value tags and the filter input. Slotted content is decorative chrome, not an option: `collectOptions()` only ever collects `<lr-option>` elements from the default slot. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear button. |\n| `combobox` | The input container (positioning anchor). |\n| `combobox-input` | The text input. |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, combobox, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-badge` | An async option row's optional trailing metadata badge. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-icon` | An async option row's optional decorative leading visual. |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-overflow` | The \"+N more\" indicator shown when rows are capped by `maxRender`. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `tag` | An individual selected tag. |\n| `tag__remove-button` | A tag's remove button. |\n| `tags` | The multi-select tag container. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-combobox-trigger-padding` — Padding inside the input container.\n- `--lr-combobox-trigger-min-height` — Minimum input-container block size, scaled by `size`.\n- `--lr-combobox-trigger-height` — Exact input-container height. Unset by default, which leaves `--lr-combobox-trigger-min-height` as a floor only; set it to a length to both floor and cap the row (e.g. to pixel-match `<lr-input>`/`<lr-select>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element. Intended for a single-row combobox: in `multiple` mode a tag row long enough to wrap overflows the pinned box visibly (nothing is clipped or made unreachable), so leave it unset there.\n- `--lr-combobox-font-size` — Input text size.\n- `--lr-combobox-tag-padding` — Selected-tag padding.\n- `--lr-combobox-tag-font-size` — Selected-tag text size.\n- `--lr-combobox-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-combobox-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments, tags, and filter input inside the trigger row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(combobox)` rule.\n- `--lr-combobox-radius` (default: `var(--lr-radius)`) — Corner radius of the trigger row (`[part='combobox']`). Does not vary by `size` tier.\n- `--lr-combobox-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-combobox-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-combobox-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-combobox-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-combobox-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row."
3249
3414
  },
3250
3415
  "attributes": [
3251
3416
  {
@@ -3350,7 +3515,7 @@
3350
3515
  "name": "max-render",
3351
3516
  "description": {
3352
3517
  "kind": "markdown",
3353
- "value": "Maximum number of rows rendered before the rest collapse behind the overflow indicator\n(the current selection is always kept visible regardless). Sanitized to a finite,\nnon-negative integer.\n\nType: `number`"
3518
+ "value": "Maximum number of rows rendered before the rest collapse behind the overflow indicator\n(the current selection is always kept visible regardless). Sanitized to a finite,\nnon-negative integer.\n\nRows render in full rather than as a recycled scroll window, because the filter input's\n`aria-activedescendant` is an IDREF and can only resolve within its own tree scope — rows\nhosted inside a nested windowing element would sit one shadow root deeper than the input\nthat must point at them. Raising this to cover a few-hundred-entry list (countries,\ncurrencies, time zones) is the intended use; past roughly a thousand rows, `source` narrows\nthe set before it becomes DOM and is the better tool.\n\nType: `number`"
3354
3519
  }
3355
3520
  },
3356
3521
  {
@@ -3402,6 +3567,13 @@
3402
3567
  "value": "Visual size — same `2xs`–`xl` scale as `lr-select`'s `size`.\n\nType: `LyraComboboxSize` \nDefault: `'m'`"
3403
3568
  }
3404
3569
  },
3570
+ {
3571
+ "name": "source-delay",
3572
+ "description": {
3573
+ "kind": "markdown",
3574
+ "value": "Debounce (ms) between the last keystroke and the `source` call. Sanitized to a finite\nduration clamped to `[0, browser-timer-ceiling]`; `0` fires on every keystroke, a\nnon-finite value falls back to the `200` default.\n\nType: `number`"
3575
+ }
3576
+ },
3405
3577
  {
3406
3578
  "name": "spellcheck",
3407
3579
  "description": {
@@ -3839,7 +4011,7 @@
3839
4011
  "name": "lr-conversation-item",
3840
4012
  "description": {
3841
4013
  "kind": "markdown",
3842
- "value": "`<lr-conversation-item>` — a selectable row representing one chat\nsession in a history sidebar list. Usable standalone or as the\n`renderItem()` payload of a sibling virtualized-list component; this\nmodule has no dependency on that (or any) other component.\n\nTakes `title`/`excerpt`/`timestamp` as individual primitive props rather\nthan one opaque bound object, deliberately consistent with how\n`<lr-chat-message>` takes individual props instead of a single\n`.message` blob -- every other component in this family follows that\nshape, so this one does too even though a single bound `.session` object\nwould also have been a reasonable design.\n\nIdentifying *which* session a `lr-select` click/keypress was about: this\nreuses the platform's own `id` attribute (every element already has one)\nrather than inventing a second, differently-named id-carrying prop --\nconsumers already have the event's `target`/`currentTarget` (and thus\n`.id`), the same reasoning `<lr-attachment-chip>` documents for its own\nidentically-shaped choice. `lr-select` therefore carries no detail\npayload at all.\n\n`role=\"button\"` on `[part=\"option\"]` so the item has valid semantics both\nstandalone and when placed in a larger history-list layout. A conversation\nrow activates one current session; it is not itself a listbox option and\ntherefore does not require a particular owner role.\n\n`role=\"button\"` forbids focusable\ndescendants -- verified against axe-core's `nested-interactive` rule,\nwhich flags it. That's why the rename button and the `actions` slot are\nrendered as DOM *siblings* of `[part=\"option\"]` (both inside\n`[part=\"base\"]`) rather than nested inside it: `[part=\"option\"]` only ever\ncontains plain text/`<time>` content. The in-place rename `<input>` is the\nsame problem one level deeper -- it replaces the title *inside*\n`[part=\"option\"]` while renaming -- so `[part=\"option\"]` sheds its\n`role`/`tabindex`/`aria-current`/`aria-label` entirely for the duration\nof an edit. A row mid-edit is a text field, so suspending the button\nsemantics is also the more accurate\ndescription of what's on screen.\n\nInline rename is a dedicated pencil/edit icon button (not a double-click\non the title) -- double-click has no keyboard/screen-reader equivalent\nand would silently swallow the row's own single-click `lr-select`,\nwhereas a button is independently focusable, has its own accessible name,\nand composes cleanly with click-to-select.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Overflow/icon-button controls (for example a pin/delete button or a `lr-menu` trigger) rendered at the trailing edge of the row. |\n| `content` | Replaces the built-in title, excerpt, and meta content area with host-supplied non-interactive row content. |\n| `excerpt` | Full override of the excerpt presentation (e.g. a search-hit snippet with `<mark>` highlighting). Wins over the `excerpt` property whenever it has assigned content, even if `excerpt` is also set. Only non-focusable content should be slotted here — see the `excerpt` property's own doc for why. |\n| `leading` | Non-interactive leading content such as an avatar, purpose icon, or status indicator. It is rendered inside the selectable region before the title/excerpt content. |\n| `meta` | Small, non-focusable structured fields for the row (e.g. a day label, cost, request count) rendered below the title/excerpt. Entirely app-supplied; this component computes none of it. Only non-focusable content should be slotted here, for the same `nested-interactive` reason as `excerpt`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `base` | The outer row wrapper (plain, no ARIA role) laying out `[part=\"option\"]`, the rename button, and `actions`. |\n| `content` | Wrapper around the title and excerpt. |\n| `excerpt` | The last-message preview snippet. Only rendered when `excerpt` is non-empty. |\n| `leading` | The wrapper around the `leading` slot, inside `option`. Always rendered, but `hidden` while that slot is empty. |\n| `meta` | The wrapper around the `meta` slot. Only rendered in the built-in content path (not when the `content` slot is used), and `hidden` while the `meta` slot is empty. |\n| `option` | The selectable region (`role=\"button\"`, removed while renaming -- see the class doc). Wraps `content` and `timestamp`. |\n| `rename-button` | The pencil/edit affordance that starts a rename (only rendered while `editable` and not already renaming). |\n| `timestamp` | The formatted `timestamp`, rendered in a `<time>` element. Only rendered when `timestamp` is set and valid. |\n| `title` | The title text, shown while not renaming. |\n| `title-input` | The in-place rename `<input>`, shown only while renaming. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-conversation-item-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the row while `active`. **Contrast-sensitive:** it is one half of a documented WCAG-AA pair — the active row's text is sized/toned for this background, so an override has to keep at least a 4.5:1 ratio against `--lr-conversation-item-active-color` (excerpt/timestamp) and against `--lr-color-text` (the title, which is not restyled by the pair).\n- `--lr-conversation-item-active-color` (default: `var(--lr-color-text)`) — Text color of `[part=\"excerpt\"]` and `[part=\"timestamp\"]` while `active`. **Contrast-sensitive:** it exists precisely because `--lr-color-text-quiet` only reaches ~4.25:1 against the active background; override it together with `--lr-conversation-item-active-bg`, never alone.\n- `--lr-conversation-item-compact-padding` (default: `var(--lr-space-xs) var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-conversation-item-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between `[part=\"base\"]`'s columns while `compact`."
4014
+ "value": "`<lr-conversation-item>` — a selectable row representing one chat\nsession in a history sidebar list. Usable standalone or as the\n`renderItem()` payload of a sibling virtualized-list component; this\nmodule has no dependency on that (or any) other component.\n\nTakes `title`/`excerpt`/`timestamp` as individual primitive props rather\nthan one opaque bound object, deliberately consistent with how\n`<lr-chat-message>` takes individual props instead of a single\n`.message` blob -- every other component in this family follows that\nshape, so this one does too even though a single bound `.session` object\nwould also have been a reasonable design.\n\nIdentifying *which* session a `lr-select` click/keypress was about: this\nreuses the platform's own `id` attribute (every element already has one)\nrather than inventing a second, differently-named id-carrying prop --\nconsumers already have the event's `target`/`currentTarget` (and thus\n`.id`), the same reasoning `<lr-attachment-chip>` documents for its own\nidentically-shaped choice. `lr-select` therefore carries no detail\npayload at all.\n\n`role=\"button\"` on `[part=\"option\"]` so the item has valid semantics both\nstandalone and when placed in a larger history-list layout. A conversation\nrow activates one current session; it is not itself a listbox option and\ntherefore does not require a particular owner role.\n\n`role=\"button\"` forbids focusable\ndescendants -- verified against axe-core's `nested-interactive` rule,\nwhich flags it. That's why the rename button and the `actions` slot are\nrendered as DOM *siblings* of `[part=\"option\"]` (both inside\n`[part=\"base\"]`) rather than nested inside it: `[part=\"option\"]` only ever\ncontains plain text/`<time>` content. The in-place rename `<input>` is the\nsame problem one level deeper -- it replaces the title *inside*\n`[part=\"option\"]` while renaming -- so `[part=\"option\"]` sheds its\n`role`/`tabindex`/`aria-current`/`aria-label` entirely for the duration\nof an edit. A row mid-edit is a text field, so suspending the button\nsemantics is also the more accurate\ndescription of what's on screen.\n\nInline rename is a dedicated pencil/edit icon button (not a double-click\non the title) -- double-click has no keyboard/screen-reader equivalent\nand would silently swallow the row's own single-click `lr-select`,\nwhereas a button is independently focusable, has its own accessible name,\nand composes cleanly with click-to-select.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `actions` | Overflow/icon-button controls (for example a pin/delete button or a `lr-menu` trigger) rendered at the trailing edge of the row. |\n| `content` | Replaces the built-in title, excerpt, and meta content area with host-supplied non-interactive row content. |\n| `excerpt` | Full override of the excerpt presentation (e.g. a search-hit snippet with `<mark>` highlighting). Wins over the `excerpt` property whenever it has assigned content, even if `excerpt` is also set. Only non-focusable content should be slotted here — see the `excerpt` property's own doc for why. |\n| `leading` | Non-interactive leading content such as an avatar, purpose icon, or status indicator. It is rendered inside the selectable region before the title/excerpt content. |\n| `meta` | Small, non-focusable structured fields for the row (e.g. a day label, cost, request count) rendered below the title/excerpt. Entirely app-supplied; this component computes none of it. Only non-focusable content should be slotted here, for the same `nested-interactive` reason as `excerpt`. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions` slot. |\n| `active-indicator` | A decorative inline indicator rendered only while the row is active. |\n| `base` | The outer row wrapper (plain, no ARIA role) laying out `[part=\"option\"]`, the rename button, and `actions`. |\n| `content` | Wrapper around the title and excerpt. |\n| `excerpt` | The last-message preview snippet. Only rendered when `excerpt` is non-empty. |\n| `leading` | The wrapper around the `leading` slot, inside `option`. Always rendered, but `hidden` while that slot is empty. |\n| `meta` | The wrapper around the `meta` slot. Only rendered in the built-in content path (not when the `content` slot is used), and `hidden` while the `meta` slot is empty. |\n| `option` | The selectable region (`role=\"button\"`, removed while renaming -- see the class doc). Wraps `content` and `timestamp`. |\n| `rename-button` | The pencil/edit affordance that starts a rename (only rendered while `editable` and not already renaming). |\n| `timestamp` | The formatted `timestamp`, rendered in a `<time>` element. Only rendered when `timestamp` is set and valid. |\n| `title` | The title text, shown while not renaming. |\n| `title-input` | The in-place rename `<input>`, shown only while renaming. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-conversation-item-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the row while `active`. **Contrast-sensitive:** it is one half of a documented WCAG-AA pair — the active row's text is sized/toned for this background, so an override has to keep at least a 4.5:1 ratio against `--lr-conversation-item-active-color` (excerpt/timestamp) and against `--lr-color-text` (the title, which is not restyled by the pair).\n- `--lr-conversation-item-active-color` (default: `var(--lr-color-text)`) — Text color of `[part=\"excerpt\"]` and `[part=\"timestamp\"]` while `active`. **Contrast-sensitive:** it exists precisely because `--lr-color-text-quiet` only reaches ~4.25:1 against the active background; override it together with `--lr-conversation-item-active-bg`, never alone.\n- `--lr-conversation-item-active-indicator-color` (default: `var(--lr-color-brand)`) — Color of the decorative `[part=\"active-indicator\"]` while `active`.\n- `--lr-conversation-item-active-indicator-width` (default: `var(--lr-size-2px)`) — Inline size of `[part=\"active-indicator\"]` while `active`.\n- `--lr-conversation-item-active-indicator-inset-inline` (default: `0 auto`) — Logical inline-start and inline-end insets for `[part=\"active-indicator\"]`; set `auto 0` to place it at inline-end.\n- `--lr-conversation-item-compact-padding` (default: `var(--lr-space-xs) var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-conversation-item-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between `[part=\"base\"]`'s columns while `compact`."
3843
4015
  },
3844
4016
  "attributes": [
3845
4017
  {
@@ -5006,6 +5178,13 @@
5006
5178
  "value": "Type: `boolean` \nDefault: `true`"
5007
5179
  }
5008
5180
  },
5181
+ {
5182
+ "name": "data-labels",
5183
+ "description": {
5184
+ "kind": "markdown",
5185
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
5186
+ }
5187
+ },
5009
5188
  {
5010
5189
  "name": "height",
5011
5190
  "description": {
@@ -5048,6 +5227,13 @@
5048
5227
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
5049
5228
  }
5050
5229
  },
5230
+ {
5231
+ "name": "stack-totals",
5232
+ "description": {
5233
+ "kind": "markdown",
5234
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
5235
+ }
5236
+ },
5051
5237
  {
5052
5238
  "name": "stacked",
5053
5239
  "description": {
@@ -5384,6 +5570,43 @@
5384
5570
  }
5385
5571
  ]
5386
5572
  },
5573
+ {
5574
+ "name": "lr-embedding-explorer",
5575
+ "description": {
5576
+ "kind": "markdown",
5577
+ "value": "`<lr-embedding-explorer>` — a dependency-free, accessible 2D embedding projection viewer. It\nnormalizes host-provided coordinates into an SVG plot, colors optional clusters, and exposes\nclick/keyboard selection. It does not run PCA/UMAP/t-SNE, fetch chunks, or mutate points.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper. |\n| `empty` | The empty state. |\n| `plot` | The SVG projection plot. |\n| `point` | One focusable embedding point. |"
5578
+ },
5579
+ "attributes": [
5580
+ {
5581
+ "name": "aria-label",
5582
+ "description": {
5583
+ "kind": "markdown",
5584
+ "value": "Accessible name for the plot.\n\nType: `string | null` \nDefault: `null`"
5585
+ }
5586
+ },
5587
+ {
5588
+ "name": "height",
5589
+ "description": {
5590
+ "kind": "markdown",
5591
+ "value": "SVG block size.\n\nType: `string` \nDefault: `'360px'`"
5592
+ }
5593
+ },
5594
+ {
5595
+ "name": "locale",
5596
+ "description": {
5597
+ "kind": "markdown",
5598
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
5599
+ }
5600
+ },
5601
+ {
5602
+ "name": "selected-id",
5603
+ "description": {
5604
+ "kind": "markdown",
5605
+ "value": "The selected point id. Controlled by the host.\n\nType: `string` \nDefault: `''`"
5606
+ }
5607
+ }
5608
+ ]
5609
+ },
5387
5610
  {
5388
5611
  "name": "lr-emoji-picker",
5389
5612
  "description": {
@@ -5460,7 +5683,7 @@
5460
5683
  "name": "lr-empty",
5461
5684
  "description": {
5462
5685
  "kind": "markdown",
5463
- "value": "`<lr-empty>` — a generic empty/no-data state. First-party invention (no\nWeb Awesome equivalent); fills a gap common to dashboard-style apps.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom icon or illustration (defaults to none). |\n| `actions` | Buttons/links shown below the description. |\n| `description` | Rich description content (overrides the `description` attribute). |\n| `heading` | Rich heading content (overrides the `heading` attribute). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions`-slotted content. |\n| `base` | The outer container. |\n| `description` | The description paragraph. |\n| `heading` | The heading paragraph. |\n| `icon` | The wrapper around the default-slotted icon/illustration. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-empty-compact-align` — Cross-axis and text alignment used in compact mode; set to `center` for dense but centered empty states.\n- `--lr-empty-compact-padding` (default: `var(--lr-space-xs)`) — Padding used in compact mode; accepts any padding shorthand (e.g. `8px 2px`).\n- `--lr-empty-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon, title, and description in compact mode."
5686
+ "value": "`<lr-empty>` — a generic empty/no-data state. First-party invention (no\nWeb Awesome equivalent); fills a gap common to dashboard-style apps.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom icon or illustration (defaults to none). |\n| `actions` | Buttons/links shown below the description. |\n| `description` | Rich description content (overrides the `description` attribute). |\n| `heading` | Rich heading content (overrides the `heading` attribute). |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `actions` | The wrapper around the `actions`-slotted content. |\n| `base` | The outer container. |\n| `description` | The description paragraph. |\n| `heading` | The heading paragraph. |\n| `icon` | The wrapper around the default-slotted icon/illustration. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-empty-compact-align` — Cross-axis and text alignment used in compact mode; set to `center` for dense but centered empty states.\n- `--lr-empty-compact-padding` (default: `var(--lr-space-xs)`) — Padding used in compact mode; accepts any padding shorthand (e.g. `8px 2px`).\n- `--lr-empty-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the icon, title, and description in compact mode.\n- `--lr-empty-compact-font-size` — Heading font size used in compact mode. Unset by default (no fallback), so the heading keeps its ordinary inherited font size until a consumer opts in."
5464
5687
  },
5465
5688
  "attributes": [
5466
5689
  {
@@ -5907,7 +6130,7 @@
5907
6130
  "name": "lr-file-input",
5908
6131
  "description": {
5909
6132
  "kind": "markdown",
5910
- "value": "`<lr-file-input>` — a drag-drop + click-to-browse file dropzone. Emits\nraw `File[]`; parsing (CSV/XLSX/etc.) is left to the host, since that's\nwhere files ultimately get uploaded and processed anyway.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom drop-zone content, overrides the visible `label` text. The accessible name comes from a host `aria-label` when present, then falls back to `label`, so icon-only slot content remains announced correctly. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The dropzone's root, clickable/focusable container. |\n| `input` | The visually-hidden native `<input type=\"file\">`. |\n| `status` | The visually-hidden live region announcing drag accept/reject state. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-file-input-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-file-input-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the dropzone's slotted children while `compact`.\n- `--lr-file-input-compact-font-size` (default: `var(--lr-font-size-sm)`) — Label font size while `compact`.\n- `--lr-file-input-accept-border-color` (default: `var(--lr-color-success)`) — Border color of `[part=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-accept-bg` (default: `color-mix(in srgb, var(--lr-color-success) 8%, transparent)`) — Background of `[part=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-reject-border-color` (default: `var(--lr-color-danger)`) — Border color of `[part=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-file-input-reject-bg` (default: `color-mix(in srgb, var(--lr-color-danger) 8%, transparent)`) — Background of `[part=\"base\"][data-drag-state=\"reject\"]`."
6133
+ "value": "`<lr-file-input>` — a drag-drop + click-to-browse file dropzone. Emits\nraw `File[]`; parsing (CSV/XLSX/etc.) is left to the host, since that's\nwhere files ultimately get uploaded and processed anyway.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Custom drop-zone content, overrides the visible `label` text. The accessible name comes from a host `aria-label` when present, then falls back to `label`, so icon-only slot content remains announced correctly. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The dropzone's root, clickable/focusable container. |\n| `input` | The visually-hidden native `<input type=\"file\">`. |\n| `rejection` | The visible `role=\"alert\"` region listing each currently-rejected file alongside its reason, rendered in addition to (never in place of) the sr-only `status` summary. |\n| `status` | The visually-hidden live region announcing drag accept/reject state and accepted/rejected selection counts. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-file-input-compact-padding` (default: `var(--lr-space-s)`) — `[part=\"base\"]` padding while `compact`.\n- `--lr-file-input-compact-gap` (default: `var(--lr-space-2xs)`) — Gap between the dropzone's slotted children while `compact`.\n- `--lr-file-input-compact-font-size` (default: `var(--lr-font-size-sm)`) — Label font size while `compact`.\n- `--lr-file-input-accept-border-color` (default: `var(--lr-color-success)`) — Border color of `[part=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-accept-bg` (default: `color-mix(in srgb, var(--lr-color-success) 8%, transparent)`) — Background of `[part=\"base\"][data-drag-state=\"accept\"]`.\n- `--lr-file-input-reject-border-color` (default: `var(--lr-color-danger)`) — Border color of `[part=\"base\"][data-drag-state=\"reject\"]`.\n- `--lr-file-input-reject-bg` (default: `color-mix(in srgb, var(--lr-color-danger) 8%, transparent)`) — Background of `[part=\"base\"][data-drag-state=\"reject\"]`."
5911
6134
  },
5912
6135
  "attributes": [
5913
6136
  {
@@ -7154,6 +7377,13 @@
7154
7377
  "value": "Type: `number` \nDefault: `10`"
7155
7378
  }
7156
7379
  },
7380
+ {
7381
+ "name": "data-labels",
7382
+ "description": {
7383
+ "kind": "markdown",
7384
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
7385
+ }
7386
+ },
7157
7387
  {
7158
7388
  "name": "height",
7159
7389
  "description": {
@@ -7203,6 +7433,13 @@
7203
7433
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
7204
7434
  }
7205
7435
  },
7436
+ {
7437
+ "name": "stack-totals",
7438
+ "description": {
7439
+ "kind": "markdown",
7440
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
7441
+ }
7442
+ },
7206
7443
  {
7207
7444
  "name": "stacked",
7208
7445
  "description": {
@@ -7325,7 +7562,7 @@
7325
7562
  "name": "lr-icon-button",
7326
7563
  "description": {
7327
7564
  "kind": "markdown",
7328
- "value": "`<lr-icon-button>` — an accessible icon-only action button.\n\nSet `icon` for one of `<lr-icon>`'s named glyphs, or slot your own content instead. Slotted\ncontent is a **sibling** of the built-in glyph rather than being piped through `<lr-icon>`, so\nany complete element — an `<svg>`, an `<img>`, an `<lr-flag>` — renders at its own natural\naspect ratio instead of being forced into a 1:1 box. Bare SVG geometry (`<path>`, `<circle>`,\nand a handful of other raw primitives) with no enclosing `<svg>` of its own is detected and\ncloned into a real, internal SVG-namespaced element so it still paints — the same fallback\n`<lr-icon>`'s own custom-content slot uses, but narrowly scoped so a custom element (e.g. a\nslotted `<lr-flag>`) is never run through it.\n\nForm-associated (mirroring `<lr-button>`'s identical shape): discoverable through\n`form.elements`, and `type=\"submit\"`/`type=\"reset\"` are handled by this component itself via\nthe host's own `closest('form')` — a shadow-internal native `<button type=\"submit\">` does not\nparticipate in an ancestor light-DOM form's submission on its own, since form-submitter\nsemantics don't cross the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom icon content, rendered beside (not inside) the `icon` glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `button` | Native button. |\n| `fallback` | The internal SVG-namespaced clone target for slotted bare geometry. Carries the same `fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"` defaults `<lr-icon>`'s own wrapper svg does, so bare stroke-style geometry (no fill/stroke of its own) renders outlined instead of as a solid shape; an explicit `fill`/`stroke`/etc. already present on the slotted node still wins for that node. Only present in the DOM while at least one top-level slotted element needs it; a complete `<svg>`, `<img>`, or custom element never mounts it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-icon-button-size` (default: `2.5rem`) — Minimum tappable inline and block size of the native button — a **floor**, not a fixed size: content larger than it grows the button and keeps its own aspect ratio, while a small glyph pads out to it. A library-wide token (declared on `:root` by `tokens.styles.ts`, and the shared minimum tappable size several other components size their icon controls against), so overriding it globally resizes all of them together.\n- `--lr-icon-button-radius` (default: `var(--lr-radius)`) — Corner radius of the native button."
7565
+ "value": "`<lr-icon-button>` — an accessible icon-only action button.\n\nSet `icon` for one of `<lr-icon>`'s named glyphs, or slot your own content instead. Slotted\ncontent is a **sibling** of the built-in glyph rather than being piped through `<lr-icon>`, so\nany complete element — an `<svg>`, an `<img>`, an `<lr-flag>` — renders at its own natural\naspect ratio instead of being forced into a 1:1 box. Bare SVG geometry (`<path>`, `<circle>`,\nand a handful of other raw primitives) with no enclosing `<svg>` of its own is detected and\ncloned into a real, internal SVG-namespaced element so it still paints — the same fallback\n`<lr-icon>`'s own custom-content slot uses, but narrowly scoped so a custom element (e.g. a\nslotted `<lr-flag>`) is never run through it.\n\nForm-associated (mirroring `<lr-button>`'s identical shape): discoverable through\n`form.elements`, and `type=\"submit\"`/`type=\"reset\"` are handled by this component itself via\nthe host's own `closest('form')` — a shadow-internal native `<button type=\"submit\">` does not\nparticipate in an ancestor light-DOM form's submission on its own, since form-submitter\nsemantics don't cross the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Optional custom icon content, rendered beside (not inside) the `icon` glyph. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `button` | Native button. |\n| `fallback` | The internal SVG-namespaced clone target for slotted bare geometry. Carries the same `fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"` defaults `<lr-icon>`'s own wrapper svg does, so bare stroke-style geometry (no fill/stroke of its own) renders outlined instead of as a solid shape; an explicit `fill`/`stroke`/etc. already present on the slotted node still wins for that node. Only present in the DOM while at least one top-level slotted element needs it; a complete `<svg>`, `<img>`, or custom element never mounts it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-icon-button-size` (default: `2.5rem`) — Minimum tappable inline and block size of the native button — a **floor**, not a fixed size: content larger than it grows the button and keeps its own aspect ratio, while a small glyph pads out to it. A library-wide token (declared on `:root` by `tokens.styles.ts`, and the shared minimum tappable size several other components size their icon controls against), so overriding it globally resizes all of them together.\n- `--lr-icon-button-radius` (default: `var(--lr-radius)`) — Corner radius of the native button.\n- `--lr-icon-button-background` (default: `transparent`) — Background fill of the native button.\n- `--lr-icon-button-background-hover` (default: `var(--lr-color-surface)`) — Background fill on hover.\n- `--lr-icon-button-color` (default: `inherit`) — Icon/text color of the native button."
7329
7566
  },
7330
7567
  "attributes": [
7331
7568
  {
@@ -7584,7 +7821,7 @@
7584
7821
  "name": "lr-input",
7585
7822
  "description": {
7586
7823
  "kind": "markdown",
7587
- "value": "`<lr-input>` — a single-line plain-text input primitive, the `lr-*` equivalent of a plain\n`wa-input`, form-associated via the `FormAssociated` mixin (same shape as `<lr-textarea>`).\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lr-textarea>`/\n`<lr-select>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/`error`\nparts) — left unset, the chrome stays hidden. `size` uses the same `xs`–`xl` scale as\n`<lr-select>`/`<lr-combobox>`. `type=\"password\"` always renders a\n`password-toggle` eye-icon button that flips the internal native input between\n`type=\"password\"`/`type=\"text\"` and tracks `passwordVisible`. `type=\"email\"`/`type=\"number\"`\n(with `min`/`max`/`step`) delegate constraint validation to the internal native `<input>`'s own\nbrowser-computed `validity`, bridged into this element's `ElementInternals` by `updateValidity()`.\n`type=\"search\"`/`type=\"time\"` forward straight through to the native input with no additional\nchrome or validation, the same as `type=\"text\"`.\n\nA host `aria-label` is forwarded to the internal textbox via the typed `accessibleLabel` property;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.\n\nForwards the full native selection/editing surface (`selectionStart`/`selectionEnd`,\n`setSelectionRange()`, `setRangeText()`), the same as `<lr-textarea>`, in addition to\n`focus()`/`blur()`/`select()`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `end` | Adornment after the native input and built-in actions. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment before the native input. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear action, rendered for non-empty clearable text/search inputs. |\n| `end` | Wrapper around the `end` adornment slot. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, input, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `input` | The native `<input>` element. |\n| `input-wrapper` | The row wrapping the native input and the password-toggle button. |\n| `password-toggle` | The show/hide-password button, present only when `type=\"password\"`. |\n| `start` | Wrapper around the `start` adornment slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-input-control-min-height` — Outer control height floor, scaled by `size`.\n- `--lr-input-control-height` — Exact outer control height. Unset by default, which leaves `--lr-input-control-min-height` as a floor only; set it to a length to both floor and cap the control row (e.g. to pixel-match `<lr-select>`/`<lr-combobox>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element.\n- `--lr-input-padding-block` — Block padding of the native input, scaled by `size`.\n- `--lr-input-padding-inline` — Inline padding of the control row, scaled by `size`.\n- `--lr-input-font-size` — Font size of the native input, scaled by `size`.\n- `--lr-input-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments and the native input in the control row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(input-wrapper)` rule.\n- `--lr-input-radius` (default: `var(--lr-radius)`) — Corner radius of the control row. Does not vary by `size` tier."
7824
+ "value": "`<lr-input>` — a single-line plain-text input primitive, the `lr-*` equivalent of a plain\n`wa-input`, form-associated via the `FormAssociated` mixin (same shape as `<lr-textarea>`).\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lr-textarea>`/\n`<lr-select>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/`error`\nparts) — left unset, the chrome stays hidden. `size` uses the same `xs`–`xl` scale as\n`<lr-select>`/`<lr-combobox>`. `type=\"password\"` always renders a\n`password-toggle` eye-icon button that flips the internal native input between\n`type=\"password\"`/`type=\"text\"` and tracks `passwordVisible`. `type=\"email\"`/`type=\"number\"`\n(with `min`/`max`/`step`) delegate constraint validation to the internal native `<input>`'s own\nbrowser-computed `validity`, bridged into this element's `ElementInternals` by `updateValidity()`\n— as do `minlength`/`maxlength`/`pattern`, which constrain the text-bearing types.\n`type=\"search\"`/`type=\"time\"` forward straight through to the native input with no additional\nchrome or validation, the same as `type=\"text\"`.\n\nA host `aria-label` is forwarded to the internal textbox via the typed `accessibleLabel` property;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.\n\nForwards the full native selection/editing surface (`selectionStart`/`selectionEnd`,\n`setSelectionRange()`, `setRangeText()`), the same as `<lr-textarea>`, in addition to\n`focus()`/`blur()`/`select()`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `end` | Adornment after the native input and built-in actions. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment before the native input. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `clear-button` | The clear action, rendered for non-empty clearable text/search inputs. |\n| `end` | Wrapper around the `end` adornment slot. |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, input, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `input` | The native `<input>` element. |\n| `input-wrapper` | The row wrapping the native input and the password-toggle button. |\n| `password-toggle` | The show/hide-password button, present only when `type=\"password\"`. |\n| `start` | Wrapper around the `start` adornment slot. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-input-control-min-height` — Outer control height floor, scaled by `size`.\n- `--lr-input-control-height` — Exact outer control height. Unset by default, which leaves `--lr-input-control-min-height` as a floor only; set it to a length to both floor and cap the control row (e.g. to pixel-match `<lr-select>`/`<lr-combobox>` in the same toolbar). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element.\n- `--lr-input-padding-block` — Block padding of the native input, scaled by `size`.\n- `--lr-input-padding-inline` — Inline padding of the control row, scaled by `size`.\n- `--lr-input-font-size` — Font size of the native input, scaled by `size`.\n- `--lr-input-gap` (default: `var(--lr-space-xs)`) — Gap between the start/end adornments and the native input in the control row. Unlike the size knobs above it does not vary by `size` tier. Override it to retune without a `::part(input-wrapper)` rule.\n- `--lr-input-radius` (default: `var(--lr-radius)`) — Corner radius of the control row. Does not vary by `size` tier."
7588
7825
  },
7589
7826
  "attributes": [
7590
7827
  {
@@ -7678,6 +7915,13 @@
7678
7915
  "value": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.\n\nType: `number | string | undefined`"
7679
7916
  }
7680
7917
  },
7918
+ {
7919
+ "name": "maxlength",
7920
+ "description": {
7921
+ "kind": "markdown",
7922
+ "value": "Upper counterpart of `minlength` (native `maxlength`/`tooLong`), with the same parsing and the\nsame default of `undefined`. Note that native `maxlength` also *prevents* typing beyond the\nlimit; it reports `tooLong` for values that arrive some other way (paste of a longer value,\na programmatic assignment).\n\nType: `number | undefined`"
7923
+ }
7924
+ },
7681
7925
  {
7682
7926
  "name": "min",
7683
7927
  "description": {
@@ -7685,6 +7929,13 @@
7685
7929
  "value": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.\n\nType: `number | string | undefined`"
7686
7930
  }
7687
7931
  },
7932
+ {
7933
+ "name": "minlength",
7934
+ "description": {
7935
+ "kind": "markdown",
7936
+ "value": "Minimum text length, forwarded to the internal native `<input>`'s own `minlength` and\nconsulted by that same native input's constraint validation (`tooShort`, see\n`updateValidity()`). Defaults to `undefined` (no lower bound). Like native `minlength`, an\nempty value never violates it — pair it with `required` to also reject empty. Ignored by the\nnative input for `type=\"number\"`/`type=\"time\"`, exactly as the platform specifies.\n\nType: `number | undefined`"
7937
+ }
7938
+ },
7688
7939
  {
7689
7940
  "name": "name",
7690
7941
  "description": {
@@ -7699,6 +7950,13 @@
7699
7950
  "value": "`type=\"password\"` only — whether the field currently reveals its raw text. Toggled by the\nbuilt-in `password-toggle` button; also settable by a consumer up front.\n\nType: `boolean` \nDefault: `false`"
7700
7951
  }
7701
7952
  },
7953
+ {
7954
+ "name": "pattern",
7955
+ "description": {
7956
+ "kind": "markdown",
7957
+ "value": "A regular expression the value must match in full, forwarded to the internal native\n`<input>`'s own `pattern` and validated by it (`patternMismatch`). Defaults to `undefined`\n(no pattern). Compiled by the browser with the `v` flag and anchored to the whole value, so\nno `^`/`$` is needed; an empty value never violates it.\n\nType: `string | undefined`"
7958
+ }
7959
+ },
7702
7960
  {
7703
7961
  "name": "placeholder",
7704
7962
  "description": {
@@ -7884,6 +8142,43 @@
7884
8142
  }
7885
8143
  ]
7886
8144
  },
8145
+ {
8146
+ "name": "lr-knowledge-base-admin",
8147
+ "description": {
8148
+ "kind": "markdown",
8149
+ "value": "`<lr-knowledge-base-admin>` — a responsive operations shell composing the existing controlled\nsource inventory and ingestion queue into one tabbed knowledge-base view. It forwards every\nsource/ingestion action under a namespaced event and never creates connectors, uploads files, or\nchanges indexing configuration itself. Put configuration controls in the `settings` slot.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `settings` | Optional host-owned ingestion, chunking, embedding, or permissions controls. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root admin wrapper. |\n| `heading` | The visible heading. |\n| `panel` | The active panel. |\n| `settings` | The settings slot wrapper. |\n| `tab` | One tab button. |\n| `tabs` | The tablist. |"
8150
+ },
8151
+ "attributes": [
8152
+ {
8153
+ "name": "active-tab",
8154
+ "description": {
8155
+ "kind": "markdown",
8156
+ "value": "Active tab. Controlled by the host after `lr-tab-change` if desired.\n\nType: `KnowledgeBaseAdminTab` \nDefault: `'sources'`"
8157
+ }
8158
+ },
8159
+ {
8160
+ "name": "hide-ingestion",
8161
+ "description": {
8162
+ "kind": "markdown",
8163
+ "value": "Hides the ingestion tab and queue.\n\nType: `boolean` \nDefault: `false`"
8164
+ }
8165
+ },
8166
+ {
8167
+ "name": "label",
8168
+ "description": {
8169
+ "kind": "markdown",
8170
+ "value": "Accessible name and visible heading.\n\nType: `string` \nDefault: `''`"
8171
+ }
8172
+ },
8173
+ {
8174
+ "name": "locale",
8175
+ "description": {
8176
+ "kind": "markdown",
8177
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
8178
+ }
8179
+ }
8180
+ ]
8181
+ },
7887
8182
  {
7888
8183
  "name": "lr-knowledge-graph-explorer",
7889
8184
  "description": {
@@ -8177,6 +8472,13 @@
8177
8472
  "value": "Type: `boolean` \nDefault: `true`"
8178
8473
  }
8179
8474
  },
8475
+ {
8476
+ "name": "data-labels",
8477
+ "description": {
8478
+ "kind": "markdown",
8479
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
8480
+ }
8481
+ },
8180
8482
  {
8181
8483
  "name": "height",
8182
8484
  "description": {
@@ -8219,6 +8521,13 @@
8219
8521
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
8220
8522
  }
8221
8523
  },
8524
+ {
8525
+ "name": "stack-totals",
8526
+ "description": {
8527
+ "kind": "markdown",
8528
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
8529
+ }
8530
+ },
8222
8531
  {
8223
8532
  "name": "stacked",
8224
8533
  "description": {
@@ -8267,7 +8576,7 @@
8267
8576
  "name": "lr-lite-chart",
8268
8577
  "description": {
8269
8578
  "kind": "markdown",
8270
- "value": "`<lr-lite-chart>` — a dependency-free bar/line chart, plain SVG/DOM\nrendering with zero peer dependencies (unlike `lr-chart`, which wraps\n`chart.js`). For a project whose architecture forbids a charting\ndependency outright, this covers the common bar/line case: grouped or\nstacked bars, multi-series lines, per-point click, and hover tooltips\n(native SVG `<title>`, no positioning JS needed) — not a full `lr-chart`\nreplacement (no zoom/pan, no pie/doughnut/radar/scatter/bubble types, no\nhorizontal/dual-y-axis, no raw-config passthrough).\n\nBecause this renders real DOM (not canvas), it reuses `lr-chart`'s\n`--lr-chart-*` theme tokens directly via CSS `var()` — no\n`getComputedStyle()`-based re-theming step is needed the way `chart.ts`\nneeds one for its canvas.\n\nBy default (`layout=\"fit\"`) the plot always squeezes to the measured host\nwidth. Three independent, opt-in escape hatches for dense/aligned data:\n`layout=\"scroll\"` (+ `barWidth`) gives every bar a fixed pixel width and\nlets the plot overflow the host horizontally (scrollable) instead of\nsqueezing; `maxLabels` decimates which x-axis text labels render (bars\nalways still render) once there are more categories than that; and\n`barX` lets a consumer hand in its own per-category x-coordinate function\n— e.g. to pixel-align this chart's bars with a sibling `lr-heatmap`'s\ncalendar columns — overriding the internal slot math for both bars and\ntheir labels. All three are additive and no-ops when left unset.\n\nSeven further additive, opt-in properties: `pointText` overrides the\nper-bar/per-point `<title>`/`aria-label` tooltip text (mirrors\n`lr-heatmap`'s `cellText` hook), falling back to the built-in raw-value\ntemplate when unset; `roundedBars` draws bars as a rounded-top path\ninstead of a square-cornered rect; `skipZero` omits a bar entirely (not\njust zero-height) for an exactly-`0` value; `padLeft`/`barGapRatio`\noverride the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants; `scale`\n(`type=\"bar\"` only) switches the bar-height mapping from the default\nlinear `niceDomain` fraction to a `Math.sqrt(value / domainMax)`\ncompression (mirroring `lr-heatmap`'s matrix-mode `sqrt` scale) so a\nskewed dataset's smaller bars don't get washed out by one dominant value\n— gridlines/tick labels stay on the linear domain regardless, only the bar\nmarks' own height changes, and `type=\"line\"` ignores `scale` entirely; and\n`hideAxis` suppresses `renderGrid()`'s gridlines/tick labels altogether\n(x-axis category labels, rendered separately, are unaffected). An eighth,\n`legendText`, appends a formatter-supplied string after each series' label in the\nbuilt-in legend row (e.g. a value or share) — no-op while `legend` is unset, matching the same\nfallback-to-unchanged convention as every other hook here;\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `axis-label` | Each axis tick label. |\n| `axis-title` | The x/y axis title text, when set. |\n| `bar` | Each bar rect (type=\"bar\"). Carries `data-selected` when its category index is in `selectedIndex`. |\n| `base` | The host's flex layout wrapper. |\n| `data-list` | A visually hidden list of all plotted data points. |\n| `grid-line` | Each horizontal gridline. |\n| `legend` | The legend row, when `legend` is set. |\n| `legend-item` | Each legend entry. |\n| `legend-swatch` | Each legend entry's color swatch. |\n| `legend-text` | Extra per-item text after the series label, rendered only when `legendText` is set. |\n| `line` | Each series' stroked line path (type=\"line\"). |\n| `live-region` | The current mark announcement for keyboard users. |\n| `point` | Each series' per-point hit target (type=\"line\"). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-lite-chart-selected-outline-color` (default: `var(--lr-color-brand)`) — Stroke for a bar/point whose category index is in `selectedIndex`."
8579
+ "value": "`<lr-lite-chart>` — a dependency-free bar/line chart, plain SVG/DOM\nrendering with zero peer dependencies (unlike `lr-chart`, which wraps\n`chart.js`). For a project whose architecture forbids a charting\ndependency outright, this covers the common bar/line case: grouped or\nstacked bars, multi-series lines, per-point click, and hover tooltips\n(native SVG `<title>`, no positioning JS needed) — not a full `lr-chart`\nreplacement (no zoom/pan, no pie/doughnut/radar/scatter/bubble types, no\nhorizontal/dual-y-axis, no raw-config passthrough).\n\nBecause this renders real DOM (not canvas), it reuses `lr-chart`'s\n`--lr-chart-*` theme tokens directly via CSS `var()` — no\n`getComputedStyle()`-based re-theming step is needed the way `chart.ts`\nneeds one for its canvas.\n\nBy default (`layout=\"fit\"`) the plot always squeezes to the measured host\nwidth. Three independent, opt-in escape hatches for dense/aligned data:\n`layout=\"scroll\"` (+ `barWidth`) gives every bar a fixed pixel width and\nlets the plot overflow the host horizontally (scrollable) instead of\nsqueezing; `maxLabels` decimates which x-axis text labels render (bars\nalways still render) once there are more categories than that; and\n`barX` lets a consumer hand in its own per-category x-coordinate function\n— e.g. to pixel-align this chart's bars with a sibling `lr-heatmap`'s\ncalendar columns — overriding the internal slot math for both bars and\ntheir labels. All three are additive and no-ops when left unset.\n\nSeven further additive, opt-in properties: `pointText` overrides the\nper-bar/per-point `<title>`/`aria-label` tooltip text (mirrors\n`lr-heatmap`'s `cellText` hook), falling back to the built-in raw-value\ntemplate when unset; `roundedBars` draws bars as a rounded-top path\ninstead of a square-cornered rect; `skipZero` omits a bar entirely (not\njust zero-height) for an exactly-`0` value; `padLeft`/`barGapRatio`\noverride the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants; `scale`\n(`type=\"bar\"` only) switches the bar-height mapping from the default\nlinear `niceDomain` fraction to a `Math.sqrt(value / domainMax)`\ncompression (mirroring `lr-heatmap`'s matrix-mode `sqrt` scale) so a\nskewed dataset's smaller bars don't get washed out by one dominant value\n— gridlines/tick labels stay on the linear domain regardless, only the bar\nmarks' own height changes, and `type=\"line\"` ignores `scale` entirely; and\n`hideAxis` suppresses `renderGrid()`'s gridlines/tick labels altogether\n(x-axis category labels, rendered separately, are unaffected). An eighth,\n`legendText`, appends a formatter-supplied string after each series' label in the\nbuilt-in legend row (e.g. a value or share) — no-op while `legend` is unset, matching the same\nfallback-to-unchanged convention as every other hook here;\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `axis-label` | Each axis tick label. |\n| `axis-title` | The x/y axis title text, when set. |\n| `bar` | Each bar rect (type=\"bar\"). Carries `data-selected` when its category index is in `selectedIndex`. |\n| `base` | The host's flex layout wrapper. |\n| `data-list` | A visually hidden list of all plotted data points (single-series only). |\n| `data-table` | A visually hidden category×series data table, rendered instead of `data-list` when there is more than one dataset so a screen-reader user hears series grouping rather than one flattened N×M sequence. |\n| `grid-line` | Each horizontal gridline. |\n| `legend` | The legend row, when `legend` is set. |\n| `legend-item` | Each legend entry. |\n| `legend-swatch` | Each legend entry's color swatch. |\n| `legend-text` | Extra per-item text after the series label, rendered only when `legendText` is set. |\n| `line` | Each series' stroked line path (type=\"line\"). |\n| `live-region` | The current mark announcement for keyboard users. |\n| `point` | Each series' per-point hit target (type=\"line\"). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-lite-chart-selected-outline-color` (default: `var(--lr-color-brand)`) — Stroke for a bar/point whose category index is in `selectedIndex`."
8271
8580
  },
8272
8581
  "attributes": [
8273
8582
  {
@@ -9144,7 +9453,7 @@
9144
9453
  "name": "lr-model-select",
9145
9454
  "description": {
9146
9455
  "kind": "markdown",
9147
- "value": "`<lr-model-select>` — a provider/model picker that renders as a closed\ndropdown when a fixed `catalog` is available, or as a filterable free-text\ncombobox when it isn't (or when `allow-custom` explicitly permits typing\nsomething outside the catalog). Built directly on the shared\ntrigger-button/aria-activedescendant listbox technique `<lr-select>` uses\nand the filter-as-you-type suggestion-popup technique `<lr-combobox>`\nuses — not by composing either element, since the mode switch and the\nstale-value handling below are specific to this control.\n\nA `value` that isn't present in `catalog` (e.g. a model id saved from a\nprovider whose live catalog has since changed) is never silently dropped:\n`effectiveEntries` appends it to the rendered option list as a synthetic,\nvisually-distinct row (dashed border, italic label, \"not in catalog\"\nbadge — see `model-select.styles.ts`) computed fresh from `catalog` +\n`value` on every render, without ever mutating the `catalog` property\nitself.\n\nShips an opt-in `hint`/`errorText` form-control chrome (props + matching named slots +\n`hint`/`error` parts), mirroring `<lr-select>`'s exact pattern -- left unset, neither renders.\nPairs with the existing `label` prop/part (also mirroring `<lr-select>`) for a full\nlabel/hint/error field.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `combobox` | The text-input container (free-text mode's positioning anchor). |\n| `combobox-input` | The free-text mode's text input. |\n| `empty` | The empty-listbox message, shown when no rows match. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control-label` | The `<label>` element (only rendered — and only contributes to the accessible name — once `label` is non-empty). |\n| `hint` | The hint message. |\n| `listbox` | The options popover (shared by both modes). |\n| `option` | An option row. |\n| `option-badge` | The \"not in catalog\" badge on a synthetic stale-value row. |\n| `option-label` | An option row's label. |\n| `provider-badge` | The optional leading `provider` label. |\n| `trigger` | The trigger button (closed-dropdown mode's positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-model-select-trigger-padding` (default: `var(--lr-space-xs) var(--lr-space-s)`) — Trigger/combobox padding shorthand, scaled by `size`.\n- `--lr-model-select-trigger-min-height` (default: `var(--lr-size-2-5rem)`) — Trigger/combobox block-size floor, scaled by `size`.\n- `--lr-model-select-font-size` (default: `var(--lr-font-size-md)`) — Trigger/combobox font size, scaled by `size`.\n- `--lr-model-select-expand-size` (default: `var(--lr-size-1-75rem)`) — Decorative expand-icon box size, scaled by `size`.\n- `--lr-model-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row."
9456
+ "value": "`<lr-model-select>` — a provider/model picker that renders as a closed\ndropdown when a fixed `catalog` is available, or as a filterable free-text\ncombobox when it isn't (or when `allow-custom` explicitly permits typing\nsomething outside the catalog). Built directly on the shared\ntrigger-button/aria-activedescendant listbox technique `<lr-select>` uses\nand the filter-as-you-type suggestion-popup technique `<lr-combobox>`\nuses — not by composing either element, since the mode switch and the\nstale-value handling below are specific to this control.\n\nA `value` that isn't present in `catalog` (e.g. a model id saved from a\nprovider whose live catalog has since changed) is never silently dropped:\n`effectiveEntries` appends it to the rendered option list as a synthetic,\nvisually-distinct row (dashed border, italic label, \"not in catalog\"\nbadge — see `model-select.styles.ts`) computed fresh from `catalog` +\n`value` on every render, without ever mutating the `catalog` property\nitself.\n\nShips an opt-in `hint`/`errorText` form-control chrome (props + matching named slots +\n`hint`/`error` parts), mirroring `<lr-select>`'s exact pattern -- left unset, neither renders.\nPairs with the existing `label` prop/part (also mirroring `<lr-select>`) for a full\nlabel/hint/error field.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `combobox` | The text-input container (free-text mode's positioning anchor). |\n| `combobox-input` | The free-text mode's text input. |\n| `empty` | The empty-listbox message, shown when no rows match. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control-label` | The `<label>` element (only rendered — and only contributes to the accessible name — once `label` is non-empty). |\n| `hint` | The hint message. |\n| `listbox` | The options popover (shared by both modes). |\n| `option` | An option row. |\n| `option-badge` | The \"not in catalog\" badge on a synthetic stale-value row. |\n| `option-label` | An option row's label. |\n| `provider-badge` | The optional leading `provider` label. |\n| `trigger` | The trigger button (closed-dropdown mode's positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-model-select-trigger-padding` (default: `var(--lr-space-xs) var(--lr-space-s)`) — Trigger/combobox padding shorthand, scaled by `size`.\n- `--lr-model-select-trigger-min-height` (default: `var(--lr-size-2-5rem)`) — Trigger/combobox block-size floor, scaled by `size`.\n- `--lr-model-select-font-size` (default: `var(--lr-font-size-md)`) — Trigger/combobox font size, scaled by `size`.\n- `--lr-model-select-expand-size` (default: `var(--lr-size-1-75rem)`) — Decorative expand-icon box size, scaled by `size`.\n- `--lr-model-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a hovered or keyboard-active option row.\n- `--lr-model-select-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme without hijacking `--lr-color-brand`.\n- `--lr-model-select-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-model-select-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-model-select-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row."
9148
9457
  },
9149
9458
  "attributes": [
9150
9459
  {
@@ -9621,6 +9930,13 @@
9621
9930
  "value": "Upper counterpart of `min`, with the same parsing and the same default of `undefined`.\n\nType: `number | string | undefined`"
9622
9931
  }
9623
9932
  },
9933
+ {
9934
+ "name": "maxlength",
9935
+ "description": {
9936
+ "kind": "markdown",
9937
+ "value": "Upper counterpart of `minlength` (native `maxlength`/`tooLong`), with the same parsing and the\nsame default of `undefined`. Note that native `maxlength` also *prevents* typing beyond the\nlimit; it reports `tooLong` for values that arrive some other way (paste of a longer value,\na programmatic assignment).\n\nType: `number | undefined`"
9938
+ }
9939
+ },
9624
9940
  {
9625
9941
  "name": "min",
9626
9942
  "description": {
@@ -9628,6 +9944,13 @@
9628
9944
  "value": "`type=\"number\"` only — forwarded to the internal native `<input>`'s own `min`/`max`/`step`\nand consulted by that same native input's constraint validation (see `updateValidity()`).\nDefaults to `undefined` (no lower bound). The `min` attribute is parsed as a number here; the\ndeclared type also admits a string so a subclass bound to a non-numeric native input type can\nnarrow the attribute parsing to that type's own literal form (`<lr-time-input>`'s `09:00`)\nwithout redeclaring the whole property surface.\n\nType: `number | string | undefined`"
9629
9945
  }
9630
9946
  },
9947
+ {
9948
+ "name": "minlength",
9949
+ "description": {
9950
+ "kind": "markdown",
9951
+ "value": "Minimum text length, forwarded to the internal native `<input>`'s own `minlength` and\nconsulted by that same native input's constraint validation (`tooShort`, see\n`updateValidity()`). Defaults to `undefined` (no lower bound). Like native `minlength`, an\nempty value never violates it — pair it with `required` to also reject empty. Ignored by the\nnative input for `type=\"number\"`/`type=\"time\"`, exactly as the platform specifies.\n\nType: `number | undefined`"
9952
+ }
9953
+ },
9631
9954
  {
9632
9955
  "name": "password-visible",
9633
9956
  "description": {
@@ -9635,6 +9958,13 @@
9635
9958
  "value": "`type=\"password\"` only — whether the field currently reveals its raw text. Toggled by the\nbuilt-in `password-toggle` button; also settable by a consumer up front.\n\nType: `boolean` \nDefault: `false`"
9636
9959
  }
9637
9960
  },
9961
+ {
9962
+ "name": "pattern",
9963
+ "description": {
9964
+ "kind": "markdown",
9965
+ "value": "A regular expression the value must match in full, forwarded to the internal native\n`<input>`'s own `pattern` and validated by it (`patternMismatch`). Defaults to `undefined`\n(no pattern). Compiled by the browser with the `v` flag and anchored to the whole value, so\nno `^`/`$` is needed; an empty value never violates it.\n\nType: `string | undefined`"
9966
+ }
9967
+ },
9638
9968
  {
9639
9969
  "name": "placeholder",
9640
9970
  "description": {
@@ -10192,6 +10522,13 @@
10192
10522
  "value": "Type: `boolean` \nDefault: `true`"
10193
10523
  }
10194
10524
  },
10525
+ {
10526
+ "name": "data-labels",
10527
+ "description": {
10528
+ "kind": "markdown",
10529
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10530
+ }
10531
+ },
10195
10532
  {
10196
10533
  "name": "height",
10197
10534
  "description": {
@@ -10234,6 +10571,13 @@
10234
10571
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
10235
10572
  }
10236
10573
  },
10574
+ {
10575
+ "name": "stack-totals",
10576
+ "description": {
10577
+ "kind": "markdown",
10578
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
10579
+ }
10580
+ },
10237
10581
  {
10238
10582
  "name": "stacked",
10239
10583
  "description": {
@@ -10371,6 +10715,13 @@
10371
10715
  "value": "Type: `boolean` \nDefault: `true`"
10372
10716
  }
10373
10717
  },
10718
+ {
10719
+ "name": "data-labels",
10720
+ "description": {
10721
+ "kind": "markdown",
10722
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
10723
+ }
10724
+ },
10374
10725
  {
10375
10726
  "name": "height",
10376
10727
  "description": {
@@ -10413,6 +10764,13 @@
10413
10764
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
10414
10765
  }
10415
10766
  },
10767
+ {
10768
+ "name": "stack-totals",
10769
+ "description": {
10770
+ "kind": "markdown",
10771
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
10772
+ }
10773
+ },
10416
10774
  {
10417
10775
  "name": "stacked",
10418
10776
  "description": {
@@ -10904,6 +11262,13 @@
10904
11262
  "value": "Type: `boolean` \nDefault: `true`"
10905
11263
  }
10906
11264
  },
11265
+ {
11266
+ "name": "data-labels",
11267
+ "description": {
11268
+ "kind": "markdown",
11269
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
11270
+ }
11271
+ },
10907
11272
  {
10908
11273
  "name": "height",
10909
11274
  "description": {
@@ -10946,6 +11311,13 @@
10946
11311
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
10947
11312
  }
10948
11313
  },
11314
+ {
11315
+ "name": "stack-totals",
11316
+ "description": {
11317
+ "kind": "markdown",
11318
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
11319
+ }
11320
+ },
10949
11321
  {
10950
11322
  "name": "stacked",
10951
11323
  "description": {
@@ -11106,6 +11478,64 @@
11106
11478
  }
11107
11479
  ]
11108
11480
  },
11481
+ {
11482
+ "name": "lr-rag-answer",
11483
+ "description": {
11484
+ "kind": "markdown",
11485
+ "value": "`<lr-rag-answer>` — a controlled grounded-answer surface combining sanitized Markdown, citation\nbadges, a grounding assessment, and source previews. It performs no model call, retrieval,\ncitation parsing, or source fetching.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `answer` | Replaces the data-driven Markdown answer body. |\n| `sources` | Replaces the data-driven source list. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `answer` | The answer content wrapper. |\n| `base` | The root answer wrapper. |\n| `citation-list` | The citation badge row. |\n| `citations` | The citation section. |\n| `error` | The caller-supplied error message. |\n| `grounding` | The grounding assessment. |\n| `loading` | The loading indicator. |\n| `retry` | The retry button. |\n| `section-heading` | A localized section heading. |\n| `source-list` | The data-driven source list. |\n| `sources` | The source section. |"
11486
+ },
11487
+ "attributes": [
11488
+ {
11489
+ "name": "answer",
11490
+ "description": {
11491
+ "kind": "markdown",
11492
+ "value": "Type: `string` \nDefault: `''`"
11493
+ }
11494
+ },
11495
+ {
11496
+ "name": "aria-label",
11497
+ "description": {
11498
+ "kind": "markdown",
11499
+ "value": "Type: `string | null` \nDefault: `null`"
11500
+ }
11501
+ },
11502
+ {
11503
+ "name": "error",
11504
+ "description": {
11505
+ "kind": "markdown",
11506
+ "value": "Type: `string` \nDefault: `''`"
11507
+ }
11508
+ },
11509
+ {
11510
+ "name": "label",
11511
+ "description": {
11512
+ "kind": "markdown",
11513
+ "value": "Type: `string` \nDefault: `''`"
11514
+ }
11515
+ },
11516
+ {
11517
+ "name": "loading",
11518
+ "description": {
11519
+ "kind": "markdown",
11520
+ "value": "Type: `boolean` \nDefault: `false`"
11521
+ }
11522
+ },
11523
+ {
11524
+ "name": "locale",
11525
+ "description": {
11526
+ "kind": "markdown",
11527
+ "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
11528
+ }
11529
+ },
11530
+ {
11531
+ "name": "show-sources",
11532
+ "description": {
11533
+ "kind": "markdown",
11534
+ "value": "Type: `boolean` \nDefault: `true`"
11535
+ }
11536
+ }
11537
+ ]
11538
+ },
11109
11539
  {
11110
11540
  "name": "lr-random-content",
11111
11541
  "description": {
@@ -11778,6 +12208,13 @@
11778
12208
  "value": "Type: `boolean` \nDefault: `true`"
11779
12209
  }
11780
12210
  },
12211
+ {
12212
+ "name": "data-labels",
12213
+ "description": {
12214
+ "kind": "markdown",
12215
+ "value": "Draws each data point's value on the chart via the optional\n`chartjs-plugin-datalabels` peer. Unset (the default) leaves labels off for\nthis and every other chart on the page — the plugin registers globally, so\n`buildConfig()` explicitly disables it per-chart until this is set. The\nscreen-reader equivalent is the always-present data table (see\n`show-data-table`); labels are a purely visual, canvas-only addition.\n\nType: `boolean` \nDefault: `false`"
12216
+ }
12217
+ },
11781
12218
  {
11782
12219
  "name": "height",
11783
12220
  "description": {
@@ -11820,6 +12257,13 @@
11820
12257
  "value": "Makes the generated data table visible; it remains screen-reader available when false.\n\nType: `boolean` \nDefault: `false`"
11821
12258
  }
11822
12259
  },
12260
+ {
12261
+ "name": "stack-totals",
12262
+ "description": {
12263
+ "kind": "markdown",
12264
+ "value": "When the chart is `stacked` (bar/line only), draws the per-category stack\ntotal above each stack, via the same optional `chartjs-plugin-datalabels`\npeer as `data-labels`. Null/undefined points are skipped; a category whose\nevery value is null shows no total. Unset (the default) draws nothing.\n\nType: `boolean` \nDefault: `false`"
12265
+ }
12266
+ },
11823
12267
  {
11824
12268
  "name": "stacked",
11825
12269
  "description": {
@@ -11956,7 +12400,7 @@
11956
12400
  "name": "lr-select",
11957
12401
  "description": {
11958
12402
  "kind": "markdown",
11959
- "value": "`<lr-select>` — a plain closed-list dropdown: a direct `<lr-*>`\ncounterpart to `<wa-select>`/`<wa-option>`. Trigger is a button (not a text\ninput) -- click/Enter/Space/ArrowDown opens it, there's no typing-to-filter.\nA printable keypress instead jumps (or, while closed, directly selects) the\nnext option whose label starts with what's been typed, like a native\n`<select>`'s type-ahead.\n\nOptions are `<lr-option value>` children, the same element `<lr-combobox>`\nuses. Unlike `lr-combobox` this is single-select only, with no filter/\nsource/with-clear/max-options-visible/empty-text/max-render/multiple surface\n-- see `<lr-combobox>` for the filterable/multi-select case.\n\nReuses `lr-combobox`'s popup positioning (`internal/positioner.js`) and\nclick-outside/Escape/Home/End/Arrow-key listbox navigation patterns,\nadapted to a trigger button that keeps DOM focus throughout (the listbox's\n\"active\" row is conveyed via `aria-activedescendant`, never actual focus),\nmatching the WAI-ARIA \"select-only combobox\" pattern.\n\nWhen `autoCommitSingleOption` is set and exactly one option is enabled\n(regardless of how many disabled ones exist alongside it), the popup never\nopens at all: a click, Enter, Space, ArrowDown, or ArrowUp on the trigger\ncommits that sole option directly, and the trigger renders as a plain\n`role=\"button\"` with no chevron/`aria-haspopup`/`aria-expanded` rather than\na combobox with a permanently inert popup state — opening a one-row list to\npick the only available choice is pure friction with no real decision\nbehind it. This never changes `value`/validity defaults on its own — an\nunselected single-option select stays unselected (and a `required` one\nstays invalid) exactly like the multi-option case, until the trigger is\nactually activated. `autoCommitSingleOption` defaults to `false`: by\ndefault a select always renders the normal combobox/listbox/chevron\ntrigger no matter how many options are enabled, matching pre-1.3.0\nbehavior — opt in explicitly if a narrowing-to-one option list should\nauto-commit.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the selected-value label and before the expand icon. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | An option group's heading row (shown when any option declares a `group`). |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-select-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-select-gap` — Gap between the trigger's start adornment, label, end adornment, and expand icon. Doesn't vary by `size`.\n- `--lr-select-radius` — Trigger corner radius. Doesn't vary by `size`.\n- `--lr-select-trigger-padding` — Trigger padding shorthand, scaled by `size`.\n- `--lr-select-trigger-min-height` — Trigger block-size floor, scaled by `size`, and live at every tier including the default `m` (`2.5rem`, matching `<lr-input>`/`<lr-combobox>` at that tier).\n- `--lr-select-font-size` — Trigger font size, scaled by `size`.\n- `--lr-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered/keyboard-active option row. Not declared on `:host`, so a value set on any ancestor is never shadowed -- retheme just this row state without hijacking the shared `--lr-color-brand-quiet` token used by every other component's own hover/active state.\n- `--lr-select-trigger-height` — Exact trigger height. Unset by default, which leaves `--lr-select-trigger-min-height` as a floor only; set it to a length to both floor and cap the trigger (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
12403
+ "value": "`<lr-select>` — a plain closed-list dropdown: a direct `<lr-*>`\ncounterpart to `<wa-select>`/`<wa-option>`. Trigger is a button (not a text\ninput) -- click/Enter/Space/ArrowDown opens it, there's no typing-to-filter.\nA printable keypress instead jumps (or, while closed, directly selects) the\nnext option whose label starts with what's been typed, like a native\n`<select>`'s type-ahead.\n\nOptions are `<lr-option value>` children, the same element `<lr-combobox>`\nuses. Unlike `lr-combobox` this is single-select only, with no filter/\nsource/with-clear/max-options-visible/empty-text/max-render/multiple surface\n-- see `<lr-combobox>` for the filterable/multi-select case.\n\nReuses `lr-combobox`'s popup positioning (`internal/positioner.js`) and\nclick-outside/Escape/Home/End/Arrow-key listbox navigation patterns,\nadapted to a trigger button that keeps DOM focus throughout (the listbox's\n\"active\" row is conveyed via `aria-activedescendant`, never actual focus),\nmatching the WAI-ARIA \"select-only combobox\" pattern.\n\nWhen `autoCommitSingleOption` is set and exactly one option is enabled\n(regardless of how many disabled ones exist alongside it), the popup never\nopens at all: a click, Enter, Space, ArrowDown, or ArrowUp on the trigger\ncommits that sole option directly, and the trigger renders as a plain\n`role=\"button\"` with no chevron/`aria-haspopup`/`aria-expanded` rather than\na combobox with a permanently inert popup state — opening a one-row list to\npick the only available choice is pure friction with no real decision\nbehind it. This never changes `value`/validity defaults on its own — an\nunselected single-option select stays unselected (and a `required` one\nstays invalid) exactly like the multi-option case, until the trigger is\nactually activated. `autoCommitSingleOption` defaults to `false`: by\ndefault a select always renders the normal combobox/listbox/chevron\ntrigger no matter how many options are enabled, matching pre-1.3.0\nbehavior — opt in explicitly if a narrowing-to-one option list should\nauto-commit.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | `<lr-option>` elements. |\n| `end` | Adornment after the selected-value label and before the expand icon. |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n| `start` | Adornment at the inline-start of the trigger row, before the selected-value label. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `end` | Wrapper around the `end` adornment slot; `hidden` while nothing is slotted. |\n| `error` | The error message. |\n| `expand-icon` | The dropdown indicator. |\n| `form-control` | The outer wrapper around label, trigger, listbox, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `group-label` | An option group's heading row (shown when any option declares a `group`). |\n| `hint` | The hint message. |\n| `listbox` | The options popover. |\n| `option` | An option row. |\n| `option-dot` | An option row's leading status dot (when `dot-color` is set). |\n| `option-label` | An option row's label/sub wrapper. |\n| `option-sub` | An option row's secondary line (when `sub` is set). |\n| `start` | Wrapper around the `start` adornment slot; `hidden` while nothing is slotted. |\n| `trigger` | The trigger button (positioning anchor). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-select-expand-size` — Decorative expand-icon box size, scaled by `size`.\n- `--lr-select-gap` — Gap between the trigger's start adornment, label, end adornment, and expand icon. Doesn't vary by `size`.\n- `--lr-select-radius` — Trigger corner radius. Doesn't vary by `size`.\n- `--lr-select-trigger-padding` — Trigger padding shorthand, scaled by `size`.\n- `--lr-select-trigger-min-height` — Trigger block-size floor, scaled by `size`, and live at every tier including the default `m` (`2.5rem`, matching `<lr-input>`/`<lr-combobox>` at that tier).\n- `--lr-select-font-size` — Trigger font size, scaled by `size`.\n- `--lr-select-option-active-bg` (default: `var(--lr-color-brand-quiet)`) — Background of the hovered/keyboard-active option row. Not declared on `:host`, so a value set on any ancestor is never shadowed -- retheme just this row state without hijacking the shared `--lr-color-brand-quiet` token used by every other component's own hover/active state.\n- `--lr-select-option-selected-bg` (default: `transparent`) — Background of the currently-selected option row. Not declared on `:host`; retheme just the selected row without hijacking `--lr-color-brand`.\n- `--lr-select-option-selected-border` (default: `var(--lr-color-brand)`) — Border color of the selected option row.\n- `--lr-select-option-selected-color` (default: `var(--lr-color-brand)`) — Text color of the selected option row.\n- `--lr-select-option-selected-font-weight` (default: `var(--lr-font-weight-semibold)`) — Font weight of the selected option row.\n- `--lr-select-trigger-height` — Exact trigger height. Unset by default, which leaves `--lr-select-trigger-min-height` as a floor only; set it to a length to both floor and cap the trigger (e.g. to pixel-match a sibling field in the same toolbar row). Because it is never declared by the component itself, it can be set from an ancestor or an outer-tree rule as well as inline on the element."
11960
12404
  },
11961
12405
  "attributes": [
11962
12406
  {
@@ -13032,7 +13476,7 @@
13032
13476
  "name": "lr-swatch-picker",
13033
13477
  "description": {
13034
13478
  "kind": "markdown",
13035
- "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (defaults to `--lr-size-2-5rem`, swapped per `size` tier and floored at 24px), independent of the smaller visible fill/icon rendered inside it. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional custom shape supplied by the option's `icon` field; when present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button, swapped per tier and floored at 24px.\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-size-1-5rem)`) — Visible fill/icon diameter for the swatch, swapped per tier."
13479
+ "value": "`<lr-swatch-picker>` -- a single-select picker over a small, fixed set of color swatches with\nthe WAI-ARIA APG `radiogroup` contract built in: `role=\"radiogroup\"`/`role=\"radio\"`, roving\ntabindex, automatic activation (click or arrow-key move both select immediately, like a native\nradio group), cyclic Arrow/Home/End navigation. Distinct from `<lr-color-picker>`'s freeform\nnative color input -- this picks exactly one of N designer-chosen named colors, the shape apps\notherwise hand-roll as a row of round accent-color buttons.\n\n`mode=\"gemstone\"` uses the shared faceted gemstone glyph for options carrying a `gemstone`\nkey and opts into the gemstone glow/shine defaults. The `options` array still controls display\norder and `value` still controls the initial selection.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The `role=\"radiogroup\"` root. |\n| `swatch` | A single `role=\"radio\"` color swatch's interactive hit target; sized via `--lr-swatch-picker-hit-size` (defaults to `--lr-size-2-5rem`, swapped per `size` tier and floored at 24px), independent of the smaller visible fill/icon rendered inside it. The selected one is `[part='swatch'][aria-checked='true']`. |\n| `swatch-fill` | The compact filled circle rendered when the option has no custom `icon`. |\n| `swatch-icon` | Optional custom shape supplied by the option's `icon` field; when present it replaces `swatch-fill` and the swatch renders unfilled/unbordered behind it. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-swatch-picker-selected-color` (default: `var(--lr-color-brand)`) — Ring color drawn around the selected swatch, themeable independently of the focus ring and every other ring color.\n- `--lr-swatch-picker-selected-blur` (default: `0`) — Blur radius of that same ring. 0 by default (a crisp ring); set a real length (e.g. 0.4rem) for a soft glow instead.\n- `--lr-swatch-picker-shine-duration` (default: `0s`) — Duration of a rhythmic brighten-and-settle \"shine\" on the selected swatch. `0s` (the default) is a no-op -- today's static look for every existing consumer. Set a real duration (e.g. 1.6s) for a pulsing shine; disabled outright under `prefers-reduced-motion: reduce`. Independent of `--lr-swatch-picker-selected-blur` (a separate `filter: brightness()` animation, not `box-shadow`), so the two compose freely, and works identically for a plain color circle and an icon swatch alike.\n- `--lr-swatch-picker-gemstone-selected-blur` (default: `var(--lr-size-0-5rem)`) — Selected glow blur used by `mode=\"gemstone\"` when `--lr-swatch-picker-selected-blur` is not overridden.\n- `--lr-swatch-picker-gemstone-shine-duration` (default: `1.8s`) — Selected shine duration used by `mode=\"gemstone\"` when `--lr-swatch-picker-shine-duration` is not overridden.\n- `--lr-swatch-picker-hit-size` (default: `var(--lr-size-2-5rem)`) — Hit-area size (both min-inline-size and min-block-size) for the swatch button, swapped per tier and floored at 24px.\n- `--lr-swatch-picker-fill-size` (default: `var(--lr-size-1-5rem)`) — Visible fill/icon diameter for the swatch, swapped per tier."
13036
13480
  },
13037
13481
  "attributes": [
13038
13482
  {
@@ -13049,6 +13493,13 @@
13049
13493
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
13050
13494
  }
13051
13495
  },
13496
+ {
13497
+ "name": "mode",
13498
+ "description": {
13499
+ "kind": "markdown",
13500
+ "value": "Visual treatment. `swatch` preserves the plain-circle default; `gemstone` renders the shared\ngemstone glyph for options with a `gemstone` key and enables its glow/shine recipe.\n\nType: `LyraSwatchPickerMode` \nDefault: `'swatch'`"
13501
+ }
13502
+ },
13052
13503
  {
13053
13504
  "name": "size",
13054
13505
  "description": {
@@ -13134,9 +13585,16 @@
13134
13585
  "name": "lr-table",
13135
13586
  "description": {
13136
13587
  "kind": "markdown",
13137
- "value": "`<lr-table>` — a presentational, sort/select-aware data table.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lr-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation, mirroring `sortKey`/`selectedKey`'s existing\npresentational-only convention.\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedKeys` contains the raw keys selected in multiple\nmode.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\n`pageSize` enables controlled pagination through the existing\n`<lr-pagination>` primitive. Client mode slices `rows`; server mode\nrenders the supplied page unchanged while using `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Either way exactly one `role=\"status\"` live region announces the\nstate — every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editable: true` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editable: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). `rowTotal`/`grandTotal` add a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editable: true` cell, and rendered persistently in every body cell of an `editable: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden `role=\"status\"` node, since the placeholder rows are the visible affordance. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
13588
+ "value": "`<lr-table>` — a presentational, sort/select-aware data table.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lr-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lr-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lr-row-expand-toggle`\non activation, mirroring `sortKey`/`selectedKey`'s existing\npresentational-only convention.\n\nSelection is opt-in through the `selectionMode` property. Use `single` or\n`multiple` to self-manage row selection; the default `none` remains\npresentational. `selectedKeys` contains the raw keys selected in multiple\nmode.\n\n`filterable` adds a compact search field above the grid. `filterText` is\ncontrolled and emits `lr-filter-change`; `filter` can provide a typed\npredicate, otherwise the row is matched against its JSON representation.\n`pageSize` enables controlled pagination through the existing\n`<lr-pagination>` primitive. Client mode slices `rows`; server mode\nrenders the supplied page unchanged while using `totalItems` for the\nnavigation summary. `loading` keeps the table shell busy; `loadingAppearance`\nchooses how — the default `'spinner'` replaces the grid with an indeterminate\nspinner, while `'skeleton'` keeps the real `<colgroup>`/`<thead>` (and the\nfilter/pagination chrome) and fills the body with `skeletonRows` placeholder\nrows, so column geometry survives the load instead of collapsing and\nreflowing. Either way exactly one `role=\"status\"` live region announces the\nstate — every placeholder opts out of `<lr-skeleton>`'s own announcement.\nColumns with `editable: true` open a native text/number editor on\ndouble-click and emit `lr-cell-edit`; row mutation remains consumer-owned.\n`editable: 'always'` instead renders that editor in every body cell of the\ncolumn from first paint — a settings/rate-style column meant to be typed\nstraight into. Persistent editors are plain tab stops (no `tabindex` of their\nown, exactly like the row-expand toggle) outside the header/row roving model,\nso arrow keys still navigate the grid from a row's own tab stop and act as\ncaret movement once focus is inside a field. Enter commits and keeps focus;\nEscape has nothing to cancel back to, so it is left uncancelled for an\nancestor dialog/popover. Their value binds as a content attribute, so once\nthe user has typed into one an out-of-band `rows` update to that same cell no\nlonger replaces the draft; an untouched editor still picks up a new value.\nFocus is restored across a re-sort that moves the editor's node, and dropped\n(never re-aimed at an unrelated row) when its row leaves the rendered page.\n`spellcheck`/`autocapitalize`/`autoCorrect` forward to the filter input and, for a `'text'`\n(the default) `editType`, the inline cell editor -- no effect on a `'number'` cell editor.\n`groupBy` inserts non-focusable group header rows before each group; use\n`groupLabel` when the raw group key needs custom content.\n\n`columns[].heatValue` opts a column into heat-tint mode: its numeric return value is normalized\nagainst a shared scale spanning every `heatValue`-defining column across every currently-rendered\nrow (auto-derived, or overridden via `heatTintScale`) and painted as a `color-mix()` background via\nthe retheme-able `--lr-table-heat-tint-lo`/`-hi` custom properties (matching `lr-heatmap`'s own\nramp-token convention). `rowTotal`/`grandTotal` add a trailing column mirroring `expandedContent`'s\nleading one: `rowTotal(row)` renders per-row, `grandTotal(rows)` renders at its intersection with\nthe footer row (only when a column also defines `footer`) — both share `footer`'s own\n\"consumer computes/renders\" contract rather than assuming addition.\n\nThe built-in empty state is addressable rather than fixed: every `<lr-empty>` the table renders\ncarries `part=\"empty\"` and re-exports its own inner parts as `empty-heading`/`empty-description`/\n`empty-icon`/`empty-actions`/`empty-base`, the two *data*-empty branches (no rows at all, and\nfiltered/paginated down to zero) render it as the fallback content of a named `empty` slot so a\nconsumer can replace it wholesale, and `emptyCompact` overrides each branch's built-in `compact`\ndefault. The no-columns branch is deliberately **not** slot-replaceable — it reports a\nconfiguration problem (`noColumnsHeading`), not \"this query returned nothing\", and a single slot\ncovering all three would collapse that distinction.\n\n`layout` sets a floor on the `<table>`'s `table-layout`: `'fixed'` forces it even with no column\nwidths, while the default `'auto'` still resolves to `fixed` whenever a column declares a `width`\nor a drag-resize is in flight (column resizing does not work under `table-layout: auto`).\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `empty` | Replaces the built-in empty state on the two *data*-empty branches (no rows at all, and filtered/paginated down to zero). Left unfilled, the built-in `[part='empty']` `<lr-empty>` renders as this slot's fallback content. The no-columns branch renders its own `noColumnsHeading` state and is not slot-replaceable. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the `<table>` and its footer controls. |\n| `caption` | The `<caption>` element, rendered only when `caption` is set. |\n| `cell` | Each body `<td>`. |\n| `cell-editor` | The native inline cell editor: shown after a double-click on an `editable: true` cell, and rendered persistently in every body cell of an `editable: 'always'` column. |\n| `empty` | The built-in `<lr-empty>` host, in all three empty states (no columns configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty states render it as the `empty` slot's fallback, so it disappears once that slot is filled. Note that the no-columns and no-rows states return the empty element as the shadow root's own root, with no `[part='base']` wrapper around it — `::part(base)` does not apply in those two states, only in the filtered-to-zero one. |\n| `empty-actions` | Exported from the built-in `<lr-empty>`'s `actions` part. |\n| `empty-base` | Exported from the built-in `<lr-empty>`'s own `base` part. |\n| `empty-description` | Exported from the built-in `<lr-empty>`'s `description` part. |\n| `empty-heading` | Exported from the built-in `<lr-empty>`'s `heading` part. |\n| `empty-icon` | Exported from the built-in `<lr-empty>`'s `icon` part. |\n| `expand-toggle-cell` | Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set. |\n| `expanded-cell` | The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`. |\n| `expanded-row` | The full-width panel `<tr>` rendered beneath a row whose key is in `expandedKeys`. |\n| `filter` | The optional row-filter input. |\n| `filter-label` | The `<label>` wrapping the filter input. |\n| `foot` | The `<tfoot>`, only rendered when at least one column defines `footer`. |\n| `footer-cell` | A single footer cell. |\n| `footer-row` | The single footer row. |\n| `group-cell` | The full-width group header cell. |\n| `group-row` | A non-focusable group header row. |\n| `head` | The `<thead>` element. |\n| `header-cell` | Each `<th>` header cell. |\n| `loading` | The loading-state wrapper. Under `loadingAppearance=\"spinner\"` (the default) it is the visible block holding the spinner; under `\"skeleton\"` it is the visually-hidden `role=\"status\"` node, since the placeholder rows are the visible affordance. |\n| `more-button` | The \"load more\" control, shown when `hasMore` is true. |\n| `pagination` | The optional pagination component. |\n| `resize-handle` | The focusable separator used to resize a `resizable` column. |\n| `reveal-columns-button` | The button that toggles `priority`-hidden columns back into view. |\n| `row` | Each body `<tr>`. |\n| `row-expand-icon` | The chevron icon inside `row-expand-toggle`. |\n| `row-expand-toggle` | The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`. |\n| `row-total-cell` | Each body row's trailing `<td>` holding `rowTotal(row)`, rendered only when `rowTotal` is set. The corresponding footer-row cell (holding `grandTotal`) is a `footer-cell` instead, matching every other footer cell. |\n| `skeleton` | Each `<lr-skeleton>` placeholder inside a `loadingAppearance=\"skeleton\"` body cell. Its rows and cells reuse the ordinary `row`/`cell`/`row-total-cell` parts (that is what keeps them geometrically identical to real rows), so this is the part to target for the placeholder's own look — e.g. `::part(skeleton) { --lr-skeleton-h: 2em; }`. |\n| `sort-icon` | The chevron shown in the active sortable column's header cell. |\n| `table` | The `<table role=\"grid\">` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-table-resize-min-width` (default: `var(--lr-size-3rem)`) — Default minimum width for a resizable column without an explicit pixel `minWidth`.\n- `--lr-table-resize-handle-opacity` (default: `0.12`) — Hover/focus opacity of the resize handle.\n- `--lr-table-max-height` (default: `none`) — Cap on the scroll container's block size, past which the table body scrolls.\n- `--lr-table-heat-tint-lo` (default: `var(--lr-color-brand-quiet)`) — Low endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-tint-hi` (default: `var(--lr-color-brand)`) — High endpoint of the heat-tint ramp used by `heatValue` columns.\n- `--lr-table-heat-t` — This cell's position on the heat-tint ramp, as a percentage string. Set inline by the component on each `[data-heat]` cell; not consumer-settable.\n- `--lr-table-row-selected-bg` (default: `var(--lr-color-brand-quiet)`) — Background of a row whose `aria-selected` is `true`. Shadow Parts forbids an attribute selector after `::part()`, so `::part(row)[aria-selected]` is invalid CSS and the selected row could otherwise only be restyled by hijacking the library-wide `--lr-color-brand-quiet` token.\n- `--lr-table-header-sorted-bg` (default: `transparent`) — Background of the currently-sorted column's header cell (`[aria-sort]` other than `none`). Same rationale as `--lr-table-row-selected-bg`: `::part(header-cell)[aria-sort]` is invalid CSS, so this token is the supported way to recolor the sorted header without hijacking a library-wide token.\n- `--lr-table-header-sorted-color` (default: `inherit`) — Text color of the currently-sorted column's header cell.\n- `--lr-table-sticky-offset` (default: `0`) — Distance a `sticky` column pins from the inline edge. Measured and set inline per column by the component so multiple sticky columns stack instead of overlapping; falls back to `0` for the first one, or before the first measurement pass."
13138
13589
  },
13139
13590
  "attributes": [
13591
+ {
13592
+ "name": "accessible-label",
13593
+ "description": {
13594
+ "kind": "markdown",
13595
+ "value": "Accessible name for the `role=\"grid\"` — a typed alternative to setting `aria-label` on the\nhost. When set it becomes the grid's `aria-label`; a host `aria-label` is used as a fallback\nwhen this is unset. Consumer-supplied text, so it is NOT run through `this.localize()`.\n\nType: `string` \nDefault: `''`"
13596
+ }
13597
+ },
13140
13598
  {
13141
13599
  "name": "autocapitalize",
13142
13600
  "description": {
@@ -13151,6 +13609,13 @@
13151
13609
  "value": "Forwarded to the same inputs' native `autocorrect` (Safari/WebKit-specific). Empty string\nomits the attribute (browser default). Named `autoCorrect` (capital `C`), not `autocorrect`,\nto dodge a TS `lib.dom.d.ts` collision -- same fix as `<lr-textarea>`/`<lr-model-select>`.\n\nType: `string` \nDefault: `''`"
13152
13610
  }
13153
13611
  },
13612
+ {
13613
+ "name": "caption",
13614
+ "description": {
13615
+ "kind": "markdown",
13616
+ "value": "Optional visible caption rendered as the table's `<caption>`. Also names the grid (via\n`aria-labelledby`) when no `accessibleLabel`/host `aria-label` is set. Consumer-supplied\ntext, not localized.\n\nType: `string` \nDefault: `''`"
13617
+ }
13618
+ },
13154
13619
  {
13155
13620
  "name": "columns-hidden",
13156
13621
  "description": {
@@ -13371,6 +13836,13 @@
13371
13836
  "value": "Forwarded to the filter input's, and (when the active column's `editType` is `'text'`, the\ndefault) the inline cell-editor input's, native `spellcheck`. Defaults to `true`, matching\nthe native element's own default. `spellcheck=\"false\"` is parsed as `false` (see\n`spellcheckConverter` above). No effect on a `'number'` cell editor.\n\nType: `boolean` \nDefault: `true`"
13372
13837
  }
13373
13838
  },
13839
+ {
13840
+ "name": "storage-key",
13841
+ "description": {
13842
+ "kind": "markdown",
13843
+ "value": "Persists `showAllColumns` to `localStorage` across reloads when set. Namespaced as\n`lr-table:${storageKey}` -- mirrors `lr-app-rail`'s identical `storage-key` pattern.\n\nType: `string | undefined`"
13844
+ }
13845
+ },
13374
13846
  {
13375
13847
  "name": "total-items",
13376
13848
  "description": {
@@ -13597,7 +14069,7 @@
13597
14069
  "name": "lr-textarea",
13598
14070
  "description": {
13599
14071
  "kind": "markdown",
13600
- "value": "`<lr-textarea>` — a multiline plain-text input primitive, form-associated via the\n`FormAssociated` mixin (see `<lr-chat-composer>`/`<lr-date-input>` for the same shape), so it\nparticipates in native `<form>` submission/validation/reset like any other text control --\n`name`/`value`/`disabled`/`required`/`checkValidity()`/`reportValidity()` all come from that mixin.\n\nShips an opt-in `label`/`hint`/`errorText` form-control chrome (props + matching named slots +\n`form-control-label`/`hint`/`error` parts), mirroring `<lr-select>`'s exact pattern -- left\nunset, the chrome remains hidden. A consumer preferring their own form-field layout can still\nignore these and wrap the element. A host `aria-label` is forwarded to the internal textbox;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, textarea, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `textarea` | The native `<textarea>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-textarea-max-block-size` (default: `none`) — Maximum auto-grown block size before the textarea scrolls."
14072
+ "value": "`<lr-textarea>` — a multiline plain-text input primitive, form-associated via the\n`FormAssociated` mixin (see `<lr-chat-composer>`/`<lr-date-input>` for the same shape), so it\nparticipates in native `<form>` submission/validation/reset like any other text control --\n`name`/`value`/`disabled`/`required`/`checkValidity()`/`reportValidity()` all come from that mixin.\n\nShips an opt-in `label`/`hint`/`errorText` form-control chrome (props + matching named slots +\n`form-control-label`/`hint`/`error` parts), mirroring `<lr-select>`'s exact pattern -- left\nunset, the chrome remains hidden. A consumer preferring their own form-field layout can still\nignore these and wrap the element. A host `aria-label` is forwarded to the internal textbox;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.\n\n`minlength`/`maxlength` are forwarded to the internal native `<textarea>` and bridged into this\nelement's own `ElementInternals` as `tooShort`/`tooLong` by `updateValidity()`.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| `error` | Custom error content. |\n| `hint` | Custom hint content. |\n| `label` | Custom label content. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `error` | The error message. |\n| `form-control` | The outer wrapper around label, textarea, error and hint. |\n| `form-control-label` | The `<label>` element. |\n| `hint` | The hint message. |\n| `textarea` | The native `<textarea>` element. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-textarea-max-block-size` (default: `none`) — Maximum auto-grown block size before the textarea scrolls."
13601
14073
  },
13602
14074
  "attributes": [
13603
14075
  {
@@ -13677,6 +14149,20 @@
13677
14149
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
13678
14150
  }
13679
14151
  },
14152
+ {
14153
+ "name": "maxlength",
14154
+ "description": {
14155
+ "kind": "markdown",
14156
+ "value": "Upper counterpart of `minlength` (native `maxlength`/`tooLong`), with the same parsing and\nthe same default of `undefined`. Note that native `maxlength` also *prevents* typing beyond\nthe limit; it reports `tooLong` for values that arrive some other way (paste of a longer\nvalue, a programmatic assignment).\n\nType: `number | undefined`"
14157
+ }
14158
+ },
14159
+ {
14160
+ "name": "minlength",
14161
+ "description": {
14162
+ "kind": "markdown",
14163
+ "value": "Minimum text length, forwarded to the native `<textarea>`'s own `minlength` and reported as\n`tooShort` by `updateValidity()`. Defaults to `undefined` (no lower bound). Like native\n`minlength`, an empty value never violates it — pair it with `required` to also reject\nempty.\n\nType: `number | undefined`"
14164
+ }
14165
+ },
13680
14166
  {
13681
14167
  "name": "name",
13682
14168
  "description": {
@@ -13776,7 +14262,7 @@
13776
14262
  "name": "lr-thread-list",
13777
14263
  "description": {
13778
14264
  "kind": "markdown",
13779
- "value": "`<lr-thread-list>` — the conversation sidebar: a grouped, searchable list of chat sessions with\npin/archive/delete/rename affordances. *Data mode* (non-empty `threads`, or empty `threads` with\nnothing slotted) renders every row as a `<lr-conversation-item>` inside an internal\n`<lr-virtual-list>` — virtualized by construction, scroll position and per-row state survive a\n`threads` replacement; zero rows renders the built-in empty state. *Slotted mode* (empty `threads`\n*and* real slotted content) renders host-supplied `<lr-conversation-item>`s from the default slot\nas-is: no grouping, virtualization, or row actions in that mode — those are data-mode-only by design\n(shadow DOM cannot inject group headers between slotted children).\n\nNo thread CRUD or persistence: every mutation (`lr-thread-pin`/`-archive`/`-delete`/`-rename`) is\na controlled event carrying the *requested* new state — the host mutates `threads`.\n\nData mode: a host needing content with no home in `lr-conversation-item`'s own\n`title`/`excerpt`/`meta`/`actions` surface sets `wrapRow` to wrap the already-built row. For\ncommon row composition, `renderLeading`, `renderExcerpt`, `renderMeta`, and `renderRowContent`\nprovide focused virtualized render hooks -- `renderExcerpt` renders into the row item's own\n`excerpt` slot (winning over the plain-string `excerpt` property) for rich per-row content such\nas a highlighted search snippet. A host needing a fully custom\n`actions` surface itself — beyond `rowActions`'s closed `pin | archive | delete` set, e.g. a\n`<lr-menu>` with Rename/Delete — sets `renderActions` instead; its content is appended after any\nbuilt-in `rowActions` output in the same slot, and `wrapRow` continues to compose around the result.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Slotted mode only: host-supplied `lr-conversation-item`s, rendered in order. Each top-level assigned element that doesn't already carry an explicit `role` is given `role=\"listitem\"`, since `[part=\"list\"]` is `role=\"list\"` in this mode and `lr-conversation-item` deliberately doesn't self-apply that role (see its own class doc). |\n| `empty` | Replaces the built-in empty state. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root. |\n| `empty` | The empty/no-matches state. |\n| `group-header` | A date/custom group header in data mode. |\n| `group-icon` | The decorative expand/collapse glyph. |\n| `group-label` | The group label inside `group-toggle`. |\n| `group-sticky` | `sticky-groups` only: the pinned copy of the current group's header, exported from the internal `lr-virtual-list`'s sticky layer. It wraps a full copy of the `group-header`/`group-toggle`/`group-label`/`group-icon` markup (which therefore styles both the real header row and the pinned copy), and carries `aria-hidden` — style it for the pinned band itself, e.g. a shadow or a border under the band. |\n| `group-toggle` | The controlled group expand/collapse button. |\n| `list` | The list region. |\n| `pin-glyph` | The small pin indicator shown in a pinned row's `meta` slot (data mode). |\n| `row` | Exported from the internal `lr-virtual-list`'s `row` part (data mode). |\n| `row-action` | A built-in pin/archive/delete icon button (data mode, when `rowActions` includes it). |\n| `row-actions` | The wrapper around built-in and `renderActions` output. |\n| `row-content` | The wrapper around `renderRowContent` output. |\n| `row-excerpt` | The wrapper around `renderExcerpt` output, slotted into the row item's own `excerpt` slot. |\n| `row-item-actions` | Data mode: the row item's `actions` wrapper. |\n| `row-item-base` | Data mode: the row `<lr-conversation-item>`'s own `base` part — the box whose padding sets row height. `row-item-*` parts are the item's *internals*; the `row-*` parts above wrap this component's own callback output and are a different surface. Styling row density here replaces the older `::part(row) { --lr-theme-*: … }` workaround, which retheme'd the whole row subtree (`renderActions` popups included). |\n| `row-item-content` | Data mode: the row item's title/excerpt content column. |\n| `row-item-excerpt` | Data mode: the row item's excerpt line. |\n| `row-item-leading` | Data mode: the row item's `leading` wrapper. |\n| `row-item-meta` | Data mode: the row item's `meta` wrapper. |\n| `row-item-option` | Data mode: the row item's selectable `option` region. |\n| `row-item-rename-button` | Data mode: the row item's pencil/rename affordance. |\n| `row-item-timestamp` | Data mode: the row item's `<time>` element. |\n| `row-item-title` | Data mode: the row item's title text. |\n| `row-item-title-input` | Data mode: the row item's in-place rename `<input>`. |\n| `row-leading` | The wrapper around `renderLeading` output. |\n| `row-meta` | A wrapper around built-in or `renderMeta` metadata. |\n| `row-wrapper` | The wrapper around `wrapRow` output (data mode, only when `wrapRow` is set). Row-only: group headers are never passed through `wrapRow`, so they never carry it. |\n| `search` | The search field wrapper. |\n| `search-input` | The `<input type=\"search\">`. |\n| `viewport` | The real scroll container, exported from the internal `lr-virtual-list`. It fills this component's height with no consumer CSS (and falls back to `lr-virtual-list`'s own 24rem `--lr-virtual-list-height` default when the container has no resolvable height). |"
14265
+ "value": "`<lr-thread-list>` — the conversation sidebar: a grouped, searchable list of chat sessions with\npin/archive/delete/rename affordances. *Data mode* (non-empty `threads`, or empty `threads` with\nnothing slotted) renders every row as a `<lr-conversation-item>` inside an internal\n`<lr-virtual-list>` — virtualized by construction, scroll position and per-row state survive a\n`threads` replacement; zero rows renders the built-in empty state. *Slotted mode* (empty `threads`\n*and* real slotted content) renders host-supplied `<lr-conversation-item>`s from the default slot\nas-is: no grouping, virtualization, or row actions in that mode — those are data-mode-only by design\n(shadow DOM cannot inject group headers between slotted children).\n\nNo thread CRUD or persistence: every mutation (`lr-thread-pin`/`-archive`/`-delete`/`-rename`) is\na controlled event carrying the *requested* new state — the host mutates `threads`.\n\nData mode: a host needing content with no home in `lr-conversation-item`'s own\n`title`/`excerpt`/`meta`/`actions` surface sets `wrapRow` to wrap the already-built row. For\ncommon row composition, `renderLeading`, `renderExcerpt`, `renderMeta`, and `renderRowContent`\nprovide focused virtualized render hooks -- `renderExcerpt` renders into the row item's own\n`excerpt` slot (winning over the plain-string `excerpt` property) for rich per-row content such\nas a highlighted search snippet. A host needing a fully custom\n`actions` surface itself — beyond `rowActions`'s closed `pin | archive | delete` set, e.g. a\n`<lr-menu>` with Rename/Delete — sets `renderActions` instead; its content is appended after any\nbuilt-in `rowActions` output in the same slot, and `wrapRow` continues to compose around the result.\n\n---\n\n**Slots**\n\n| Name | Description |\n| --- | --- |\n| (default) | Slotted mode only: host-supplied `lr-conversation-item`s, rendered in order. Each top-level assigned element that doesn't already carry an explicit `role` is given `role=\"listitem\"`, since `[part=\"list\"]` is `role=\"list\"` in this mode and `lr-conversation-item` deliberately doesn't self-apply that role (see its own class doc). |\n| `empty` | Replaces the built-in empty state. |\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root. |\n| `empty` | The empty/no-matches state. |\n| `group-header` | A date/custom group header in data mode. |\n| `group-icon` | The decorative expand/collapse glyph. |\n| `group-label` | The group label inside `group-toggle`. |\n| `group-sticky` | `sticky-groups` only: the pinned copy of the current group's header, exported from the internal `lr-virtual-list`'s sticky layer. It wraps a full copy of the `group-header`/`group-toggle`/`group-label`/`group-icon` markup (which therefore styles both the real header row and the pinned copy), and carries `aria-hidden` — style it for the pinned band itself, e.g. a shadow or a border under the band. |\n| `group-toggle` | The controlled group expand/collapse button. |\n| `list` | The list region. |\n| `pin-glyph` | The small pin indicator shown in a pinned row's `meta` slot (data mode). |\n| `row` | Exported from the internal `lr-virtual-list`'s `row` part (data mode). |\n| `row-action` | A built-in pin/archive/delete icon button (data mode, when `rowActions` includes it). |\n| `row-actions` | The wrapper around built-in and `renderActions` output. |\n| `row-content` | The wrapper around `renderRowContent` output. |\n| `row-excerpt` | The wrapper around `renderExcerpt` output, slotted into the row item's own `excerpt` slot. |\n| `row-item-actions` | Data mode: the row item's `actions` wrapper. |\n| `row-item-active-indicator` | Data mode: the row item's decorative active indicator, exported from `lr-conversation-item`. |\n| `row-item-base` | Data mode: the row `<lr-conversation-item>`'s own `base` part — the box whose padding sets row height. `row-item-*` parts are the item's *internals*; the `row-*` parts above wrap this component's own callback output and are a different surface. Styling row density here replaces the older `::part(row) { --lr-theme-*: … }` workaround, which retheme'd the whole row subtree (`renderActions` popups included). |\n| `row-item-content` | Data mode: the row item's title/excerpt content column. |\n| `row-item-excerpt` | Data mode: the row item's excerpt line. |\n| `row-item-leading` | Data mode: the row item's `leading` wrapper. |\n| `row-item-meta` | Data mode: the row item's `meta` wrapper. |\n| `row-item-option` | Data mode: the row item's selectable `option` region. |\n| `row-item-rename-button` | Data mode: the row item's pencil/rename affordance. |\n| `row-item-timestamp` | Data mode: the row item's `<time>` element. |\n| `row-item-title` | Data mode: the row item's title text. |\n| `row-item-title-input` | Data mode: the row item's in-place rename `<input>`. |\n| `row-leading` | The wrapper around `renderLeading` output. |\n| `row-meta` | A wrapper around built-in or `renderMeta` metadata. |\n| `row-wrapper` | The wrapper around `wrapRow` output (data mode, only when `wrapRow` is set). Row-only: group headers are never passed through `wrapRow`, so they never carry it. |\n| `search` | The search field wrapper. |\n| `search-input` | The `<input type=\"search\">`. |\n| `viewport` | The real scroll container, exported from the internal `lr-virtual-list`. It fills this component's height with no consumer CSS (and falls back to `lr-virtual-list`'s own 24rem `--lr-virtual-list-height` default when the container has no resolvable height). |"
13780
14266
  },
13781
14267
  "attributes": [
13782
14268
  {
@@ -13935,6 +14421,13 @@
13935
14421
  "value": "Latest selectable time, in the same form as `min`, reported by the native input as\n`rangeOverflow`. Defaults to `undefined` (no upper bound).\n\nType: `number | string | undefined`"
13936
14422
  }
13937
14423
  },
14424
+ {
14425
+ "name": "maxlength",
14426
+ "description": {
14427
+ "kind": "markdown",
14428
+ "value": "Upper counterpart of `minlength` (native `maxlength`/`tooLong`), with the same parsing and the\nsame default of `undefined`. Note that native `maxlength` also *prevents* typing beyond the\nlimit; it reports `tooLong` for values that arrive some other way (paste of a longer value,\na programmatic assignment).\n\nType: `number | undefined`"
14429
+ }
14430
+ },
13938
14431
  {
13939
14432
  "name": "min",
13940
14433
  "description": {
@@ -13942,6 +14435,13 @@
13942
14435
  "value": "Earliest selectable time, as the native `<input type=\"time\">` spells it (`HH:MM`, or\n`HH:MM:SS` alongside a seconds-precision `step`). Forwarded verbatim to that native input,\nwhose own constraint validation reports `rangeUnderflow`. Defaults to `undefined` (no lower\nbound). Unlike `<lr-input type=\"number\">`'s numeric `min`, the attribute form is *not*\nparsed as a number.\n\nType: `number | string | undefined`"
13943
14436
  }
13944
14437
  },
14438
+ {
14439
+ "name": "minlength",
14440
+ "description": {
14441
+ "kind": "markdown",
14442
+ "value": "Minimum text length, forwarded to the internal native `<input>`'s own `minlength` and\nconsulted by that same native input's constraint validation (`tooShort`, see\n`updateValidity()`). Defaults to `undefined` (no lower bound). Like native `minlength`, an\nempty value never violates it — pair it with `required` to also reject empty. Ignored by the\nnative input for `type=\"number\"`/`type=\"time\"`, exactly as the platform specifies.\n\nType: `number | undefined`"
14443
+ }
14444
+ },
13945
14445
  {
13946
14446
  "name": "password-visible",
13947
14447
  "description": {
@@ -13949,6 +14449,13 @@
13949
14449
  "value": "`type=\"password\"` only — whether the field currently reveals its raw text. Toggled by the\nbuilt-in `password-toggle` button; also settable by a consumer up front.\n\nType: `boolean` \nDefault: `false`"
13950
14450
  }
13951
14451
  },
14452
+ {
14453
+ "name": "pattern",
14454
+ "description": {
14455
+ "kind": "markdown",
14456
+ "value": "A regular expression the value must match in full, forwarded to the internal native\n`<input>`'s own `pattern` and validated by it (`patternMismatch`). Defaults to `undefined`\n(no pattern). Compiled by the browser with the `v` flag and anchored to the whole value, so\nno `^`/`$` is needed; an empty value never violates it.\n\nType: `string | undefined`"
14457
+ }
14458
+ },
13952
14459
  {
13953
14460
  "name": "placeholder",
13954
14461
  "description": {
@@ -14563,7 +15070,7 @@
14563
15070
  "name": "lr-tool-result-view",
14564
15071
  "description": {
14565
15072
  "kind": "markdown",
14566
- "value": "`<lr-tool-result-view>` — renders a tool call's result via whichever\ncustom renderer a host app has registered for it (see `registerToolRenderer()`\nin `registry.ts`), falling back to `<lr-json-viewer>` whenever no\nrenderer matches, a candidate renderer's `matches()` predicate throws during\ndispatch, a renderer's optional `load()` rejects, or its `render()` throws.\nThis component owns none of the actual visual weight of a\npopulated tool result — that's entirely whatever the registered renderer\nreturns; this is just the dispatch + fallback + loading-state shell.\n\nDispatch runs against `registry` when set, otherwise against the\nmodule-level default registry `registerToolRenderer()` writes to — see\n`findToolRenderer()`'s two-step (exact name, then shape-based `matches()`)\nlookup order for the full rule.\n\n`fallback` implements two kinds: `\"json\"` (the default, an unconditional `<lr-json-viewer>`)\nand `\"text\"`, which renders a *string* `result` as preformatted text instead — falling back to\nthe `\"json\"` behavior when `result` isn't a string, so setting `fallback=\"text\"` defensively\nagainst an unpredictable result shape never renders broken output. `copyable` adds a\ncopy-to-clipboard affordance to either fallback kind (forwarded to `<lr-json-viewer>`'s own\n`copyable` for `\"json\"`; a `<lr-copy-button>` alongside the text for `\"text\"`).\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the resolved renderer's output (or the loading/fallback view). |\n| `fallback-copy` | The `<lr-copy-button>` shown when `copyable` is set alongside the `fallback=\"text\"` kind (only present when both are set). |\n| `fallback-text` | The `<pre>` element for the `fallback=\"text\"` kind's preformatted result text (only present in that mode). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-result-view-font` (default: `var(--lr-font-mono)`) — Font family for the `fallback=\"text\"` preformatted output."
15073
+ "value": "`<lr-tool-result-view>` — renders a tool call's result via whichever\ncustom renderer a host app has registered for it (see `registerToolRenderer()`\nin `registry.ts`), falling back to `<lr-json-viewer>` whenever no\nrenderer matches, a candidate renderer's `matches()` predicate throws during\ndispatch, a renderer's optional `load()` rejects, or its `render()` throws.\nThis component owns none of the actual visual weight of a\npopulated tool result — that's entirely whatever the registered renderer\nreturns; this is just the dispatch + fallback + loading-state shell.\n\nDispatch runs against `registry` when set, otherwise against the\nmodule-level default registry `registerToolRenderer()` writes to — see\n`findToolRenderer()`'s two-step (exact name, then shape-based `matches()`)\nlookup order for the full rule.\n\n`fallback` implements two kinds: `\"json\"` (the default, an unconditional `<lr-json-viewer>`)\nand `\"text\"`, which renders a *string* `result` as preformatted text instead — falling back to\nthe `\"json\"` behavior when `result` isn't a string, so setting `fallback=\"text\"` defensively\nagainst an unpredictable result shape never renders broken output. `copyable` adds a\ncopy-to-clipboard affordance to either fallback kind (forwarded to `<lr-json-viewer>`'s own\n`copyable` for `\"json\"`; a `<lr-copy-button>` alongside the text for `\"text\"`).\n\nA matched renderer's `render()` is also handed a 3rd `context` argument\n(`{ reportStatus }`) it can use to signal a non-throwing outcome (e.g. an application-level\nfailure it still drew a real UI for) — see `ToolRenderContext` in `registry.ts`. This is purely\nadditive: a pre-existing 2-arg `render(result, args)` function stays assignable unchanged, and a\nrenderer that never calls `reportStatus` leaves `status` at its default, `'success'`.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The root wrapper around the resolved renderer's output (or the loading/fallback view). |\n| `fallback-copy` | The `<lr-copy-button>` shown when `copyable` is set alongside the `fallback=\"text\"` kind (only present when both are set). |\n| `fallback-text` | The `<pre>` element for the `fallback=\"text\"` kind's preformatted result text (only present in that mode). |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-tool-result-view-font` (default: `var(--lr-font-mono)`) — Font family for the `fallback=\"text\"` preformatted output."
14567
15074
  },
14568
15075
  "attributes": [
14569
15076
  {
@@ -14587,6 +15094,13 @@
14587
15094
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
14588
15095
  }
14589
15096
  },
15097
+ {
15098
+ "name": "status",
15099
+ "description": {
15100
+ "kind": "markdown",
15101
+ "value": "The outcome of the currently-rendered result, as reported by the matched renderer's optional\n`context.reportStatus()` third `render()` argument (see `ToolRenderContext` in `registry.ts`).\nReset to `'success'` immediately before every `render()` call, so a renderer that never calls\n`reportStatus` — including every pre-existing 2-arg renderer — leaves it at that default, and a\nlater renderer that stays quiet doesn't inherit a stale outcome from a previous one. Reuses the\nsame vocabulary as `<lr-tool-result-dialog>`'s own `status` property.\n\nType: `ToolResultStatus` \nDefault: `'success'`"
15102
+ }
15103
+ },
14590
15104
  {
14591
15105
  "name": "tool-name",
14592
15106
  "description": {
@@ -15015,7 +15529,7 @@
15015
15529
  "name": "lr-typing-indicator",
15016
15530
  "description": {
15017
15531
  "kind": "markdown",
15018
- "value": "`<lr-typing-indicator>` — a purely presentational \"assistant is\nresponding\" presence cue. No events, no interactivity: a consumer mounts\nit while a response is being generated and removes it (or hides it) once\nreal content has arrived.\n\nThree visual variants share one component rather than three separate tags\nbecause callers pick between them along a single axis — how the\nsurrounding surface wants the cue to read — and nothing else about the\ncomponent differs:\n- `dots` (default) — three dots with a staggered bounce, the classic\n \"typing…\" affordance for a standalone status line.\n- `pulse` — a single breathing dot, a quieter cue for a tighter space\n (e.g. next to an avatar).\n- `cursor` — a blinking vertical bar, meant to sit inline at the tail end\n of streamed text that is still being appended to.\n\nAccessibility: this indicator typically mounts and unmounts around a real\ngeneration lifecycle (appears when a response starts, disappears once one\narrives) rather than emitting a stream of updates of its own, so it does\n*not* route through `<lr-live-region>`/`Announcer`\n(`../../internal/announcer.js`) — that machinery exists to coalesce many\nrapidly-changing announcements into one, and there is only ever a single\nannouncement here: the mount itself. A plain `role=\"status\"` plus an\naccessible name derived from `label` is sufficient, set both as an\n`aria-label` on the host *and* as a visually-hidden text node in the\nshadow tree, so the name survives even if only one of the two is picked up\nby a given assistive-tech/browser pairing. An untouched-default, empty, or\nwhitespace-only `label` falls back to the localized \"Thinking…\" copy in\nboth places, rather than leaving the component with no accessible name at\nall. An `aria-label` set directly on the host element (the idiomatic way to\nname any custom element) wins over the `label`-derived default, in both\nplaces -- the host attribute is never silently clobbered on first render.\nThe animated dots/pulse/cursor\nshape is `aria-hidden=\"true\"` — it's decorative; `label` is the entire\naccessible content, so nothing narrates individual animation frames.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The decorative (`aria-hidden`) wrapper around the animated shape. |\n| `cursor` | The blinking bar in the `cursor` variant. |\n| `dot` | Each of the three dots in the `dots` variant. |\n| `pulse` | The single pulsing dot in the `pulse` variant. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-transition-ambient` (default: `1.8s ease-in-out`) — Animation duration and timing function shared by all variants.\n- `--lr-typing-dot-stagger-1` (default: `600ms`) — Delay for the second dot in the dots variant.\n- `--lr-typing-dot-stagger-2` (default: `1200ms`) — Delay for the third dot in the dots variant."
15532
+ "value": "`<lr-typing-indicator>` — a purely presentational \"assistant is\nresponding\" presence cue. No events, no interactivity: a consumer mounts\nit while a response is being generated and removes it (or hides it) once\nreal content has arrived.\n\nThree visual variants share one component rather than three separate tags\nbecause callers pick between them along a single axis — how the\nsurrounding surface wants the cue to read — and nothing else about the\ncomponent differs:\n- `dots` (default) — three dots with a staggered bounce, the classic\n \"typing…\" affordance for a standalone status line.\n- `pulse` — a single breathing dot, a quieter cue for a tighter space\n (e.g. next to an avatar).\n- `cursor` — a blinking vertical bar, meant to sit inline at the tail end\n of streamed text that is still being appended to.\n\nAccessibility: this indicator typically mounts and unmounts around a real\ngeneration lifecycle (appears when a response starts, disappears once one\narrives) rather than emitting a stream of updates of its own, so it does\n*not* route through `<lr-live-region>`/`Announcer`\n(`../../internal/announcer.js`) — that machinery exists to coalesce many\nrapidly-changing announcements into one, and there is only ever a single\nannouncement here: the mount itself. A plain `role=\"status\"` plus an\naccessible name derived from `label` is sufficient, set both as an\n`aria-label` on the host *and* as a visually-hidden text node in the\nshadow tree, so the name survives even if only one of the two is picked up\nby a given assistive-tech/browser pairing. An untouched-default, empty, or\nwhitespace-only `label` falls back to the localized \"Thinking…\" copy in\nboth places, rather than leaving the component with no accessible name at\nall. An `aria-label` set directly on the host element (the idiomatic way to\nname any custom element) wins over the `label`-derived default, in both\nplaces -- the host attribute is never silently clobbered on first render.\nThe animated dots/pulse/cursor\nshape is `aria-hidden=\"true\"` — it's decorative; `label` is the entire\naccessible content, so nothing narrates individual animation frames.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The decorative (`aria-hidden`) wrapper around the animated shape. |\n| `cursor` | The blinking bar in the `cursor` variant. |\n| `dot` | Each of the three dots in the `dots` variant. |\n| `pulse` | The single pulsing dot in the `pulse` variant. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-typing-duration` (default: `var(--lr-transition-ambient)`) — Animation duration and timing function for the dot-bounce/pulse/cursor-blink loop, shared by all variants. Aliases the shared `--lr-transition-ambient` token (default `1.8s ease-in-out`) by default, so retiming just this component doesn't affect other ambient-looping components in the library.\n- `--lr-typing-dot-stagger-1` (default: `600ms`) — Delay for the second dot in the dots variant.\n- `--lr-typing-dot-stagger-2` (default: `1200ms`) — Delay for the third dot in the dots variant."
15019
15533
  },
15020
15534
  "attributes": [
15021
15535
  {
@@ -15383,6 +15897,13 @@
15383
15897
  "value": "Optional locale override. Otherwise the nearest `locale`/`lang` ancestor is used.\n\nType: `string` \nDefault: `''`"
15384
15898
  }
15385
15899
  },
15900
+ {
15901
+ "name": "storage-key",
15902
+ "description": {
15903
+ "kind": "markdown",
15904
+ "value": "Persists `collapsed` to `localStorage` across reloads when set. Namespaced as\n`lr-widget:${storageKey}` -- mirrors `lr-app-rail`'s/`lr-table`'s identical `storage-key`\npattern. Unset (the default) touches storage not at all.\n\nType: `string | undefined`"
15905
+ }
15906
+ },
15386
15907
  {
15387
15908
  "name": "sublabel",
15388
15909
  "description": {
@@ -15412,7 +15933,7 @@
15412
15933
  "name": "lr-word-cloud",
15413
15934
  "description": {
15414
15935
  "kind": "markdown",
15415
- "value": "`<lr-word-cloud>` — a zero-dependency SVG word/tag cloud. First-party\ninvention (no Web Awesome equivalent). Each word's rendered size is scaled\nfrom its `weight` and placed via an outward Archimedean-spiral search (the\nstandard word-cloud heuristic: heaviest words placed first, each one\nspiraling out from the center until it clears every word already placed).\n\nUnlike sibling `lr-sparkline`/`lr-heatmap` (one `role=\"img\"` glyph\nstanding in for an aggregate value), the individual words here are the\nmeaningful interactive content — but with up to `MAX_WORDS` of them, making\nevery single one its own tab stop would be a poor keyboard experience.\nInstead, like `lr-heatmap`'s cells, the whole `[part=\"svg\"]` is one tab\nstop with roving arrow-key focus (Home/End jump to the first/last word,\nEnter/Space activates the focused one), a drawn `[part=\"focus-ring\"]`, and\na visually-hidden `aria-live=\"polite\"` status announcement. The SVG focus\ntarget carries the group role and accessible name so the semantics follow\nthe element a keyboard user actually focuses.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The word-cloud wrapper. |\n| `empty` | The empty-state message. |\n| `focus-ring` | The keyboard focus ring. |\n| `live-region` | The visually hidden announcement region. |\n| `svg` | The word-cloud SVG. |\n| `word` | A rendered word. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-word-cloud-color-1` (default: `var(--lr-color-brand)`) — First entry of the default categorical palette.\n- `--lr-word-cloud-color-2` (default: `var(--lr-color-success)`) — Second entry of the default categorical palette.\n- `--lr-word-cloud-color-3` (default: `var(--lr-color-warning)`) — Third entry of the default categorical palette.\n- `--lr-word-cloud-color-4` (default: `var(--lr-color-danger)`) — Fourth entry of the default categorical palette.\n- `--lr-word-cloud-color-5` (default: `var(--lr-color-chart-1)`) — Fifth entry of the default categorical palette.\n- `--lr-word-cloud-color-6` (default: `var(--lr-color-chart-2)`) — Sixth entry of the default categorical palette.\n- `--lr-word-cloud-color-7` (default: `var(--lr-color-chart-3)`) — Seventh entry of the default categorical palette.\n- `--lr-word-cloud-color-8` (default: `var(--lr-color-chart-4)`) — Eighth entry of the default categorical palette."
15936
+ "value": "`<lr-word-cloud>` — a zero-dependency SVG word/tag cloud. First-party\ninvention (no Web Awesome equivalent). Each word's rendered size is scaled\nfrom its `weight` and placed via an outward Archimedean-spiral search (the\nstandard word-cloud heuristic: heaviest words placed first, each one\nspiraling out from the center until it clears every word already placed).\n\nUnlike sibling `lr-sparkline`/`lr-heatmap` (one `role=\"img\"` glyph\nstanding in for an aggregate value), the individual words here are the\nmeaningful interactive content — but with up to `MAX_WORDS` of them, making\nevery single one its own tab stop would be a poor keyboard experience.\nInstead, like `lr-heatmap`'s cells, the whole `[part=\"svg\"]` is one tab\nstop with roving arrow-key focus (Home/End jump to the first/last word,\nEnter/Space activates the focused one), a drawn `[part=\"focus-ring\"]`, and\na visually-hidden `aria-live=\"polite\"` status announcement. The SVG focus\ntarget carries the group role and accessible name so the semantics follow\nthe element a keyboard user actually focuses.\n\n---\n\n**CSS Shadow Parts**\n\n| Name | Description |\n| --- | --- |\n| `base` | The word-cloud wrapper. |\n| `empty` | The empty-state message. |\n| `focus-ring` | The keyboard focus ring. |\n| `legend` | The optional color key below the cloud. |\n| `legend-item` | One named color entry. |\n| `legend-label` | The visible legend label. |\n| `legend-swatch` | The color swatch for a legend entry. |\n| `live-region` | The visually hidden announcement region. |\n| `svg` | The word-cloud SVG. |\n| `word` | A rendered word. |\n\n---\n\n**CSS Custom Properties**\n\n- `--lr-word-cloud-color-1` (default: `var(--lr-color-brand)`) — First entry of the default categorical palette.\n- `--lr-word-cloud-color-2` (default: `var(--lr-color-success)`) — Second entry of the default categorical palette.\n- `--lr-word-cloud-color-3` (default: `var(--lr-color-warning)`) — Third entry of the default categorical palette.\n- `--lr-word-cloud-color-4` (default: `var(--lr-color-danger)`) — Fourth entry of the default categorical palette.\n- `--lr-word-cloud-color-5` (default: `var(--lr-color-chart-1)`) — Fifth entry of the default categorical palette.\n- `--lr-word-cloud-color-6` (default: `var(--lr-color-chart-2)`) — Sixth entry of the default categorical palette.\n- `--lr-word-cloud-color-7` (default: `var(--lr-color-chart-3)`) — Seventh entry of the default categorical palette.\n- `--lr-word-cloud-color-8` (default: `var(--lr-color-chart-4)`) — Eighth entry of the default categorical palette."
15416
15937
  },
15417
15938
  "attributes": [
15418
15939
  {
@@ -15449,6 +15970,13 @@
15449
15970
  "kind": "markdown",
15450
15971
  "value": "`sqrt` compresses the weight->font-size mapping so one heavy word doesn't dwarf the rest.\n\nType: `WordCloudScale` \nDefault: `'linear'`"
15451
15972
  }
15973
+ },
15974
+ {
15975
+ "name": "show-legend",
15976
+ "description": {
15977
+ "kind": "markdown",
15978
+ "value": "Renders the supplied or derived legend entries below the cloud. It is non-interactive and\ndoes not alter word activation or palette selection.\n\nType: `boolean` \nDefault: `false`"
15979
+ }
15452
15980
  }
15453
15981
  ]
15454
15982
  },