@aceshooting/lyra-ui 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/README.md +30 -12
  2. package/custom-elements.json +2150 -220
  3. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +2 -0
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts.map +1 -1
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +2 -0
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js.map +1 -1
  7. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts +1 -0
  8. package/dist/components/agent-tools/agent-run/agent-run.class.d.ts.map +1 -1
  9. package/dist/components/agent-tools/agent-run/agent-run.class.js +1 -0
  10. package/dist/components/agent-tools/agent-run/agent-run.class.js.map +1 -1
  11. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -0
  12. package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts.map +1 -1
  13. package/dist/components/agent-tools/compare-panel/compare-panel.class.js +2 -0
  14. package/dist/components/agent-tools/compare-panel/compare-panel.class.js.map +1 -1
  15. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +5 -0
  16. package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts.map +1 -1
  17. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +5 -0
  18. package/dist/components/agent-tools/stack-trace/stack-trace.class.js.map +1 -1
  19. package/dist/components/agent-tools/terminal/terminal.class.d.ts +3 -0
  20. package/dist/components/agent-tools/terminal/terminal.class.d.ts.map +1 -1
  21. package/dist/components/agent-tools/terminal/terminal.class.js +3 -0
  22. package/dist/components/agent-tools/terminal/terminal.class.js.map +1 -1
  23. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  24. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  25. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +2 -0
  26. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js.map +1 -1
  27. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts +2 -0
  28. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  29. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +2 -0
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +3 -0
  32. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  33. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +3 -0
  34. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js.map +1 -1
  35. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -0
  36. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts.map +1 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -0
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js.map +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +1 -0
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  41. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +1 -0
  42. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  43. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +2 -0
  44. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts.map +1 -1
  45. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -0
  46. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js.map +1 -1
  47. package/dist/components/charts/chart/chart.class.d.ts +15 -0
  48. package/dist/components/charts/chart/chart.class.d.ts.map +1 -1
  49. package/dist/components/charts/chart/chart.class.js +15 -0
  50. package/dist/components/charts/chart/chart.class.js.map +1 -1
  51. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +2 -0
  52. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts.map +1 -1
  53. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +2 -0
  54. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js.map +1 -1
  55. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +2 -0
  56. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts.map +1 -1
  57. package/dist/components/conversation/branch-picker/branch-picker.class.js +2 -0
  58. package/dist/components/conversation/branch-picker/branch-picker.class.js.map +1 -1
  59. package/dist/components/conversation/chat-message/chat-message.class.d.ts +5 -1
  60. package/dist/components/conversation/chat-message/chat-message.class.d.ts.map +1 -1
  61. package/dist/components/conversation/chat-message/chat-message.class.js +5 -1
  62. package/dist/components/conversation/chat-message/chat-message.class.js.map +1 -1
  63. package/dist/components/conversation/chat-message/chat-message.styles.d.ts.map +1 -1
  64. package/dist/components/conversation/chat-message/chat-message.styles.js +15 -2
  65. package/dist/components/conversation/chat-message/chat-message.styles.js.map +1 -1
  66. package/dist/components/conversation/code-block/code-block.class.d.ts +4 -0
  67. package/dist/components/conversation/code-block/code-block.class.d.ts.map +1 -1
  68. package/dist/components/conversation/code-block/code-block.class.js +4 -0
  69. package/dist/components/conversation/code-block/code-block.class.js.map +1 -1
  70. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +2 -0
  71. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts.map +1 -1
  72. package/dist/components/conversation/conversation-item/conversation-item.class.js +2 -0
  73. package/dist/components/conversation/conversation-item/conversation-item.class.js.map +1 -1
  74. package/dist/components/conversation/markdown/markdown.class.d.ts +2 -0
  75. package/dist/components/conversation/markdown/markdown.class.d.ts.map +1 -1
  76. package/dist/components/conversation/markdown/markdown.class.js +2 -0
  77. package/dist/components/conversation/markdown/markdown.class.js.map +1 -1
  78. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +2 -0
  79. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts.map +1 -1
  80. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +2 -0
  81. package/dist/components/conversation/push-to-talk/push-to-talk.class.js.map +1 -1
  82. package/dist/components/conversation/stream-status/stream-status.class.d.ts +5 -0
  83. package/dist/components/conversation/stream-status/stream-status.class.d.ts.map +1 -1
  84. package/dist/components/conversation/stream-status/stream-status.class.js +5 -0
  85. package/dist/components/conversation/stream-status/stream-status.class.js.map +1 -1
  86. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +2 -0
  87. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts.map +1 -1
  88. package/dist/components/conversation/streaming-text/streaming-text.class.js +2 -0
  89. package/dist/components/conversation/streaming-text/streaming-text.class.js.map +1 -1
  90. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +1 -0
  91. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts.map +1 -1
  92. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -0
  93. package/dist/components/conversation/transcript-feed/transcript-feed.class.js.map +1 -1
  94. package/dist/components/data/calendar/calendar.class.d.ts +6 -0
  95. package/dist/components/data/calendar/calendar.class.d.ts.map +1 -1
  96. package/dist/components/data/calendar/calendar.class.js +6 -0
  97. package/dist/components/data/calendar/calendar.class.js.map +1 -1
  98. package/dist/components/data/context-meter/context-meter.class.d.ts +1 -0
  99. package/dist/components/data/context-meter/context-meter.class.d.ts.map +1 -1
  100. package/dist/components/data/context-meter/context-meter.class.js +1 -0
  101. package/dist/components/data/context-meter/context-meter.class.js.map +1 -1
  102. package/dist/components/data/data-grid/data-grid.class.d.ts +1 -0
  103. package/dist/components/data/data-grid/data-grid.class.d.ts.map +1 -1
  104. package/dist/components/data/data-grid/data-grid.class.js +1 -0
  105. package/dist/components/data/data-grid/data-grid.class.js.map +1 -1
  106. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +3 -1
  107. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts.map +1 -1
  108. package/dist/components/data/flow-canvas/flow-canvas.class.js +3 -1
  109. package/dist/components/data/flow-canvas/flow-canvas.class.js.map +1 -1
  110. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +2 -2
  111. package/dist/components/data/flow-minimap/flow-minimap.class.js +2 -2
  112. package/dist/components/data/flow-node/flow-node.class.d.ts +1 -1
  113. package/dist/components/data/flow-node/flow-node.class.js +1 -1
  114. package/dist/components/data/heatmap/heatmap.class.d.ts +51 -2
  115. package/dist/components/data/heatmap/heatmap.class.d.ts.map +1 -1
  116. package/dist/components/data/heatmap/heatmap.class.js +42 -6
  117. package/dist/components/data/heatmap/heatmap.class.js.map +1 -1
  118. package/dist/components/data/heatmap/heatmap.styles.d.ts.map +1 -1
  119. package/dist/components/data/heatmap/heatmap.styles.js +19 -0
  120. package/dist/components/data/heatmap/heatmap.styles.js.map +1 -1
  121. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +20 -0
  122. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts.map +1 -1
  123. package/dist/components/data/sequence-strip/sequence-strip.class.js +35 -0
  124. package/dist/components/data/sequence-strip/sequence-strip.class.js.map +1 -1
  125. package/dist/components/data/sequence-strip/sequence-strip.styles.d.ts.map +1 -1
  126. package/dist/components/data/sequence-strip/sequence-strip.styles.js +29 -0
  127. package/dist/components/data/sequence-strip/sequence-strip.styles.js.map +1 -1
  128. package/dist/components/data/table/table.class.d.ts +11 -0
  129. package/dist/components/data/table/table.class.d.ts.map +1 -1
  130. package/dist/components/data/table/table.class.js +11 -0
  131. package/dist/components/data/table/table.class.js.map +1 -1
  132. package/dist/components/data/timeline/timeline-item.class.d.ts +17 -0
  133. package/dist/components/data/timeline/timeline-item.class.d.ts.map +1 -1
  134. package/dist/components/data/timeline/timeline-item.class.js +17 -0
  135. package/dist/components/data/timeline/timeline-item.class.js.map +1 -1
  136. package/dist/components/data/timeline/timeline.styles.d.ts.map +1 -1
  137. package/dist/components/data/timeline/timeline.styles.js +6 -3
  138. package/dist/components/data/timeline/timeline.styles.js.map +1 -1
  139. package/dist/components/data/tree/tree-node.class.d.ts +3 -0
  140. package/dist/components/data/tree/tree-node.class.d.ts.map +1 -1
  141. package/dist/components/data/tree/tree-node.class.js +3 -0
  142. package/dist/components/data/tree/tree-node.class.js.map +1 -1
  143. package/dist/components/forms/button/button.class.d.ts +24 -0
  144. package/dist/components/forms/button/button.class.d.ts.map +1 -1
  145. package/dist/components/forms/button/button.class.js +24 -0
  146. package/dist/components/forms/button/button.class.js.map +1 -1
  147. package/dist/components/forms/code-editor/code-editor.class.d.ts +28 -12
  148. package/dist/components/forms/code-editor/code-editor.class.d.ts.map +1 -1
  149. package/dist/components/forms/code-editor/code-editor.class.js +44 -14
  150. package/dist/components/forms/code-editor/code-editor.class.js.map +1 -1
  151. package/dist/components/forms/code-editor/code-editor.styles.d.ts.map +1 -1
  152. package/dist/components/forms/code-editor/code-editor.styles.js +4 -0
  153. package/dist/components/forms/code-editor/code-editor.styles.js.map +1 -1
  154. package/dist/components/forms/combobox/combobox.class.d.ts +10 -0
  155. package/dist/components/forms/combobox/combobox.class.d.ts.map +1 -1
  156. package/dist/components/forms/combobox/combobox.class.js +16 -0
  157. package/dist/components/forms/combobox/combobox.class.js.map +1 -1
  158. package/dist/components/forms/combobox/option.class.d.ts +3 -3
  159. package/dist/components/forms/combobox/option.class.d.ts.map +1 -1
  160. package/dist/components/forms/combobox/option.class.js +9 -0
  161. package/dist/components/forms/combobox/option.class.js.map +1 -1
  162. package/dist/components/forms/date-picker/date-input.class.d.ts +3 -0
  163. package/dist/components/forms/date-picker/date-input.class.d.ts.map +1 -1
  164. package/dist/components/forms/date-picker/date-input.class.js +3 -0
  165. package/dist/components/forms/date-picker/date-input.class.js.map +1 -1
  166. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +37 -2
  167. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts.map +1 -1
  168. package/dist/components/forms/emoji-picker/emoji-picker.class.js +113 -10
  169. package/dist/components/forms/emoji-picker/emoji-picker.class.js.map +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 +30 -0
  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 +4 -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 +4 -0
  176. package/dist/components/forms/icon-button/icon-button.class.js.map +1 -1
  177. package/dist/components/forms/input/input.class.d.ts +11 -3
  178. package/dist/components/forms/input/input.class.d.ts.map +1 -1
  179. package/dist/components/forms/input/input.class.js +3 -0
  180. package/dist/components/forms/input/input.class.js.map +1 -1
  181. package/dist/components/forms/input/time-input.class.d.ts +12 -0
  182. package/dist/components/forms/input/time-input.class.d.ts.map +1 -1
  183. package/dist/components/forms/input/time-input.class.js +27 -0
  184. package/dist/components/forms/input/time-input.class.js.map +1 -1
  185. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -0
  186. package/dist/components/forms/rubric-form/rubric-form.class.d.ts.map +1 -1
  187. package/dist/components/forms/rubric-form/rubric-form.class.js +7 -0
  188. package/dist/components/forms/rubric-form/rubric-form.class.js.map +1 -1
  189. package/dist/components/forms/select/select.class.d.ts +8 -0
  190. package/dist/components/forms/select/select.class.d.ts.map +1 -1
  191. package/dist/components/forms/select/select.class.js +8 -0
  192. package/dist/components/forms/select/select.class.js.map +1 -1
  193. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +1 -1
  194. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  195. package/dist/components/forms/switch/switch.class.d.ts +6 -0
  196. package/dist/components/forms/switch/switch.class.d.ts.map +1 -1
  197. package/dist/components/forms/switch/switch.class.js +6 -0
  198. package/dist/components/forms/switch/switch.class.js.map +1 -1
  199. package/dist/components/forms/token-input/token-input.class.d.ts +2 -0
  200. package/dist/components/forms/token-input/token-input.class.d.ts.map +1 -1
  201. package/dist/components/forms/token-input/token-input.class.js +2 -0
  202. package/dist/components/forms/token-input/token-input.class.js.map +1 -1
  203. package/dist/components/layout/app-rail/app-rail.class.d.ts +8 -0
  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 +8 -0
  206. package/dist/components/layout/app-rail/app-rail.class.js.map +1 -1
  207. package/dist/components/layout/button-group/button-group.class.d.ts +1 -1
  208. package/dist/components/layout/button-group/button-group.class.js +1 -1
  209. package/dist/components/layout/command-palette/command-palette.class.d.ts +12 -0
  210. package/dist/components/layout/command-palette/command-palette.class.d.ts.map +1 -1
  211. package/dist/components/layout/command-palette/command-palette.class.js +12 -0
  212. package/dist/components/layout/command-palette/command-palette.class.js.map +1 -1
  213. package/dist/components/layout/control-group/control-group.class.d.ts +1 -1
  214. package/dist/components/layout/control-group/control-group.class.js +1 -1
  215. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +7 -0
  216. package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts.map +1 -1
  217. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +7 -0
  218. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js.map +1 -1
  219. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +3 -0
  220. package/dist/components/layout/dock-panel/dock-panel.class.d.ts.map +1 -1
  221. package/dist/components/layout/dock-panel/dock-panel.class.js +3 -0
  222. package/dist/components/layout/dock-panel/dock-panel.class.js.map +1 -1
  223. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts +2 -0
  224. package/dist/components/layout/responsive-panel/responsive-panel.class.d.ts.map +1 -1
  225. package/dist/components/layout/responsive-panel/responsive-panel.class.js +2 -0
  226. package/dist/components/layout/responsive-panel/responsive-panel.class.js.map +1 -1
  227. package/dist/components/layout/scroller/scroller.class.d.ts +2 -2
  228. package/dist/components/layout/scroller/scroller.class.js +2 -2
  229. package/dist/components/layout/segmented/segmented.class.d.ts +6 -0
  230. package/dist/components/layout/segmented/segmented.class.d.ts.map +1 -1
  231. package/dist/components/layout/segmented/segmented.class.js +6 -0
  232. package/dist/components/layout/segmented/segmented.class.js.map +1 -1
  233. package/dist/components/layout/split/split.class.d.ts +68 -15
  234. package/dist/components/layout/split/split.class.d.ts.map +1 -1
  235. package/dist/components/layout/split/split.class.js +80 -21
  236. package/dist/components/layout/split/split.class.js.map +1 -1
  237. package/dist/components/layout/stepper/stepper.class.d.ts +52 -11
  238. package/dist/components/layout/stepper/stepper.class.d.ts.map +1 -1
  239. package/dist/components/layout/stepper/stepper.class.js +69 -17
  240. package/dist/components/layout/stepper/stepper.class.js.map +1 -1
  241. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +3 -0
  242. package/dist/components/layout/virtual-list/virtual-list.class.d.ts.map +1 -1
  243. package/dist/components/layout/virtual-list/virtual-list.class.js +3 -0
  244. package/dist/components/layout/virtual-list/virtual-list.class.js.map +1 -1
  245. package/dist/components/layout/widget/widget.class.d.ts +6 -0
  246. package/dist/components/layout/widget/widget.class.d.ts.map +1 -1
  247. package/dist/components/layout/widget/widget.class.js +6 -0
  248. package/dist/components/layout/widget/widget.class.js.map +1 -1
  249. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +13 -0
  250. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  251. package/dist/components/media/attachment-chip/attachment-chip.class.js +13 -0
  252. package/dist/components/media/attachment-chip/attachment-chip.class.js.map +1 -1
  253. package/dist/components/media/avatar/avatar.class.d.ts +6 -0
  254. package/dist/components/media/avatar/avatar.class.d.ts.map +1 -1
  255. package/dist/components/media/avatar/avatar.class.js +6 -0
  256. package/dist/components/media/avatar/avatar.class.js.map +1 -1
  257. package/dist/components/media/media-card/media-card.class.d.ts +2 -0
  258. package/dist/components/media/media-card/media-card.class.d.ts.map +1 -1
  259. package/dist/components/media/media-card/media-card.class.js +2 -0
  260. package/dist/components/media/media-card/media-card.class.js.map +1 -1
  261. package/dist/components/media/playback/playback.class.d.ts +2 -0
  262. package/dist/components/media/playback/playback.class.d.ts.map +1 -1
  263. package/dist/components/media/playback/playback.class.js +2 -0
  264. package/dist/components/media/playback/playback.class.js.map +1 -1
  265. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -0
  266. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts.map +1 -1
  267. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +3 -0
  268. package/dist/components/media/zoomable-frame/zoomable-frame.class.js.map +1 -1
  269. package/dist/components/overlays/badge/badge.class.d.ts +6 -0
  270. package/dist/components/overlays/badge/badge.class.d.ts.map +1 -1
  271. package/dist/components/overlays/badge/badge.class.js +6 -0
  272. package/dist/components/overlays/badge/badge.class.js.map +1 -1
  273. package/dist/components/overlays/callout/callout.class.d.ts +6 -0
  274. package/dist/components/overlays/callout/callout.class.d.ts.map +1 -1
  275. package/dist/components/overlays/callout/callout.class.js +6 -0
  276. package/dist/components/overlays/callout/callout.class.js.map +1 -1
  277. package/dist/components/overlays/chip/chip.class.d.ts +18 -0
  278. package/dist/components/overlays/chip/chip.class.d.ts.map +1 -1
  279. package/dist/components/overlays/chip/chip.class.js +18 -0
  280. package/dist/components/overlays/chip/chip.class.js.map +1 -1
  281. package/dist/components/overlays/dialog/dialog.class.d.ts +6 -0
  282. package/dist/components/overlays/dialog/dialog.class.d.ts.map +1 -1
  283. package/dist/components/overlays/dialog/dialog.class.js +6 -0
  284. package/dist/components/overlays/dialog/dialog.class.js.map +1 -1
  285. package/dist/components/overlays/drawer/drawer.class.d.ts +6 -0
  286. package/dist/components/overlays/drawer/drawer.class.d.ts.map +1 -1
  287. package/dist/components/overlays/drawer/drawer.class.js +6 -0
  288. package/dist/components/overlays/drawer/drawer.class.js.map +1 -1
  289. package/dist/components/overlays/progress/progress-ring.class.d.ts +1 -0
  290. package/dist/components/overlays/progress/progress-ring.class.d.ts.map +1 -1
  291. package/dist/components/overlays/progress/progress-ring.class.js +1 -0
  292. package/dist/components/overlays/progress/progress-ring.class.js.map +1 -1
  293. package/dist/components/overlays/skeleton/skeleton.class.d.ts +2 -0
  294. package/dist/components/overlays/skeleton/skeleton.class.d.ts.map +1 -1
  295. package/dist/components/overlays/skeleton/skeleton.class.js +2 -0
  296. package/dist/components/overlays/skeleton/skeleton.class.js.map +1 -1
  297. package/dist/components/overlays/spinner/spinner.class.d.ts +4 -0
  298. package/dist/components/overlays/spinner/spinner.class.d.ts.map +1 -1
  299. package/dist/components/overlays/spinner/spinner.class.js +4 -0
  300. package/dist/components/overlays/spinner/spinner.class.js.map +1 -1
  301. package/dist/components/overlays/toast/toast-item.class.d.ts +11 -0
  302. package/dist/components/overlays/toast/toast-item.class.d.ts.map +1 -1
  303. package/dist/components/overlays/toast/toast-item.class.js +11 -0
  304. package/dist/components/overlays/toast/toast-item.class.js.map +1 -1
  305. package/dist/components/overlays/toast/toast.class.d.ts +15 -0
  306. package/dist/components/overlays/toast/toast.class.d.ts.map +1 -1
  307. package/dist/components/overlays/toast/toast.class.js +15 -0
  308. package/dist/components/overlays/toast/toast.class.js.map +1 -1
  309. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +8 -0
  310. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts.map +1 -1
  311. package/dist/components/retrieval/citation-badge/citation-badge.class.js +8 -0
  312. package/dist/components/retrieval/citation-badge/citation-badge.class.js.map +1 -1
  313. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +1 -0
  314. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts.map +1 -1
  315. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -0
  316. package/dist/components/retrieval/entity-chip/entity-chip.class.js.map +1 -1
  317. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
  318. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts.map +1 -1
  319. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +2 -0
  320. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js.map +1 -1
  321. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts +1 -0
  322. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.d.ts.map +1 -1
  323. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -0
  324. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js.map +1 -1
  325. package/dist/components/utility/diff-view/diff-view.class.d.ts +1 -0
  326. package/dist/components/utility/diff-view/diff-view.class.d.ts.map +1 -1
  327. package/dist/components/utility/diff-view/diff-view.class.js +1 -0
  328. package/dist/components/utility/diff-view/diff-view.class.js.map +1 -1
  329. package/dist/components/utility/icon/icon.class.d.ts +1 -0
  330. package/dist/components/utility/icon/icon.class.d.ts.map +1 -1
  331. package/dist/components/utility/icon/icon.class.js +1 -0
  332. package/dist/components/utility/icon/icon.class.js.map +1 -1
  333. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -0
  334. package/dist/components/utility/json-viewer/json-viewer.class.d.ts.map +1 -1
  335. package/dist/components/utility/json-viewer/json-viewer.class.js +3 -0
  336. package/dist/components/utility/json-viewer/json-viewer.class.js.map +1 -1
  337. package/dist/components/utility/known-date/known-date.class.d.ts +11 -0
  338. package/dist/components/utility/known-date/known-date.class.d.ts.map +1 -1
  339. package/dist/components/utility/known-date/known-date.class.js +11 -0
  340. package/dist/components/utility/known-date/known-date.class.js.map +1 -1
  341. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +2 -0
  342. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts.map +1 -1
  343. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +2 -0
  344. package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js.map +1 -1
  345. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +5 -0
  346. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts.map +1 -1
  347. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +5 -0
  348. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js.map +1 -1
  349. package/dist/components/viewers/document-compare/document-compare.class.d.ts +1 -1
  350. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  351. package/dist/components/viewers/document-preview/document-preview.class.d.ts +3 -0
  352. package/dist/components/viewers/document-preview/document-preview.class.d.ts.map +1 -1
  353. package/dist/components/viewers/document-preview/document-preview.class.js +3 -0
  354. package/dist/components/viewers/document-preview/document-preview.class.js.map +1 -1
  355. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -0
  356. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts.map +1 -1
  357. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -0
  358. package/dist/components/viewers/email-viewer/email-viewer.class.js.map +1 -1
  359. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts +2 -0
  360. package/dist/components/viewers/html-viewer/html-viewer.class.d.ts.map +1 -1
  361. package/dist/components/viewers/html-viewer/html-viewer.class.js +2 -0
  362. package/dist/components/viewers/html-viewer/html-viewer.class.js.map +1 -1
  363. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts.map +1 -1
  364. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +41 -9
  365. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js.map +1 -1
  366. package/dist/internal/css-length.d.ts +40 -0
  367. package/dist/internal/css-length.d.ts.map +1 -0
  368. package/dist/internal/css-length.js +72 -0
  369. package/dist/internal/css-length.js.map +1 -0
  370. package/dist/internal/orientation-breakpoint.d.ts +12 -0
  371. package/dist/internal/orientation-breakpoint.d.ts.map +1 -0
  372. package/dist/internal/orientation-breakpoint.js +127 -0
  373. package/dist/internal/orientation-breakpoint.js.map +1 -0
  374. package/dist/lyra.d.ts +2 -2
  375. package/dist/lyra.d.ts.map +1 -1
  376. package/dist/lyra.js.map +1 -1
  377. package/llms/components/lr-accordion-item.md +23 -0
  378. package/llms/components/lr-accordion.md +23 -0
  379. package/llms/components/lr-activity-feed.md +45 -0
  380. package/llms/components/lr-agent-run.md +66 -0
  381. package/llms/components/lr-agent-trace.md +42 -0
  382. package/llms/components/lr-agent-workspace.md +109 -0
  383. package/llms/components/lr-animated-image.md +66 -0
  384. package/llms/components/lr-animation.md +73 -0
  385. package/llms/components/lr-app-rail-item.md +218 -0
  386. package/llms/components/lr-app-rail.md +218 -0
  387. package/llms/components/lr-archive-viewer.md +36 -0
  388. package/llms/components/lr-artifact-panel.md +60 -0
  389. package/llms/components/lr-attachment-chip.md +131 -0
  390. package/llms/components/lr-attachment-trigger.md +90 -0
  391. package/llms/components/lr-audio-visualizer.md +43 -0
  392. package/llms/components/lr-av-player.md +50 -0
  393. package/llms/components/lr-avatar-group.md +69 -0
  394. package/llms/components/lr-avatar.md +69 -0
  395. package/llms/components/lr-badge.md +25 -0
  396. package/llms/components/lr-bar-chart.md +70 -0
  397. package/llms/components/lr-box-plot.md +67 -0
  398. package/llms/components/lr-branch-picker.md +32 -0
  399. package/llms/components/lr-breadcrumb-item.md +30 -0
  400. package/llms/components/lr-breadcrumb.md +30 -0
  401. package/llms/components/lr-browser-frame.md +51 -0
  402. package/llms/components/lr-bubble-chart.md +70 -0
  403. package/llms/components/lr-button-group.md +30 -0
  404. package/llms/components/lr-button.md +89 -0
  405. package/llms/components/lr-calendar-viewer.md +32 -0
  406. package/llms/components/lr-calendar.md +52 -0
  407. package/llms/components/lr-callout.md +37 -0
  408. package/llms/components/lr-card.md +67 -0
  409. package/llms/components/lr-carousel-item.md +29 -0
  410. package/llms/components/lr-carousel.md +43 -0
  411. package/llms/components/lr-chart.md +148 -0
  412. package/llms/components/lr-chat-composer.md +139 -0
  413. package/llms/components/lr-chat-message.md +145 -0
  414. package/llms/components/lr-chat-viewport.md +70 -0
  415. package/llms/components/lr-checkbox-group.md +21 -0
  416. package/llms/components/lr-checkbox.md +79 -0
  417. package/llms/components/lr-checkpoint.md +48 -0
  418. package/llms/components/lr-chip-group.md +152 -0
  419. package/llms/components/lr-chip.md +152 -0
  420. package/llms/components/lr-chunk-inspector.md +66 -0
  421. package/llms/components/lr-citation-badge.md +102 -0
  422. package/llms/components/lr-code-block-core.md +113 -0
  423. package/llms/components/lr-code-block.md +146 -0
  424. package/llms/components/lr-code-editor.md +72 -0
  425. package/llms/components/lr-color-picker.md +21 -0
  426. package/llms/components/lr-combobox.md +196 -0
  427. package/llms/components/lr-command-palette.md +50 -0
  428. package/llms/components/lr-commit-card.md +33 -0
  429. package/llms/components/lr-community-card.md +54 -0
  430. package/llms/components/lr-compare-panel.md +38 -0
  431. package/llms/components/lr-confirm-bar.md +48 -0
  432. package/llms/components/lr-contact-viewer.md +34 -0
  433. package/llms/components/lr-context-inspector.md +50 -0
  434. package/llms/components/lr-context-meter.md +92 -0
  435. package/llms/components/lr-control-group.md +46 -0
  436. package/llms/components/lr-conversation-item.md +118 -0
  437. package/llms/components/lr-copy-button.md +52 -0
  438. package/llms/components/lr-csv-viewer.md +49 -0
  439. package/llms/components/lr-dashboard-grid.md +34 -0
  440. package/llms/components/lr-data-grid.md +47 -0
  441. package/llms/components/lr-dataset-viewer.md +60 -0
  442. package/llms/components/lr-date-input.md +201 -0
  443. package/llms/components/lr-date-picker.md +201 -0
  444. package/llms/components/lr-details.md +23 -0
  445. package/llms/components/lr-dialog.md +185 -0
  446. package/llms/components/lr-diff-view.md +86 -0
  447. package/llms/components/lr-divider.md +28 -0
  448. package/llms/components/lr-dock-panel.md +110 -0
  449. package/llms/components/lr-document-compare.md +22 -0
  450. package/llms/components/lr-document-library.md +21 -0
  451. package/llms/components/lr-document-preview.md +179 -0
  452. package/llms/components/lr-document-viewer.md +84 -0
  453. package/llms/components/lr-docx-viewer.md +63 -0
  454. package/llms/components/lr-doughnut-chart.md +70 -0
  455. package/llms/components/lr-drawer.md +48 -0
  456. package/llms/components/lr-drilldown-panel.md +25 -0
  457. package/llms/components/lr-dropdown-item.md +171 -0
  458. package/llms/components/lr-dropdown.md +24 -0
  459. package/llms/components/lr-ebook-viewer.md +60 -0
  460. package/llms/components/lr-email-viewer.md +51 -0
  461. package/llms/components/lr-emoji-picker.md +71 -0
  462. package/llms/components/lr-empty.md +56 -0
  463. package/llms/components/lr-entity-card.md +64 -0
  464. package/llms/components/lr-entity-chip.md +50 -0
  465. package/llms/components/lr-entity-dossier.md +71 -0
  466. package/llms/components/lr-env-list.md +27 -0
  467. package/llms/components/lr-eval-dataset.md +45 -0
  468. package/llms/components/lr-eval-result.md +45 -0
  469. package/llms/components/lr-evaluation-run.md +50 -0
  470. package/llms/components/lr-export-button.md +104 -0
  471. package/llms/components/lr-file-icon.md +34 -0
  472. package/llms/components/lr-file-input.md +104 -0
  473. package/llms/components/lr-file-tree.md +29 -0
  474. package/llms/components/lr-filter-bar.md +20 -0
  475. package/llms/components/lr-flag.md +122 -0
  476. package/llms/components/lr-flow-canvas.md +112 -0
  477. package/llms/components/lr-flow-controls.md +47 -0
  478. package/llms/components/lr-flow-minimap.md +52 -0
  479. package/llms/components/lr-flow-node.md +56 -0
  480. package/llms/components/lr-flow-run-overlay.md +56 -0
  481. package/llms/components/lr-format-bytes.md +31 -0
  482. package/llms/components/lr-format-date.md +33 -0
  483. package/llms/components/lr-format-number.md +41 -0
  484. package/llms/components/lr-gauge.md +65 -0
  485. package/llms/components/lr-generation-status.md +105 -0
  486. package/llms/components/lr-geojson-view.md +43 -0
  487. package/llms/components/lr-graph-legend.md +64 -0
  488. package/llms/components/lr-graph-query-builder.md +27 -0
  489. package/llms/components/lr-graph.md +224 -0
  490. package/llms/components/lr-grounding-summary.md +57 -0
  491. package/llms/components/lr-handoff-divider.md +27 -0
  492. package/llms/components/lr-heatmap.md +232 -0
  493. package/llms/components/lr-highlight-layer.md +31 -0
  494. package/llms/components/lr-histogram.md +69 -0
  495. package/llms/components/lr-html-viewer.md +30 -0
  496. package/llms/components/lr-icon-button.md +39 -0
  497. package/llms/components/lr-icon.md +36 -0
  498. package/llms/components/lr-image-comparer.md +38 -0
  499. package/llms/components/lr-image-viewer.md +35 -0
  500. package/llms/components/lr-include.md +53 -0
  501. package/llms/components/lr-ingestion-queue.md +60 -0
  502. package/llms/components/lr-input.md +82 -0
  503. package/llms/components/lr-intersection-observer.md +25 -0
  504. package/llms/components/lr-json-viewer.md +98 -0
  505. package/llms/components/lr-kbd.md +74 -0
  506. package/llms/components/lr-knowledge-base.md +64 -0
  507. package/llms/components/lr-knowledge-graph-explorer.md +92 -0
  508. package/llms/components/lr-known-date.md +84 -0
  509. package/llms/components/lr-lightbox.md +79 -0
  510. package/llms/components/lr-line-chart.md +70 -0
  511. package/llms/components/lr-lite-chart.md +143 -0
  512. package/llms/components/lr-live-region.md +105 -0
  513. package/llms/components/lr-map.md +127 -0
  514. package/llms/components/lr-markdown-core.md +70 -0
  515. package/llms/components/lr-markdown.md +171 -0
  516. package/llms/components/lr-media-card.md +106 -0
  517. package/llms/components/lr-memory-panel.md +67 -0
  518. package/llms/components/lr-mention-popover.md +139 -0
  519. package/llms/components/lr-menu-item.md +171 -0
  520. package/llms/components/lr-menu.md +171 -0
  521. package/llms/components/lr-message-actions.md +48 -0
  522. package/llms/components/lr-message-feedback.md +37 -0
  523. package/llms/components/lr-mind-map.md +64 -0
  524. package/llms/components/lr-model-select.md +144 -0
  525. package/llms/components/lr-model-settings-panel.md +99 -0
  526. package/llms/components/lr-mutation-observer.md +27 -0
  527. package/llms/components/lr-neighbor-list.md +56 -0
  528. package/llms/components/lr-node-palette.md +67 -0
  529. package/llms/components/lr-notebook-viewer.md +65 -0
  530. package/llms/components/lr-number-input.md +44 -0
  531. package/llms/components/lr-option.md +196 -0
  532. package/llms/components/lr-page-rail.md +37 -0
  533. package/llms/components/lr-pagination.md +88 -0
  534. package/llms/components/lr-path-strip.md +55 -0
  535. package/llms/components/lr-pdf-viewer.md +78 -0
  536. package/llms/components/lr-phone-input.md +162 -0
  537. package/llms/components/lr-pie-chart.md +70 -0
  538. package/llms/components/lr-playback.md +74 -0
  539. package/llms/components/lr-polar-area-chart.md +70 -0
  540. package/llms/components/lr-policy-summary.md +33 -0
  541. package/llms/components/lr-poll-status.md +71 -0
  542. package/llms/components/lr-popover.md +31 -0
  543. package/llms/components/lr-pptx-viewer.md +35 -0
  544. package/llms/components/lr-progress-bar.md +22 -0
  545. package/llms/components/lr-progress-ring.md +26 -0
  546. package/llms/components/lr-provenance-panel.md +58 -0
  547. package/llms/components/lr-push-to-talk.md +50 -0
  548. package/llms/components/lr-qr-code.md +20 -0
  549. package/llms/components/lr-query-builder.md +21 -0
  550. package/llms/components/lr-radar-chart.md +70 -0
  551. package/llms/components/lr-radio-group.md +25 -0
  552. package/llms/components/lr-radio.md +31 -0
  553. package/llms/components/lr-random-content.md +62 -0
  554. package/llms/components/lr-rating.md +21 -0
  555. package/llms/components/lr-relative-time.md +31 -0
  556. package/llms/components/lr-resize-observer.md +25 -0
  557. package/llms/components/lr-responsive-panel.md +112 -0
  558. package/llms/components/lr-result-card.md +88 -0
  559. package/llms/components/lr-result-field.md +88 -0
  560. package/llms/components/lr-retrieval-results.md +84 -0
  561. package/llms/components/lr-retrieval-search.md +70 -0
  562. package/llms/components/lr-retrieval-trace.md +59 -0
  563. package/llms/components/lr-rubric-form.md +37 -0
  564. package/llms/components/lr-scatter-chart.md +70 -0
  565. package/llms/components/lr-scroller.md +47 -0
  566. package/llms/components/lr-segmented.md +74 -0
  567. package/llms/components/lr-select.md +113 -0
  568. package/llms/components/lr-sequence-strip.md +95 -0
  569. package/llms/components/lr-skeleton.md +53 -0
  570. package/llms/components/lr-slider.md +92 -0
  571. package/llms/components/lr-source-card.md +131 -0
  572. package/llms/components/lr-source-list.md +131 -0
  573. package/llms/components/lr-source-picker.md +63 -0
  574. package/llms/components/lr-span-waterfall.md +42 -0
  575. package/llms/components/lr-sparkline.md +60 -0
  576. package/llms/components/lr-spinner.md +32 -0
  577. package/llms/components/lr-split.md +191 -0
  578. package/llms/components/lr-spreadsheet-viewer.md +47 -0
  579. package/llms/components/lr-stack-trace.md +77 -0
  580. package/llms/components/lr-stat.md +89 -0
  581. package/llms/components/lr-stepper.md +118 -0
  582. package/llms/components/lr-stream-status.md +128 -0
  583. package/llms/components/lr-streaming-text.md +101 -0
  584. package/llms/components/lr-suggestion-chips.md +40 -0
  585. package/llms/components/lr-svg-viewer.md +47 -0
  586. package/llms/components/lr-swatch-picker.md +91 -0
  587. package/llms/components/lr-switch.md +82 -0
  588. package/llms/components/lr-table.md +201 -0
  589. package/llms/components/lr-tabs.md +80 -0
  590. package/llms/components/lr-tag.md +25 -0
  591. package/llms/components/lr-task-list.md +42 -0
  592. package/llms/components/lr-terminal.md +44 -0
  593. package/llms/components/lr-test-results.md +38 -0
  594. package/llms/components/lr-textarea.md +111 -0
  595. package/llms/components/lr-thinking-panel.md +93 -0
  596. package/llms/components/lr-thread-list.md +97 -0
  597. package/llms/components/lr-time-input.md +53 -0
  598. package/llms/components/lr-time-range.md +91 -0
  599. package/llms/components/lr-timeline-item.md +65 -0
  600. package/llms/components/lr-timeline.md +65 -0
  601. package/llms/components/lr-toast-item.md +123 -0
  602. package/llms/components/lr-toast.md +123 -0
  603. package/llms/components/lr-token-input.md +31 -0
  604. package/llms/components/lr-tool-approval-dialog.md +131 -0
  605. package/llms/components/lr-tool-call-chip.md +101 -0
  606. package/llms/components/lr-tool-param-form.md +148 -0
  607. package/llms/components/lr-tool-result-dialog.md +106 -0
  608. package/llms/components/lr-tool-result-view.md +162 -0
  609. package/llms/components/lr-tool-select-dialog.md +124 -0
  610. package/llms/components/lr-tool-timeline.md +56 -0
  611. package/llms/components/lr-tooltip.md +47 -0
  612. package/llms/components/lr-tour.md +100 -0
  613. package/llms/components/lr-trace-tree.md +35 -0
  614. package/llms/components/lr-transcript-feed.md +45 -0
  615. package/llms/components/lr-tree-node.md +133 -0
  616. package/llms/components/lr-tree.md +133 -0
  617. package/llms/components/lr-typing-indicator.md +80 -0
  618. package/llms/components/lr-usage-badge.md +44 -0
  619. package/llms/components/lr-virtual-list.md +145 -0
  620. package/llms/components/lr-voice-picker.md +78 -0
  621. package/llms/components/lr-widget-renderer.md +78 -0
  622. package/llms/components/lr-widget.md +104 -0
  623. package/llms/components/lr-word-cloud.md +112 -0
  624. package/llms/components/lr-xml-viewer.md +58 -0
  625. package/llms/components/lr-zoomable-frame.md +57 -0
  626. package/llms/index.md +301 -0
  627. package/llms/migration.md +86 -0
  628. package/llms/peers.md +41 -0
  629. package/llms/shared.md +321 -0
  630. package/llms/tokens.md +533 -0
  631. package/llms-full.txt +10731 -8563
  632. package/llms.txt +64 -121
  633. package/package.json +14 -2
  634. package/vscode-css-data.json +1424 -185
  635. package/vscode-html-data.json +128 -107
  636. package/web-types.json +853 -118
@@ -0,0 +1,145 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/layout.md — do not edit this file. -->
2
+
3
+ # `lr-virtual-list`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/layout/virtual-list/virtual-list.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraVirtualList`, also available unregistered from `@aceshooting/lyra-ui/components/layout/virtual-list/virtual-list.class.js`
7
+ - **Family** `components/layout/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-virtual-list`
14
+
15
+ A generic windowed/virtualized list host. Renders only the items within the current viewport (plus
16
+ `overscan` padding rows on each side) as real DOM, regardless of how large `items` is, so a
17
+ multi-thousand-row chat-history sidebar (or a long message thread) stays cheap to scroll. Content is
18
+ entirely caller-supplied: `renderItem(item, index)` returns whatever `lit-html` value should represent
19
+ that row, and `keyFunction(item, index)` gives it a stable identity for DOM reconciliation. First-party
20
+ invention (no Web Awesome equivalent).
21
+
22
+ **Properties:**
23
+ - `items: unknown[] = []` (attribute: false) — the full, non-windowed item collection. JS-only; set via
24
+ a property/lit-html binding (`.items=`), not an HTML attribute.
25
+ - `renderItem: (item: unknown, index: number) => unknown = () => nothing` (attribute: false) — renders
26
+ one row's content, typically returning a `lit-html` `TemplateResult`. JS-only.
27
+ - `keyFunction?: (item: unknown, index: number) => string | number` (attribute: false) — derives a
28
+ row's stable reconciliation key. JS-only. Falls back to the item's index in `items` when omitted,
29
+ which is only a safe identity while `items` never reorders/inserts/removes — provide this whenever
30
+ possible, or scroll position and per-row DOM state (e.g. an `<audio>` element's playback position)
31
+ can attach to the wrong row across a mutation.
32
+ - `groups?: VirtualListGroup[]` (attribute: false) — renders a labeled `role="heading"` marker at each
33
+ group's `startIndex`, positioned independently of the row window (so it stays in place as its rows
34
+ scroll past). Groups are sorted by `startIndex`; a `startIndex` that's non-integer, out of range, or
35
+ a duplicate of an earlier group's is silently dropped rather than rendered wrong.
36
+ - `rowHeight: string = 'auto'` (attribute `row-height`) — `'auto'` measures each row's real height via
37
+ `ResizeObserver`; a numeric string (e.g. `"56"`) fixes every row to that many pixels. Anything else
38
+ (non-numeric, zero, negative, non-finite) silently falls back to `'auto'` rather than throwing.
39
+ - `itemRole: 'listitem' | 'row' = 'listitem'` (attribute `item-role`) — `'listitem'` (default)
40
+ preserves the plain `role="list"`/`role="listitem"` mapping with `aria-setsize`/`aria-posinset`.
41
+ `'row'` additionally maps `[part="base"]` to `role="rowgroup"`, `[part="spacer"]` to
42
+ `role="presentation"`, and each row to `role="row"` with `aria-rowindex` instead — for a consumer
43
+ composing its own `role="table"` wrapper and header row around this component (see
44
+ `lr-dataset-viewer`).
45
+ - `rowIndexOffset: number = 0` (attribute `row-index-offset`) — added to a row's 1-based index to
46
+ compute `aria-rowindex` in `item-role="row"` mode (e.g. `1` when a consumer renders its own header
47
+ row occupying `aria-rowindex="1"` outside this component). No effect in `'listitem'` mode.
48
+ - `overscan: number = 6` — extra rows rendered beyond the visible viewport on each side; finite
49
+ values are floored and clamped to 0–100, while non-finite values use the default 6, so an invalid
50
+ runtime value cannot disable windowing and render the entire collection.
51
+ - `activeId: string = ''` (attribute `active-id`) — when set and it matches a row's `keyFunction`
52
+ result (compared with `Object.is` against the typed value — attribute values arrive as strings, so
53
+ assign the property directly for a numeric key), that row is smoothly scrolled into view whenever
54
+ this changes, and rendered with `aria-current="true"`.
55
+ - `loading: boolean = false` (reflected) — sets `aria-busy` on the scroll container and a `cursor:
56
+ progress` style; does not by itself gate `lr-load-more` (see below).
57
+ - `hasMore: boolean = false` (attribute `has-more`, reflected) — when true, scrolling near the bottom
58
+ fires `lr-load-more` (gated by `loading`).
59
+
60
+ **Exported types:** `VirtualListRange { start: number; end: number }` (the `lr-visible-range-changed`
61
+ detail shape); `VirtualListGroup { key: string | number; label?: string; startIndex: number }` — the
62
+ shape consumed by `groups` above.
63
+ The package root also exports `groupByRecency(items, options?)`, a DOM-free helper that returns
64
+ non-empty Today/Yesterday/Previous 7 Days/Older buckets, preserves input order within each bucket,
65
+ and accepts a timestamp extractor, reference date, and label overrides.
66
+
67
+ **Methods:** `scrollToIndex(index, options?)` — the programmatic counterpart to `active-id`'s
68
+ automatic scroll-into-view, for a host that needs to scroll to a specific row without changing which
69
+ row is "active." `options.align` is `'start'`, `'end'`, or `'auto'` (default — no scroll at all when
70
+ already fully visible); `options.behavior` (default `'smooth'`) is forced to `'auto'` under
71
+ `prefers-reduced-motion: reduce`. `index` is clamped to `0…items.length-1`.
72
+
73
+ **Events:** `lr-load-more` (no detail — fired once per approach to the bottom of the list while
74
+ `has-more` is true and `loading` is false; does not refire on every scroll tick while still near the
75
+ bottom — scrolling back away from the bottom and returning, or `items` growing enough to move the
76
+ window away from the end, re-arms it), `lr-visible-range-changed` (`detail: VirtualListRange`, the
77
+ current visible, non-overscanned item index range — fired only when it actually changes)
78
+
79
+ **Slots:** none — all content comes from `renderItem`.
80
+
81
+ **CSS parts:** `base` (the scrollable container, `role="list"` — or `role="rowgroup"` in
82
+ `item-role="row"` mode — `tabindex="0"`), `spacer` (the full-content-height inner element
83
+ establishing true scroll extent; `role="presentation"` in `item-role="row"` mode), `row` (one
84
+ rendered row's absolutely-positioned wrapper, `role="listitem"` — or `role="row"` with
85
+ `aria-rowindex` in `item-role="row"` mode), `group` (a `groups` entry's positioned `role="heading"`
86
+ marker)
87
+
88
+ **Themeable custom properties:** `--lr-virtual-list-height` (default `24rem` — the host's bounded
89
+ scroll extent; component-specific since a virtualized list is meaningless without a sized viewport),
90
+ plus shared `--lr-focus-ring-width/-color/-offset` (inward-offset ring on `[part="base"]`, negative
91
+ so it isn't clipped by the container's own `overflow: auto`).
92
+
93
+ **Optional peer deps:** none.
94
+
95
+ ```html
96
+ <lr-virtual-list
97
+ .items=${sessions}
98
+ .renderItem=${(item, index) => html`
99
+ <lr-conversation-item
100
+ id=${item.id}
101
+ title=${item.title}
102
+ .timestamp=${item.updatedAt}
103
+ ?active=${item.id === currentId}
104
+ ></lr-conversation-item>
105
+ `}
106
+ .keyFunction=${(item) => item.id}
107
+ active-id=${currentId}
108
+ ?has-more=${hasMorePages}
109
+ ?loading=${isLoadingMore}
110
+ @lr-load-more=${() => loadNextPage()}
111
+ @lr-visible-range-changed=${(e) => console.log('visible', e.detail.start, e.detail.end)}
112
+ ></lr-virtual-list>
113
+ ```
114
+
115
+ Every row — in both `row-height` modes — is positioned by a `transform: translateY(offset)` computed
116
+ from a single cumulative offsets array, rather than by page flow; this is what lets a small DOM window
117
+ exist while the scrollbar still reflects the true total content height. That array is rebuilt only
118
+ when `items`, `row-height`, or `keyFunction` change, or a row's measured height changes — **not** on
119
+ every update, so a pure scroll-position tick (potentially every `rAF` while scrolling) only re-runs the
120
+ cheap range/visibility math, never the `O(n)` offsets rebuild (which, in `row-height="auto"` mode, also
121
+ means a `keyFunction` call per item). In `row-height="auto"` mode, unmeasured rows contribute a fixed
122
+ estimate to that array until their real `ResizeObserver`-reported height lands, so only rows after a
123
+ newly-measured one shift on each measurement rather than the whole list reflowing. The offsets rebuild,
124
+ when it does run, is an `O(n)` loop appropriate for hundreds to a few thousand rows (a scrollable
125
+ history sidebar); it is not the right approach for a hundred-thousand-row list without further work
126
+ (e.g. a Fenwick/segment tree for `O(log n)` offset queries+updates).
127
+
128
+ **Known gotchas:**
129
+ - `items`, `renderItem`, `keyFunction`, and `groups` are all `attribute: false` — they must be set as
130
+ JS properties (`.items=`, `.renderItem=`, …), never as HTML attribute strings.
131
+ - The container is `role="list"` with rows `role="listitem"`, deliberately not `listbox`/`option` —
132
+ this component only provides windowing, not the roving-tabindex/`aria-activedescendant`
133
+ keyboard-interaction contract a real `listbox` requires. `active-id` only scrolls a row into view and
134
+ marks it `aria-current`; it is not a selection widget. Compose your own selection behavior on top if
135
+ needed.
136
+ - `[part="base"]` carries `tabindex="0"` unconditionally, since `renderItem`'s caller-supplied content
137
+ isn't guaranteed to contain a focusable element and an otherwise-unreachable-by-keyboard scroll
138
+ region would result.
139
+ - `aria-setsize`/`aria-posinset` are computed from a row's real index in the full `items` array, not its
140
+ position among the currently-rendered DOM window, so assistive tech still announces e.g. "item 12 of
141
+ 340" correctly even though only a handful of rows exist in the DOM at a time.
142
+ - `groups` is accepted today purely for forward API compatibility; setting it has no visible effect
143
+ yet.
144
+
145
+ ---
@@ -0,0 +1,78 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/conversation.md — do not edit this file. -->
2
+
3
+ # `lr-voice-picker`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/conversation/voice-picker/voice-picker.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraVoicePicker`, also available unregistered from `@aceshooting/lyra-ui/components/conversation/voice-picker/voice-picker.class.js`
7
+ - **Family** `components/conversation/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-voice-picker`
14
+
15
+ A TTS voice selector over a host-supplied `catalog`, mirroring `lr-model-select`'s
16
+ closed-dropdown/free-text-combobox dual mode, stale-value handling, and form-association verbatim
17
+ (see that section for the full mode-switching contract this one shares), extended with a
18
+ TTS-agnostic preview affordance. Preview is event-first: `lr-preview-request` always fires first
19
+ and is cancelable — left un-prevented, a `previewUrl` plays through one internal native `<audio>`
20
+ (validated by `safeMediaSrc()` first); `preventDefault()` or no URL leaves playback to the host's own
21
+ TTS. Requesting the same voice while it's already playing internally stops it instead of
22
+ re-requesting; requesting a different voice switches. Does not synthesize speech, fetch catalogs, or
23
+ persist selection; not a persona picker; `lr-model-select` stays for LLMs.
24
+
25
+ **Exported types:** `LyraVoiceCatalogEntry { id: string; label: string; language?: string;
26
+ description?: string; previewUrl?: string }` — `language`/`description` render as a quiet
27
+ `[part="option-meta"]` second line. `LyraVoiceCatalog = string[] | LyraVoiceCatalogEntry[]` —
28
+ homogeneous, same union contract as `LyraModelCatalog`.
29
+
30
+ **Properties:** `provider: string = ''` — informational only (e.g. `'elevenlabs'`); rendered as a
31
+ small leading badge. `catalog?: LyraVoiceCatalog` (attribute: false) — the full voice list; omit (or
32
+ leave empty) to fall back to plain free-text entry. `allowCustom: boolean = false` (attribute
33
+ `allow-custom`, reflected) — let the user type/commit a value that isn't in `catalog`. `preview:
34
+ boolean = true` (reflected) — whether to render preview affordances at all. `label: string = ''`,
35
+ `hint: string = ''`, `errorText: string = ''` (attribute `error-text`), `placeholder: string = ''`,
36
+ `spellcheck: boolean = true` (string-aware converter, same as `lr-model-select`), `autocapitalize:
37
+ string = ''`, `autoCorrect: string = ''` (attribute `autocorrect`), `autocomplete: string = 'off'`,
38
+ `inputMode: string = ''` (attribute `inputmode`), `enterKeyHint: string = ''` (attribute
39
+ `enterkeyhint`), and `open: boolean = false` (reflected) — all mirror `lr-model-select`'s
40
+ identically-named properties.
41
+
42
+ **Form association:** hand-rolled via `attachInternals()`, mirroring `lr-model-select`: `value`
43
+ getter/setter (the current voice id, `''` when nothing is selected), `name` (reflected), `disabled`
44
+ (reflected), `required` (reflected — enforced via `internals.setValidity()`).
45
+
46
+ **Events:** `lr-change` — `detail: { value, inCatalog }`. `lr-preview-request` — `detail: {
47
+ voiceId, previewUrl? }`, cancelable. `lr-preview-change` — `detail: { voiceId }`, internal playback
48
+ started (`voiceId`) or stopped (`null`). Plus mirrored native `input`/`change` and re-dispatched
49
+ `focus`/`blur` (picker-family contract, same as `lr-model-select`).
50
+
51
+ **Slots:** `hint`, `error`.
52
+
53
+ **CSS parts:** `form-control-label`, `trigger` (closed-dropdown mode), `combobox`/`combobox-input`
54
+ (free-text mode), `provider-badge`, `listbox`, `option`, `option-label`, `option-meta` (the quiet
55
+ `language · description` second line), `option-badge` (the "not in catalog" badge on a synthetic
56
+ stale-value row), `option-preview` (a pointer-only per-row preview icon, `tabindex="-1"`,
57
+ `aria-hidden`), `preview-button` (the standalone, keyboard-reachable preview toggle beside the
58
+ trigger), `expand-icon`, `empty`, `hint`, `error`.
59
+
60
+ ```html
61
+ <lr-voice-picker provider="elevenlabs" .catalog=${voices} allow-custom
62
+ @lr-change=${(e) => setVoice(e.detail.value)}
63
+ @lr-preview-request=${(e) => {
64
+ if (!e.detail.previewUrl) {
65
+ e.preventDefault();
66
+ playSample(e.detail.voiceId);
67
+ }
68
+ }}
69
+ ></lr-voice-picker>
70
+ ```
71
+
72
+ **Known gotchas:**
73
+ - Listbox options must not contain tab-focusable controls, so preview is accessible via the
74
+ standalone `[part="preview-button"]` beside the trigger (previews the active option while open,
75
+ else the committed value) — the per-row `[part="option-preview"]` icon is a pointer-only
76
+ duplicate (`tabindex="-1"`, `aria-hidden="true"`).
77
+ - `catalog` must be homogeneous — the same constraint `lr-model-select`'s `LyraModelCatalog` union
78
+ documents.
@@ -0,0 +1,78 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/conversation.md — do not edit this file. -->
2
+
3
+ # `lr-widget-renderer`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/conversation/widget-renderer/widget-renderer.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraWidgetRenderer`, also available unregistered from `@aceshooting/lyra-ui/components/conversation/widget-renderer/widget-renderer.class.js`
7
+ - **Family** `components/conversation/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-widget-renderer`
14
+
15
+ Renders an agent-streamed declarative JSON widget tree through an allowlisted `type -> lyra tag`
16
+ registry: safe generative UI with exactly one action event out. A mapped node's real element is
17
+ created via `document.createElement()` with every prop assigned as a plain JS property (never
18
+ `setAttribute`, never `innerHTML`), and reused by key across a re-resolve so a mapped widget's own
19
+ internal state (an open `<details>`, focus, scroll position) survives a streamed `tree` update.
20
+ Built-in `row`/`col`/`text` structural nodes render through ordinary nested templates instead. Not a
21
+ form runtime (no input/select/form types in the default registry), no expression language or
22
+ data-binding, no remote widget/schema fetching, and it never renders arbitrary HTML or navigates (no
23
+ `href` props are allowlisted anywhere).
24
+
25
+ **Exported types:** `WidgetNode { type: string; id?: string; props?: Record<string, unknown>;
26
+ children?: (WidgetNode | string)[]; slot?: string; actionId?: string; payload?: unknown }` — `id` is
27
+ a stable reconciliation key (falling back to a structural path), `slot` is honored only when the
28
+ parent type allowlists it, `actionId` arms the type's declared action trigger, and `payload` is
29
+ echoed back in `lr-widget-action`.
30
+
31
+ **Properties:** `tree: WidgetNode | null = null` (property only) — the declarative widget tree to
32
+ render; `null` renders an empty base. `registry?: WidgetTypeRegistry` (attribute: false) — a
33
+ per-instance override of the module-level default registry.
34
+
35
+ **Registry module (`widget-renderer/registry.js`):** `registerWidgetType(type, def)` registers (or
36
+ overwrites) a type in the default registry; `def: WidgetTypeDefinition { tag?: string; props?:
37
+ Record<string, 'string' | 'number' | 'boolean'>; forcedProps?: Record<string, unknown>; slots?:
38
+ string[]; action?: { event: string } }` — `tag` is resolved prefix-aware, `props` is a prop allowlist
39
+ (a prop absent here, or whose runtime type doesn't match, is silently skipped — never assigned),
40
+ `forcedProps` always apply and are never overridable by `WidgetNode.props`, `slots` allowlists child
41
+ `slot` names (a disallowed one renders unslotted rather than being dropped), and `action.event` is
42
+ the native/custom DOM event that arms `lr-widget-action` when a node also sets `actionId`.
43
+ `getDefaultWidgetTypeRegistry()` returns the module-level registry `registerWidgetType()` writes to.
44
+
45
+ **Default registry** (populated by the side-effect entry's `registerDefaultWidgetTypes()`): `text`
46
+ (plain text node), `row`/`col` (internal flex wrappers; props `gap: 's'|'m'|'l'`, `align:
47
+ 'start'|'center'|'end'|'stretch'`, `justify: 'start'|'center'|'end'|'between'`), `card` →
48
+ `lr-card` (`appearance`), `badge` → `lr-badge` (`variant`), `button` → `lr-button` (`variant`,
49
+ `appearance`, `size`, `disabled`, `loading`; action: `click`), `stat` → `lr-stat` (`label`,
50
+ `value`, `unit`, `variant`, `caption`, `sub`), `result-card` → `lr-result-card` (`title`),
51
+ `result-field` → `lr-result-field` (`label`, `value`), `markdown` → `lr-markdown` (`content`;
52
+ forced `{ sanitize: true }`), `image` → `lr-media-card` (`src`, `alt`, `filename`; forced `{ kind:
53
+ 'image' }`).
54
+
55
+ **Events:** `lr-widget-action` — `detail: { actionId, payload }`, the single bubbling action
56
+ channel. `lr-render-error` — `detail: { error }`, the root value was structurally unusable
57
+ (non-object, or the depth/size caps made it empty).
58
+
59
+ **CSS parts:** `base` (the root wrapper, `display: contents`), `row`, `col`, `text` (built-in
60
+ structural nodes only — a mapped lyra component exposes its own parts instead).
61
+
62
+ Caps: depth 32, 5,000 nodes — excess is skipped with a deduped `console.warn` per type/prop per
63
+ instance. Reconciliation is keyed by `id ?? structural path`, so a streamed re-send patches in
64
+ place and user state (an open `<details>`, focus, scroll) survives.
65
+
66
+ ```ts
67
+ registerWidgetType('sparkline', { tag: tag('sparkline'), props: { data: 'string' } });
68
+ ```
69
+ ```html
70
+ <lr-widget-renderer .tree=${msg.widget}
71
+ @lr-widget-action=${(e) => sendToAgent(e.detail.actionId, e.detail.payload)}
72
+ ></lr-widget-renderer>
73
+ ```
74
+
75
+ **Optional peer deps:** none new — the default-registry entry directly imports the eight mapped
76
+ components (`markdown` keeps its own `marked`/`dompurify` optional-peer fallback). A host wanting a
77
+ leaner dependency graph registers a custom registry (via the `registry` property) and imports only
78
+ the components it maps.
@@ -0,0 +1,104 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/layout.md — do not edit this file. -->
2
+
3
+ # `lr-widget`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/layout/widget/widget.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraWidget`, also available unregistered from `@aceshooting/lyra-ui/components/layout/widget/widget.class.js`
7
+ - **Family** `components/layout/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-widget`
14
+
15
+ A titled panel shell with an optional collapse toggle and an optional fullscreen-expand toggle.
16
+ First-party invention (no Web Awesome equivalent). Fullscreen promotes the same host element in
17
+ place (a CSS state, not a clone/portal), so slotted content (a chart, a running simulation, scroll
18
+ position) survives the transition.
19
+
20
+ **Properties:**
21
+ - `label: string = ''`
22
+ - `sublabel: string = ''`
23
+ - `collapsible: boolean = false` (reflected — shows the collapse/expand chevron button)
24
+ - `collapsed: boolean = false` (reflected)
25
+ - `expandable: boolean = false` (reflected — shows the fullscreen toggle button)
26
+ - `fullscreen: boolean = false` (reflected)
27
+ - `fullscreenInset: string = ''` (attribute `fullscreen-inset`) — raw CSS `inset` shorthand applied to
28
+ `[part="base"]` and `[part="backdrop"]` while fullscreen instead of the default per-side
29
+ `max(var(--lr-space-l), <safe-area inset>)`, e.g. `"0 0 0 240px"` to leave a 240px persistent
30
+ sidebar/toolbar visible during fullscreen
31
+ - `compact: boolean = false` (reflected) — tighter header/body padding, same convention as
32
+ `lr-empty`'s `compact`
33
+ - `backdropInset: string = ''` (attribute `backdrop-inset`) — overrides the fullscreen backdrop's
34
+ CSS `inset` independently from `fullscreenInset`; when empty, it follows `fullscreenInset`
35
+ - `views: WidgetView[] = []` (attribute: false) — named alternate views for the panel body, e.g. a
36
+ chart/table toggle inside the same card chrome; `WidgetView { id: string; label: string; icon?:
37
+ TemplateResult }`. Each entry gets a header toggle button (`[part='view-toggle']`) and a
38
+ `<slot name="view-${id}">`. Empty (the default) renders today's single unnamed default slot as the
39
+ sole view, unchanged.
40
+ - `activeView: string = ''` (attribute: false) — the currently active view's `id`; defaults to the
41
+ first entry of `views` (or `''` when `views` is empty). Settable directly to control the active
42
+ view externally; also updated internally when a view toggle is clicked.
43
+ - `accessibleLabel: string = ''` (attribute `aria-label`) — overrides the label-derived fullscreen
44
+ dialog name.
45
+
46
+ **Events:** `lr-collapse-change` (`detail: { collapsed }`, the new state), `lr-fullscreen-change`
47
+ (`detail: { fullscreen }` — also fired when fullscreen is exited via Escape or a backdrop click, not
48
+ just the toggle button), `lr-view-change` (`detail: { viewId }`, the new active view's `id` — fired
49
+ when it changes via a header view-toggle click, not when a consumer sets `activeView` directly)
50
+
51
+ **Slots:** default (the panel body, rendered only while `views` is empty), `icon` (optional leading
52
+ icon in the title row), `label` (rich label content, overrides the `label` attribute), `sublabel`
53
+ (rich sublabel content, overrides the `sublabel` attribute), `actions` (header action controls,
54
+ rendered before the collapse/expand buttons), `collapse-icon` (replaces the built-in chevron in the
55
+ collapse toggle via native slot fallback; only meaningful while `collapsible`), `fullscreen-icon`
56
+ (replaces the built-in glyph in the fullscreen toggle — the override replaces *both* the "expand"
57
+ and "exit fullscreen" defaults, so the consumer owns that distinction, e.g. by reading the
58
+ `fullscreen` attribute; only meaningful while `expandable`), and one `view-{id}` slot per `views`
59
+ entry, used instead of the default slot
60
+
61
+ **CSS parts:** `base`, `header`, `title`, `icon` (wrapper around the `icon` slot, hidden entirely when
62
+ empty), `label-group` (wrapper around the label and sublabel), `label`, `sublabel`, `actions`,
63
+ `view-toggles` (the header toggle-button group, only rendered when `views` is non-empty),
64
+ `view-toggle` (a single view toggle button), `collapse-button`, `fullscreen-button`, `body`,
65
+ `backdrop`
66
+
67
+ **Themeable custom properties:** `--lr-widget-overlay-color` (default `var(--lr-color-overlay)` —
68
+ the fullscreen backdrop scrim color), `--lr-widget-fullscreen-inset` (default per side
69
+ `max(var(--lr-space-l), <safe-area inset>)` — the fullscreen `[part="base"]` inset; the
70
+ `fullscreen-inset` attribute overrides it), and `--lr-widget-backdrop-inset` (defaults to
71
+ `var(--lr-widget-fullscreen-inset)`; the `backdrop-inset` attribute overrides it), plus shared
72
+ tokens (`--lr-space-*`, `--lr-color-border/-surface/-text-quiet`,
73
+ `--lr-radius`, `--lr-shadow`, `--lr-icon-button-size`, `--lr-focus-ring-*`).
74
+
75
+ **Optional peer deps:** none.
76
+
77
+ ```html
78
+ <lr-widget label="Load profile" sublabel="Last 7 days" collapsible expandable>
79
+ <span slot="actions"><button>Refresh</button></span>
80
+ <div>Panel body content — a chart, a table, anything.</div>
81
+ </lr-widget>
82
+ ```
83
+
84
+ While `fullscreen`, `[part="base"]` (not the host itself) takes `role="dialog"` + `aria-modal="true"`
85
+ (with `aria-label` from `label`, falling back to `"Fullscreen panel"`), document scroll is locked
86
+ (ref-counted, safe with multiple simultaneously-fullscreen widgets), and Tab/Shift+Tab are bounded
87
+ to the panel's own focusable content (`actions` slot → collapse/fullscreen buttons → body slot,
88
+ matching visual tab order — resolved shadow-piercingly, so a slotted custom element's real
89
+ focusable target inside its own shadow root is found too) so keyboard focus can't escape to page
90
+ content hidden behind the backdrop. Escape or clicking the backdrop exits fullscreen and returns
91
+ focus to whichever button triggered it. Set `fullscreen-inset` (e.g. `"0 0 0 240px"`) to reserve
92
+ space for a persistent sidebar/toolbar that should stay visible instead of being covered by the
93
+ fullscreen panel/backdrop — it overrides the default `var(--lr-space-l)` inset on every side for
94
+ both `[part="base"]` and `[part="backdrop"]`. Set `compact` for tighter header/body padding.
95
+
96
+ **Known gotchas:**
97
+ - a reconnect that preserves the same element instance (e.g. a drag-and-drop reparent) resumes its
98
+ shared overlay registration and re-acquires the scroll lock if `fullscreen` was still `true`
99
+ across the move — `disconnectedCallback`/`connectedCallback` fire back-to-back with no update in
100
+ between, so `willUpdate()` alone wouldn't otherwise notice.
101
+ - `collapsed` hides the body via `hidden` rather than an animated height transition — collapsing is
102
+ instant, not a slide.
103
+
104
+ ---
@@ -0,0 +1,112 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/data.md — do not edit this file. -->
2
+
3
+ # `lr-word-cloud`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/data/word-cloud/word-cloud.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraWordCloud`, also available unregistered from `@aceshooting/lyra-ui/components/data/word-cloud/word-cloud.class.js`
7
+ - **Family** `components/data/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-word-cloud`
14
+
15
+ Dependency-free SVG word/tag cloud. First-party invention (no Web Awesome equivalent). Lays words
16
+ out via an outward Archimedean-spiral search — heaviest word placed first, each word spiraling from
17
+ the center until it clears every word already placed. Unlike sibling `lr-sparkline`/`lr-heatmap`
18
+ (one `role="img"` glyph standing in for an aggregate value), the individual words here *are* the
19
+ meaningful interactive content — but with up to `MAX_WORDS` (150) of them, making every single one
20
+ its own tab stop would be a poor keyboard experience. Instead, like `lr-heatmap`'s cells, the whole
21
+ `[part="svg"]` is **one tab stop with roving arrow-key focus**: `ArrowRight`/`ArrowDown` move the
22
+ focus cursor to the next word in **declaration order** (not weight/placement order),
23
+ `ArrowLeft`/`ArrowUp` to the previous, `Home`/`End` to the first/last, and `Enter`/`Space` fires
24
+ `lr-word-click` for the currently-focused word. A `[part="focus-ring"]` `<rect>` is drawn around
25
+ the focused word (absent until a word has actually been focused via keyboard or click), and a
26
+ visually-hidden `[part="live-region"]` (`role="status" aria-live="polite"`) announces
27
+ `"${text}, ${weight}"` on every focus move.
28
+
29
+ **Properties:**
30
+ - `words: WordCloudWord[] = []` (attribute: false) — `{ text: string, weight: number, color?:
31
+ string, group?: string }`; `weight` drives font size (a negative/non-finite `weight` is clamped to
32
+ `0` for sizing purposes only — the original value is still echoed verbatim in `lr-word-click`'s
33
+ `detail`), `color` overrides the palette for that word, `group` shares one palette color across
34
+ every word with the same `group` value
35
+ - `minFontSize: number = 12` (attribute `min-font-size`) — px, applied to the lowest-weight word;
36
+ layout clamps positive finite values to at most 512px and uses 1px for invalid/non-positive values
37
+ - `maxFontSize: number = 48` (attribute `max-font-size`) — px, applied to the highest-weight word;
38
+ normalized by the same 1–512px layout bound (reversed min/max bounds are swapped)
39
+ - `scale: 'linear'|'sqrt' = 'linear'` — `sqrt` compresses the weight→font-size mapping so one heavy
40
+ word doesn't dwarf the rest, matching `lr-heatmap`'s `scale` property
41
+ - `orientations: 'horizontal'|'mixed' = 'horizontal'` — `mixed` lets ~25% of words render rotated
42
+ 90° for denser packing
43
+ - `palette?: string[]` (attribute: false) — custom categorical colors, cycled by word index (or by
44
+ `group`); defaults to the `--lr-word-cloud-color-1..8` tokens
45
+
46
+ **Methods:** `refreshTheme(): void` — forces a relayout so the `--lr-font` custom property is
47
+ re-read from computed style (font-family affects the canvas text measurement layout depends on);
48
+ call this from your own theme-toggle handler, since there's no global theme-change event to
49
+ subscribe to automatically (mirrors `lr-chart`'s `refreshTheme()`).
50
+
51
+ **Events:** `lr-word-click` (`detail: { text, weight, group }`, fires on click, or Enter/Space on
52
+ the currently-focused word — a no-op if nothing is focused yet)
53
+
54
+ **Slots:** none.
55
+
56
+ **CSS parts:** `base`, `svg`, `word` (each `<text>`), `focus-ring` (the rect around the roving-focus
57
+ cursor's word), `live-region` (visually-hidden `role="status" aria-live="polite"` announcement text),
58
+ `empty` (the no-data placeholder — hardcoded `"No data"` text, no property to customize it, unlike
59
+ `lr-empty`/`lr-table`)
60
+
61
+ **Themeable custom properties:** `--lr-word-cloud-color-1`, `--lr-word-cloud-color-2`,
62
+ `--lr-word-cloud-color-3`, `--lr-word-cloud-color-4`, `--lr-word-cloud-color-5`,
63
+ `--lr-word-cloud-color-6`, `--lr-word-cloud-color-7`, `--lr-word-cloud-color-8` (the default
64
+ categorical palette, cycled by word index or `group`; a data-driven literal exception like
65
+ `lr-heatmap`'s scale-ramp endpoints — exposed as retheme-able custom properties instead of
66
+ hardcoded), plus shared tokens (`--lr-font`,
67
+ `--lr-focus-ring-*`, `--lr-transition-fast`, `--lr-color-text-quiet`).
68
+
69
+ **Optional peer deps:** none.
70
+
71
+ ```html
72
+ <lr-word-cloud id="cloud" style="height: 20rem"></lr-word-cloud>
73
+ <script type="module">
74
+ document.getElementById('cloud').words = [
75
+ { text: 'JavaScript', weight: 90 },
76
+ { text: 'TypeScript', weight: 75 },
77
+ { text: 'Lit', weight: 60, group: 'framework' },
78
+ ];
79
+ document.getElementById('cloud').addEventListener('lr-word-click', (e) => console.log(e.detail));
80
+ </script>
81
+ ```
82
+
83
+ The host itself gets `role="group"` and an auto-computed `aria-label` (e.g. `"Word cloud of 12
84
+ words"` / `"Word cloud of 1 word"`, counting only words actually rendered — post `MAX_WORDS`-cap and
85
+ post-drop, not the raw `words.length`) **unless** the host already carried its own `role`/`aria-label`
86
+ attribute at first render. That opt-out check runs exactly once (the very first update) and is never
87
+ re-checked afterwards, so setting `role`/`aria-label` yourself *after* the component has already
88
+ rendered at least once only sticks until the next `words`-driven relayout, which overwrites it back
89
+ to the auto default — set it in the initial markup (or before first paint) to opt out permanently.
90
+
91
+ **Known gotchas:**
92
+ - capped at 150 words (`MAX_WORDS` in `word-cloud-layout.ts`, mirroring `lr-sparkline`'s
93
+ `MAX_BARS` DOM-node-count guard) — over the cap, the **heaviest** 150 survive and the rest are
94
+ dropped, regardless of where they fell in the input array (it is not simply "first 150 in, rest
95
+ dropped"). A pathological input (e.g. one huge word repeated many times) can also exhaust the
96
+ spiral search's radius bound and get dropped the same way; blank/whitespace-only `text` is dropped
97
+ too. Every drop reason logs one deduplicated `console.warn` per distinct skipped-count (not one
98
+ warning per word, and not repeated twice for the same count) — nothing throws.
99
+ - each word's spiral search tests at most 4,096 candidate positions. Together with the 150-word and
100
+ 512px font-size caps, this bounds placement work even for dense or adversarial layouts; a word
101
+ that exhausts the search budget is reported through the same skipped-word path.
102
+ - text width is measured via a detached `<canvas>` 2D context (`ctx.measureText`) at a hardcoded
103
+ `font-weight: 600` matching `[part='word']`'s own default CSS — close enough for
104
+ collision-avoidance spacing, but not pixel-exact, and overriding `[part='word']`'s `font-weight` via
105
+ `::part()` desyncs measurement from what's actually painted (looser/denser packing, not a crash).
106
+ - rotation (`orientations="mixed"`) is genuinely random per layout (`Math.random()`, not seeded), so
107
+ which words render rotated changes on every re-layout (any `words`/`minFontSize`/`maxFontSize`/
108
+ `scale`/`orientations` change) — don't rely on rotation being stable across renders.
109
+ - only one word is ever in the page's tab sequence at a time (the roving cursor on `[part="svg"]`) —
110
+ there's no way to Tab directly to the Nth word; arrow-key/Home/End your way there, or click it.
111
+
112
+ ---
@@ -0,0 +1,58 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/viewers.md — do not edit this file. -->
2
+
3
+ # `lr-xml-viewer`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/viewers/xml-viewer/xml-viewer.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraXmlViewer`, also available unregistered from `@aceshooting/lyra-ui/components/viewers/xml-viewer/xml-viewer.class.js`
7
+ - **Family** `components/viewers/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-xml-viewer`
14
+
15
+ Collapsible, copyable, `DOMParser`-based tree view for XML documents, mirroring `lr-json-viewer`'s
16
+ UX (`collapsed-depth`, `copyable`, structural-path-keyed expand state that survives a same-shape
17
+ `xml` reassignment) adapted for XML's own node kinds: elements with attributes, text, comments, CDATA
18
+ sections, and processing instructions. Namespace-literal: qualified names render exactly as authored,
19
+ with no namespace-URI-aware matching. `DOMParser` never resolves external entities or DTDs, so XXE
20
+ injection is structurally out of reach. Not `lr-json-viewer` (JS values); not `lr-html-viewer`
21
+ (sanitized *rendered* HTML). No XPath/XSLT evaluation, no editing, no schema validation.
22
+
23
+ **Properties:** `src: string = ''` — URL to fetch and parse; ignored once `xml` is set. `xml?:
24
+ string` (property only) — raw XML text to parse and render; wins over `src`, and setting it parses
25
+ synchronously. `name: string = ''` — accessible label. `collapsedDepth?: number` (attribute
26
+ `collapsed-depth`) — elements at or beyond this nesting depth (root = 0) start collapsed. `copyable:
27
+ boolean = false` (reflected) — shows copy-to-clipboard affordances, one for the whole document plus
28
+ one per element. `maxHeight: string = ''` (attribute `max-height`). `anchorKinds` is a readonly
29
+ `['node-path']` (this viewer's supported `LyraAnchor.kind` values for the shared anchor-target
30
+ contract) — each numeric path segment is the 0-based index within the parent's *element* children,
31
+ and an optional trailing string segment `'@attrName'` addresses one attribute.
32
+
33
+ **Methods:** `search(query)` resolves the match count via a case-insensitive substring search over
34
+ every element's tag name, attribute names/values, and own text (empty/whitespace query behaves like
35
+ `clearSearch()`); `searchNext()`/`searchPrevious()` advance/step back through matches (wrapping);
36
+ `clearSearch()` clears the query and matches.
37
+
38
+ **Events:** `lr-copy` — `detail: { text }`. `lr-search-change` — `detail: { query, matchCount,
39
+ activeIndex }`. `lr-render-error` — `detail: { error }`, fetching or parsing failed, including a
40
+ parse error or exceeding the node cap.
41
+
42
+ **CSS parts:** `base`, `toolbar` (the whole-document copy button row, only when `copyable`),
43
+ `copy-button` (the whole-document one, or a per-node one), `tree`, `node` (`data-active` while it's
44
+ the resolved anchor target, `data-match`, `data-active-match`), `tag` (`data-match`), `attribute`,
45
+ `attribute-name`, `attribute-value` (`data-match`), `text` (`data-match`), `comment`, `cdata`, `pi`,
46
+ `toggle` (an element's expand/collapse button, hidden but present for row alignment on leaf/empty
47
+ elements), `error`, `spinner`.
48
+
49
+ **Themeable custom properties:** `--lr-xml-viewer-max-height` (default `none`).
50
+
51
+ ```html
52
+ <lr-xml-viewer .xml=${payload} collapsed-depth="2" copyable
53
+ search=${query}
54
+ ></lr-xml-viewer>
55
+ ```
56
+
57
+ Node cap: 50,000 — exceeding it renders the localized `xmlViewerTooManyNodes` error instead of the
58
+ tree.
@@ -0,0 +1,57 @@
1
+ <!-- GENERATED by scripts/build-llms.mjs from llms/media.md — do not edit this file. -->
2
+
3
+ # `lr-zoomable-frame`
4
+
5
+ - **Import** `import '@aceshooting/lyra-ui/components/media/zoomable-frame/zoomable-frame.js';` (registers the tag; side-effect import)
6
+ - **Class** `LyraZoomableFrame`, also available unregistered from `@aceshooting/lyra-ui/components/media/zoomable-frame/zoomable-frame.class.js`
7
+ - **Family** `components/media/` — see `llms/index.md` for its siblings
8
+ - **Optional peers** none
9
+ - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
10
+
11
+ ---
12
+
13
+ ## `lr-zoomable-frame`
14
+
15
+ Scrollable inspection frame with bounded zoom controls and keyboard shortcuts. Scrolling provides
16
+ panning when zoomed content exceeds the viewport.
17
+
18
+ **Properties:**
19
+ - `zoom: number = 1` (attribute `zoom`, reflected), `minZoom: number = 0.5`, `maxZoom: number = 4`,
20
+ and `zoomStep: number = 0.25` — bounded zoom configuration
21
+ - `src: string = ''` and `alt: string = ''` — optional image source; otherwise the default slot is
22
+ rendered
23
+ - `accessibleLabel: string | null` (attribute `aria-label`) — host-level accessible name
24
+
25
+ **Methods:** `zoomIn()`, `zoomOut()`, and `resetZoom()` update the zoom and emit
26
+ `lr-zoom-change` (`detail: { zoom }`). `resetView()` calls `resetZoom()` **and** scrolls the
27
+ viewport back to the origin — `resetZoom()` deliberately preserves the current pan/scroll offset
28
+ (it backs the built-in reset button and the `0` shortcut), `resetView()` is the stronger reset for
29
+ a caller swapping in entirely new content (`<lr-lightbox>` calls it on every navigation). The
30
+ viewport accepts `+`/`=` (zoom in), `-`/`_` (zoom out), and `0` (reset zoom) while focused.
31
+
32
+ **Slots:** default slot — content to inspect; ignored while `src` is set (an `<img>` renders
33
+ instead).
34
+
35
+ **Events:** `lr-zoom-change` (`detail: { zoom }`).
36
+
37
+ **CSS parts:** `base`, `viewport`, `content`, `controls`, `zoom-out`, `zoom-in`, and `reset`.
38
+
39
+ **Themeable custom properties:** `--lr-zoomable-frame-min-block-size` (default
40
+ `var(--lr-size-10rem)` — the scrollable viewport's minimum block size).
41
+ `--lr-zoomable-frame-zoom` is a read-only hook, not a knob: the component writes the resolved
42
+ zoom factor inline on `[part="content"]`, which `transform: scale()` consumes — setting it from
43
+ outside is overwritten on the next render.
44
+
45
+ ```html
46
+ <lr-zoomable-frame src="map-preview.png" alt="Map preview" aria-label="Map preview"></lr-zoomable-frame>
47
+ ```
48
+
49
+ **Known gotchas:**
50
+ - `zoom`/`minZoom`/`maxZoom`/`zoomStep` are all normalized before any zoom math: `minZoom` falls
51
+ back to `0.5`, `maxZoom` to `4` (and is floored at the effective `minZoom`), `zoomStep` to
52
+ `0.25`, each clamped into `[0.01, 1000]`, so a `NaN`/zero/negative attribute can't stall or
53
+ reverse `zoomIn()`/`zoomOut()`.
54
+ - every zoom is snapped to a multiple of `zoomStep` and rounded to 2 decimals, so `zoom` will not
55
+ always equal the exact value you assigned.
56
+
57
+ ---