@aceshooting/lyra-ui 29.0.2 → 29.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 (521) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +19 -26
  3. package/design-tokens.json +1 -1
  4. package/dist/cli/migrate-wa.mjs +2 -0
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +5 -3
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +4 -3
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  8. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +21 -5
  9. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +14 -11
  10. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +1 -1
  11. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  12. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +34 -7
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +25 -11
  14. package/dist/components/agent-tools/eval-result/eval-result-source.js +1 -0
  15. package/dist/components/agent-tools/eval-result/eval-result.class.d.ts +31 -11
  16. package/dist/components/agent-tools/eval-result/eval-result.class.js +29 -15
  17. package/dist/components/agent-tools/eval-result/eval-result.styles.js +1 -1
  18. package/dist/components/agent-tools/eval-result/eval-run-result.d.ts +10 -0
  19. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +26 -5
  20. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +16 -6
  21. package/dist/components/agent-tools/span-waterfall/span-waterfall.d.ts +1 -1
  22. package/dist/components/agent-tools/span-waterfall/span-waterfall.js +1 -1
  23. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  24. package/dist/components/agent-tools/task-list/task-list.class.d.ts +29 -6
  25. package/dist/components/agent-tools/task-list/task-list.class.js +13 -7
  26. package/dist/components/agent-tools/task-list/task-list.d.ts +1 -1
  27. package/dist/components/agent-tools/task-list/task-list.js +1 -1
  28. package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
  29. package/dist/components/agent-tools/terminal/terminal.class.d.ts +9 -5
  30. package/dist/components/agent-tools/terminal/terminal.class.js +8 -8
  31. package/dist/components/agent-tools/test-results/test-results.class.d.ts +16 -4
  32. package/dist/components/agent-tools/test-results/test-results.class.js +15 -6
  33. package/dist/components/agent-tools/test-results/test-results.d.ts +1 -0
  34. package/dist/components/agent-tools/test-results/test-results.js +1 -1
  35. package/dist/components/agent-tools/test-results/test-results.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +7 -4
  37. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -1
  38. package/dist/components/agent-tools/trace-tree/span-projection.js +1 -0
  39. package/dist/components/agent-tools/trace-tree/span-shared.d.ts +29 -0
  40. package/dist/components/agent-tools/trace-tree/span-shared.js +1 -0
  41. package/dist/components/agent-tools/trace-tree/span.d.ts +5 -35
  42. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +27 -5
  44. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +19 -9
  45. package/dist/components/agent-tools/trace-tree/trace-tree.d.ts +1 -1
  46. package/dist/components/agent-tools/trace-tree/trace-tree.js +1 -1
  47. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  48. package/dist/components/charts/chart/bar-chart.class.d.ts +5 -1
  49. package/dist/components/charts/chart/box-plot.class.d.ts +2 -2
  50. package/dist/components/charts/chart/box-plot.class.js +3 -3
  51. package/dist/components/charts/chart/bubble-chart.class.d.ts +5 -1
  52. package/dist/components/charts/chart/chart-prepared-data.d.ts +9 -0
  53. package/dist/components/charts/chart/chart-prepared-data.js +1 -0
  54. package/dist/components/charts/chart/chart-spatial-data.js +2 -0
  55. package/dist/components/charts/chart/chart-sync.js +1 -1
  56. package/dist/components/charts/chart/chart-table-sampling.js +1 -1
  57. package/dist/components/charts/chart/chart.class.d.ts +56 -6
  58. package/dist/components/charts/chart/chart.class.js +18 -8
  59. package/dist/components/charts/chart/chart.styles.js +1 -1
  60. package/dist/components/charts/chart/doughnut-chart.class.d.ts +5 -1
  61. package/dist/components/charts/chart/histogram-buckets.d.ts +1 -1
  62. package/dist/components/charts/chart/histogram-buckets.js +1 -1
  63. package/dist/components/charts/chart/histogram.class.d.ts +19 -4
  64. package/dist/components/charts/chart/histogram.class.js +1 -1
  65. package/dist/components/charts/chart/line-chart.class.d.ts +5 -1
  66. package/dist/components/charts/chart/lite-chart.class.d.ts +51 -11
  67. package/dist/components/charts/chart/lite-chart.class.js +33 -27
  68. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  69. package/dist/components/charts/chart/pie-chart.class.d.ts +5 -1
  70. package/dist/components/charts/chart/polar-area-chart.class.d.ts +5 -1
  71. package/dist/components/charts/chart/radar-chart.class.d.ts +5 -1
  72. package/dist/components/charts/chart/scatter-chart.class.d.ts +5 -1
  73. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +6 -3
  74. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +6 -5
  75. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +1 -1
  76. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +8 -0
  77. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  78. package/dist/components/conversation/code-block/code-block-base.class.d.ts +5 -3
  79. package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
  80. package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -1
  81. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  82. package/dist/components/conversation/code-block/code-block-shared.d.ts +6 -4
  83. package/dist/components/conversation/code-block/code-block-shared.js +3 -2
  84. package/dist/components/conversation/code-block/code-block.class.d.ts +11 -4
  85. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  86. package/dist/components/conversation/code-block/code-block.d.ts +1 -1
  87. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  88. package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
  89. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  90. package/dist/components/conversation/markdown/markdown-base.class.d.ts +6 -4
  91. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  92. package/dist/components/conversation/markdown/markdown-code-header.d.ts +2 -2
  93. package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
  94. package/dist/components/conversation/markdown/markdown-core.class.d.ts +8 -3
  95. package/dist/components/conversation/markdown/markdown-progressive.js +2 -2
  96. package/dist/components/conversation/markdown/markdown-shared.d.ts +5 -10
  97. package/dist/components/conversation/markdown/markdown-shared.js +5 -5
  98. package/dist/components/conversation/markdown/markdown-streaming-tail.js +1 -1
  99. package/dist/components/conversation/markdown/markdown.class.d.ts +17 -10
  100. package/dist/components/conversation/markdown/markdown.class.js +1 -1
  101. package/dist/components/conversation/markdown/markdown.styles.js +1 -1
  102. package/dist/components/conversation/model-select/model-select.class.d.ts +4 -3
  103. package/dist/components/conversation/model-select/model-select.class.js +3 -2
  104. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  105. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +2 -1
  106. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  107. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +1 -1
  108. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -2
  109. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -1
  110. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  111. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +10 -2
  112. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +15 -6
  113. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  114. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +3 -1
  115. package/dist/components/conversation/realtime-session/realtime-session.class.js +2 -1
  116. package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
  117. package/dist/components/conversation/streaming-text/markdown-detection.d.ts +2 -0
  118. package/dist/components/conversation/streaming-text/markdown-detection.js +4 -1
  119. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +6 -2
  120. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +3 -3
  121. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +1 -1
  122. package/dist/components/conversation/streaming-text/streaming-text.class.js +1 -0
  123. package/dist/components/conversation/thread-list/thread-list.class.d.ts +34 -4
  124. package/dist/components/conversation/thread-list/thread-list.class.js +22 -15
  125. package/dist/components/conversation/thread-list/thread-list.d.ts +1 -1
  126. package/dist/components/conversation/thread-list/thread-list.js +1 -1
  127. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  128. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +6 -2
  129. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +3 -2
  130. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  131. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +3 -2
  132. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -2
  133. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  134. package/dist/components/data/calendar/calendar.class.d.ts +5 -2
  135. package/dist/components/data/calendar/calendar.class.js +1 -1
  136. package/dist/components/data/data-grid/data-grid-processing.js +2 -2
  137. package/dist/components/data/data-grid/data-grid.class.d.ts +22 -8
  138. package/dist/components/data/data-grid/data-grid.class.js +20 -19
  139. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  140. package/dist/components/data/document-library/document-library.class.d.ts +31 -4
  141. package/dist/components/data/document-library/document-library.class.js +25 -12
  142. package/dist/components/data/document-library/document-library.styles.js +1 -1
  143. package/dist/components/data/file-tree/file-tree.class.d.ts +30 -6
  144. package/dist/components/data/file-tree/file-tree.class.js +4 -3
  145. package/dist/components/data/file-tree/file-tree.d.ts +1 -0
  146. package/dist/components/data/file-tree/file-tree.js +1 -1
  147. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +31 -6
  148. package/dist/components/data/flow-canvas/flow-canvas.class.js +40 -19
  149. package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
  150. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  151. package/dist/components/data/flow-canvas/flow-source.js +1 -0
  152. package/dist/components/data/flow-canvas/flow-types.d.ts +4 -2
  153. package/dist/components/data/flow-canvas/flow-viewport-index.js +1 -0
  154. package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +9 -3
  155. package/dist/components/data/flow-minimap/flow-minimap.class.js +11 -2
  156. package/dist/components/data/flow-minimap/flow-minimap.styles.js +1 -1
  157. package/dist/components/data/funnel/funnel.class.d.ts +7 -3
  158. package/dist/components/data/funnel/funnel.class.js +2 -2
  159. package/dist/components/data/heatmap/calendar-grid.d.ts +1 -1
  160. package/dist/components/data/heatmap/calendar-grid.js +1 -1
  161. package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -1
  162. package/dist/components/data/heatmap/heatmap-limits.d.ts +1 -1
  163. package/dist/components/data/heatmap/heatmap-matrix-source-controller.js +1 -0
  164. package/dist/components/data/heatmap/heatmap-matrix-source.d.ts +5 -0
  165. package/dist/components/data/heatmap/heatmap-matrix-source.js +1 -0
  166. package/dist/components/data/heatmap/heatmap-scale.d.ts +0 -16
  167. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  168. package/dist/components/data/heatmap/heatmap.class.d.ts +40 -11
  169. package/dist/components/data/heatmap/heatmap.class.js +26 -6
  170. package/dist/components/data/heatmap/heatmap.styles.js +1 -1
  171. package/dist/components/data/pagination/pagination.class.js +1 -1
  172. package/dist/components/data/sequence-strip/sequence-strip-item.d.ts +17 -0
  173. package/dist/components/data/sequence-strip/sequence-strip-source-controller.js +1 -0
  174. package/dist/components/data/sequence-strip/sequence-strip-source.d.ts +5 -0
  175. package/dist/components/data/sequence-strip/sequence-strip-source.js +1 -0
  176. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +24 -19
  177. package/dist/components/data/sequence-strip/sequence-strip.class.js +23 -4
  178. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  179. package/dist/components/data/sparkline/sparkline.class.d.ts +17 -4
  180. package/dist/components/data/sparkline/sparkline.class.js +3 -3
  181. package/dist/components/data/sparkline/sparkline.styles.js +1 -1
  182. package/dist/components/data/table/table.class.d.ts +14 -10
  183. package/dist/components/data/table/table.class.js +17 -16
  184. package/dist/components/data/timeline/timeline.class.d.ts +5 -2
  185. package/dist/components/data/timeline/timeline.class.js +1 -1
  186. package/dist/components/data/tree/tree-item.class.js +1 -1
  187. package/dist/components/data/tree/tree-owner-controller.js +1 -1
  188. package/dist/components/data/tree/tree.class.d.ts +28 -6
  189. package/dist/components/data/tree/tree.class.js +3 -3
  190. package/dist/components/data/tree/tree.d.ts +1 -0
  191. package/dist/components/data/tree/tree.js +1 -1
  192. package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -7
  193. package/dist/components/data/word-cloud/word-cloud.class.js +6 -4
  194. package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
  195. package/dist/components/forms/catalog-picker-base.d.ts +1 -1
  196. package/dist/components/forms/catalog-picker-base.js +6 -6
  197. package/dist/components/forms/catalog-picker-base.styles.js +1 -1
  198. package/dist/components/forms/combobox/combobox.class.d.ts +7 -3
  199. package/dist/components/forms/combobox/combobox.class.js +1 -1
  200. package/dist/components/forms/combobox/option.class.d.ts +4 -2
  201. package/dist/components/forms/combobox/option.class.js +2 -2
  202. package/dist/components/forms/country-picker/country-picker.class.d.ts +3 -1
  203. package/dist/components/forms/country-picker/country-picker.class.js +1 -1
  204. package/dist/components/forms/currency-picker/currency-picker.class.d.ts +2 -0
  205. package/dist/components/forms/currency-picker/currency-picker.class.js +1 -1
  206. package/dist/components/forms/currency-picker/currency-presentation.js +1 -1
  207. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +6 -2
  208. package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -2
  209. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  210. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +8 -2
  211. package/dist/components/forms/locale-picker/locale-picker.class.js +5 -4
  212. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  213. package/dist/components/forms/select/select.class.d.ts +11 -3
  214. package/dist/components/forms/select/select.class.js +4 -4
  215. package/dist/components/forms/time-zone-picker/time-zone-picker.class.d.ts +2 -0
  216. package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -1
  217. package/dist/components/forms/token-input/token-input.class.d.ts +6 -1
  218. package/dist/components/forms/token-input/token-input.class.js +15 -13
  219. package/dist/components/forms/unit-picker/unit-picker.class.d.ts +2 -0
  220. package/dist/components/forms/unit-picker/unit-picker.class.js +1 -1
  221. package/dist/components/layout/app-rail/app-rail.class.d.ts +1 -1
  222. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  223. package/dist/components/layout/command-palette/command-palette.class.d.ts +5 -2
  224. package/dist/components/layout/command-palette/command-palette.class.js +2 -1
  225. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  226. package/dist/components/layout/menu/menu-item.class.d.ts +2 -2
  227. package/dist/components/layout/menu/menu-item.class.js +2 -2
  228. package/dist/components/layout/menu/menu.class.d.ts +1 -1
  229. package/dist/components/layout/menu/menu.class.js +1 -1
  230. package/dist/components/layout/menubar/menubar.class.d.ts +1 -1
  231. package/dist/components/layout/menubar/menubar.class.js +1 -1
  232. package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -2
  233. package/dist/components/layout/reorder-list/reorder-item.class.js +2 -2
  234. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  235. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  236. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +13 -9
  237. package/dist/components/layout/virtual-list/virtual-list.class.js +21 -17
  238. package/dist/components/media/av-player/av-cue-index.js +1 -0
  239. package/dist/components/media/av-player/av-cue-source.d.ts +13 -0
  240. package/dist/components/media/av-player/av-cue-source.js +1 -0
  241. package/dist/components/media/av-player/av-metadata.d.ts +2 -2
  242. package/dist/components/media/av-player/av-metadata.js +1 -1
  243. package/dist/components/media/av-player/av-player-cue-source-controller.js +1 -0
  244. package/dist/components/media/av-player/av-player.class.d.ts +34 -12
  245. package/dist/components/media/av-player/av-player.class.js +15 -10
  246. package/dist/components/media/flag/flag.class.js +1 -1
  247. package/dist/components/media/flag/language-map.js +1 -1
  248. package/dist/components/media/lightbox/lightbox-source.js +1 -0
  249. package/dist/components/media/lightbox/lightbox-types.d.ts +15 -0
  250. package/dist/components/media/lightbox/lightbox.class.d.ts +22 -21
  251. package/dist/components/media/lightbox/lightbox.class.js +6 -4
  252. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  253. package/dist/components/media/map/map-geojson-diff.d.ts +6 -6
  254. package/dist/components/media/map/map-geojson-diff.js +1 -1
  255. package/dist/components/media/map/map-loader.d.ts +5 -1
  256. package/dist/components/media/map/map.class.d.ts +24 -6
  257. package/dist/components/media/map/map.class.js +2 -2
  258. package/dist/components/media/map/map.styles.js +1 -1
  259. package/dist/components/media/video-playlist/video-playlist.class.d.ts +2 -1
  260. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  261. package/dist/components/overlays/chip/chip.class.d.ts +1 -1
  262. package/dist/components/overlays/chip/chip.class.js +1 -1
  263. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +30 -8
  264. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +22 -8
  265. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
  266. package/dist/components/retrieval/graph/graph-canvas.js +1 -1
  267. package/dist/components/retrieval/graph/graph-source-composition.js +1 -0
  268. package/dist/components/retrieval/graph/graph-source-controller.js +1 -0
  269. package/dist/components/retrieval/graph/graph-spatial-controller.js +2 -2
  270. package/dist/components/retrieval/graph/graph-spatial-model.js +1 -0
  271. package/dist/components/retrieval/graph/graph-spatial.js +1 -1
  272. package/dist/components/retrieval/graph/graph.class.d.ts +31 -6
  273. package/dist/components/retrieval/graph/graph.class.js +26 -5
  274. package/dist/components/retrieval/graph/graph.d.ts +1 -1
  275. package/dist/components/retrieval/graph/graph.js +1 -1
  276. package/dist/components/retrieval/graph/graph.styles.js +1 -1
  277. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +33 -4
  278. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +27 -17
  279. package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +1 -1
  280. package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +1 -1
  281. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +1 -1
  282. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +27 -4
  283. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +29 -14
  284. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  285. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +17 -3
  286. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +15 -10
  287. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +1 -1
  288. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +24 -5
  289. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +17 -10
  290. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.d.ts +1 -1
  291. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.js +1 -1
  292. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  293. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  294. package/dist/components/retrieval/mind-map/mind-map-model.js +1 -0
  295. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +27 -4
  296. package/dist/components/retrieval/mind-map/mind-map.class.js +11 -7
  297. package/dist/components/retrieval/mind-map/mind-map.d.ts +1 -0
  298. package/dist/components/retrieval/mind-map/mind-map.js +1 -1
  299. package/dist/components/retrieval/mind-map/mind-map.styles.js +1 -1
  300. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +24 -2
  301. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +17 -3
  302. package/dist/components/retrieval/neighbor-list/neighbor-list.d.ts +1 -1
  303. package/dist/components/retrieval/neighbor-list/neighbor-list.js +1 -1
  304. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  305. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +8 -4
  306. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +11 -7
  307. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  308. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +12 -6
  309. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +30 -17
  310. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  311. package/dist/components/retrieval/retrieval-results/retrieval-results-model.js +1 -0
  312. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +46 -5
  313. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +31 -9
  314. package/dist/components/retrieval/retrieval-results/retrieval-results.d.ts +1 -1
  315. package/dist/components/retrieval/retrieval-results/retrieval-results.js +1 -1
  316. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +1 -1
  317. package/dist/components/utility/diff-view/diff-view.class.d.ts +16 -8
  318. package/dist/components/utility/diff-view/diff-view.class.js +3 -2
  319. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  320. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +31 -3
  321. package/dist/components/utility/json-viewer/json-viewer.class.js +13 -4
  322. package/dist/components/utility/json-viewer/json-viewer.d.ts +1 -0
  323. package/dist/components/utility/json-viewer/json-viewer.js +1 -1
  324. package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
  325. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +6 -4
  326. package/dist/components/utility/mention-popover/mention-popover.class.js +6 -5
  327. package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +34 -7
  328. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +9 -7
  329. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +28 -4
  330. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +12 -11
  331. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -1
  332. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +17 -16
  333. package/dist/components/viewers/geojson-view/geojson-viewer.d.ts +1 -1
  334. package/dist/components/viewers/geojson-view/geojson-viewer.js +1 -1
  335. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +31 -5
  336. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +11 -8
  337. package/dist/components/viewers/table-viewer-shared.js +19 -3
  338. package/dist/components/viewers/viewer-search-limits.js +1 -1
  339. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +35 -3
  340. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +20 -5
  341. package/dist/components/viewers/xml-viewer/xml-viewer.d.ts +1 -1
  342. package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
  343. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +1 -1
  344. package/dist/countries.js +1 -1
  345. package/dist/data-sources.d.ts +34 -0
  346. package/dist/data-sources.js +1 -0
  347. package/dist/events.d.ts +51 -7
  348. package/dist/framework-types.d.ts +1 -1
  349. package/dist/internal/accessibility-visibility.d.ts +4 -2
  350. package/dist/internal/accessibility-visibility.js +1 -1
  351. package/dist/internal/accessible-text-controller.js +1 -1
  352. package/dist/internal/anchor-target.js +2 -2
  353. package/dist/internal/catalog-picker.d.ts +1 -7
  354. package/dist/internal/catalog-picker.js +1 -1
  355. package/dist/internal/collection-snapshot.js +1 -1
  356. package/dist/internal/default-strings/agent-tools.generated.js +1 -1
  357. package/dist/internal/default-strings/charts.generated.js +1 -1
  358. package/dist/internal/default-strings/conversation.generated.js +1 -1
  359. package/dist/internal/default-strings/data.generated.js +1 -1
  360. package/dist/internal/default-strings/forms.generated.js +1 -1
  361. package/dist/internal/default-strings/layout.generated.js +1 -1
  362. package/dist/internal/default-strings/media.generated.js +1 -1
  363. package/dist/internal/default-strings/retrieval.generated.js +1 -1
  364. package/dist/internal/default-strings/shared.generated.js +1 -1
  365. package/dist/internal/default-strings/utility.generated.js +1 -1
  366. package/dist/internal/delimited-data.js +1 -1
  367. package/dist/internal/fixed-containing-block.js +1 -1
  368. package/dist/internal/flow-scene-envelope.js +1 -0
  369. package/dist/internal/graph-scene-controller.js +1 -0
  370. package/dist/internal/hierarchy-source-controller.js +1 -0
  371. package/dist/internal/hierarchy-source-view.js +29 -0
  372. package/dist/internal/hierarchy-source-view.styles.js +1 -0
  373. package/dist/internal/inherited-attribute-hub.d.ts +6 -0
  374. package/dist/internal/inherited-attribute-hub.js +1 -1
  375. package/dist/internal/intl-cache.js +1 -1
  376. package/dist/internal/keyed-index.js +1 -0
  377. package/dist/internal/localization-types.d.ts +1 -1
  378. package/dist/internal/localization.js +2 -2
  379. package/dist/internal/lyra-element.d.ts +2 -2
  380. package/dist/internal/lyra-element.js +3 -2
  381. package/dist/internal/native-modal-context.js +1 -1
  382. package/dist/internal/option-selection.js +1 -1
  383. package/dist/internal/package-metadata.js +1 -1
  384. package/dist/internal/positioner.js +1 -1
  385. package/dist/internal/resource-loader.d.ts +2 -0
  386. package/dist/internal/resource-loader.js +1 -1
  387. package/dist/internal/scoped-definitions.generated.js +1 -1
  388. package/dist/internal/search-haystack.js +1 -0
  389. package/dist/internal/selection-catalog.d.ts +5 -0
  390. package/dist/internal/selection-catalog.js +1 -1
  391. package/dist/internal/shiki-language-sources.js +1 -0
  392. package/dist/internal/source-page-controller.js +1 -0
  393. package/dist/internal/source-page-scope.js +1 -0
  394. package/dist/internal/source-request-controller.js +1 -0
  395. package/dist/internal/source-window-controller.js +1 -0
  396. package/dist/internal/spatial-source-controller.js +1 -0
  397. package/dist/internal/text-quote.d.ts +2 -6
  398. package/dist/internal/text-quote.js +1 -1
  399. package/dist/internal/theme-watcher.js +1 -1
  400. package/dist/internal/virtual-list-composition.js +1 -0
  401. package/dist/lyra.d.ts +1 -1
  402. package/dist/lyra.js +1 -1
  403. package/dist/testing/interaction-drivers.js +1 -1
  404. package/dist/testing/lyra-tag-event-map.js +1 -1
  405. package/dist/units.js +1 -1
  406. package/dist/utilities/data-preparation.d.ts +56 -0
  407. package/dist/utilities/data-preparation.js +1 -0
  408. package/dist/utilities/data-spatial.d.ts +26 -0
  409. package/dist/utilities/data-spatial.js +1 -0
  410. package/dist/utilities/index.d.ts +1 -1
  411. package/dist/utilities/index.js +1 -1
  412. package/llms/components/lr-activity-feed.md +7 -2
  413. package/llms/components/lr-agent-trace.md +49 -9
  414. package/llms/components/lr-agent-workspace.md +15 -8
  415. package/llms/components/lr-av-player.md +180 -10
  416. package/llms/components/lr-bar-chart.md +1 -1
  417. package/llms/components/lr-box-plot.md +8 -0
  418. package/llms/components/lr-bubble-chart.md +1 -1
  419. package/llms/components/lr-calendar.md +26 -3
  420. package/llms/components/lr-chart.md +310 -23
  421. package/llms/components/lr-chat-viewport.md +6 -0
  422. package/llms/components/lr-code-block-core.md +12 -7
  423. package/llms/components/lr-code-block.md +23 -9
  424. package/llms/components/lr-combobox.md +27 -15
  425. package/llms/components/lr-command-palette.md +16 -3
  426. package/llms/components/lr-country-picker.md +23 -6
  427. package/llms/components/lr-csv-viewer.md +95 -12
  428. package/llms/components/lr-currency-picker.md +23 -3
  429. package/llms/components/lr-data-grid.md +24 -6
  430. package/llms/components/lr-dataset-viewer.md +92 -11
  431. package/llms/components/lr-dialog.md +1 -1
  432. package/llms/components/lr-diff-view.md +19 -6
  433. package/llms/components/lr-document-library.md +60 -5
  434. package/llms/components/lr-doughnut-chart.md +1 -1
  435. package/llms/components/lr-embedding-explorer.md +89 -9
  436. package/llms/components/lr-emoji-picker.md +7 -2
  437. package/llms/components/lr-eval-dataset.md +56 -7
  438. package/llms/components/lr-eval-result.md +89 -4
  439. package/llms/components/lr-export-button.md +1 -1
  440. package/llms/components/lr-file-tree.md +60 -6
  441. package/llms/components/lr-flag.md +5 -2
  442. package/llms/components/lr-flow-canvas.md +152 -14
  443. package/llms/components/lr-flow-minimap.md +32 -4
  444. package/llms/components/lr-funnel.md +14 -0
  445. package/llms/components/lr-geojson-viewer.md +27 -10
  446. package/llms/components/lr-graph.md +43 -7
  447. package/llms/components/lr-heatmap.md +161 -5
  448. package/llms/components/lr-histogram.md +55 -9
  449. package/llms/components/lr-ingestion-queue.md +54 -3
  450. package/llms/components/lr-json-viewer.md +87 -7
  451. package/llms/components/lr-knowledge-base-admin.md +60 -4
  452. package/llms/components/lr-knowledge-base.md +121 -9
  453. package/llms/components/lr-knowledge-graph-explorer.md +106 -11
  454. package/llms/components/lr-lightbox.md +42 -6
  455. package/llms/components/lr-line-chart.md +28 -5
  456. package/llms/components/lr-lite-chart.md +96 -31
  457. package/llms/components/lr-locale-picker.md +6 -4
  458. package/llms/components/lr-map.md +67 -8
  459. package/llms/components/lr-markdown-core.md +10 -5
  460. package/llms/components/lr-markdown.md +23 -6
  461. package/llms/components/lr-mention-popover.md +11 -6
  462. package/llms/components/lr-mind-map.md +91 -10
  463. package/llms/components/lr-model-select.md +8 -4
  464. package/llms/components/lr-model-settings-panel.md +10 -2
  465. package/llms/components/lr-navigation-menu.md +1 -1
  466. package/llms/components/lr-neighbor-list.md +69 -2
  467. package/llms/components/lr-pie-chart.md +1 -1
  468. package/llms/components/lr-polar-area-chart.md +1 -1
  469. package/llms/components/lr-prompt-input.md +9 -2
  470. package/llms/components/lr-prompt-queue.md +11 -3
  471. package/llms/components/lr-radar-chart.md +1 -1
  472. package/llms/components/lr-rag-eval-dashboard.md +9 -2
  473. package/llms/components/lr-realtime-session.md +6 -2
  474. package/llms/components/lr-reorder-list.md +4 -0
  475. package/llms/components/lr-retrieval-compare.md +9 -4
  476. package/llms/components/lr-retrieval-results.md +104 -6
  477. package/llms/components/lr-scatter-chart.md +1 -1
  478. package/llms/components/lr-select.md +20 -10
  479. package/llms/components/lr-sequence-strip.md +92 -2
  480. package/llms/components/lr-span-waterfall.md +78 -8
  481. package/llms/components/lr-sparkline.md +42 -11
  482. package/llms/components/lr-spreadsheet-viewer.md +109 -14
  483. package/llms/components/lr-streaming-text-core.md +4 -2
  484. package/llms/components/lr-streaming-text.md +5 -1
  485. package/llms/components/lr-table.md +96 -115
  486. package/llms/components/lr-task-list.md +93 -9
  487. package/llms/components/lr-terminal.md +9 -0
  488. package/llms/components/lr-test-results.md +77 -3
  489. package/llms/components/lr-thread-list.md +86 -1
  490. package/llms/components/lr-time-zone-picker.md +8 -3
  491. package/llms/components/lr-timeline.md +5 -0
  492. package/llms/components/lr-token-input.md +7 -2
  493. package/llms/components/lr-tool-timeline.md +13 -4
  494. package/llms/components/lr-trace-tree.md +96 -10
  495. package/llms/components/lr-transcript-feed.md +9 -2
  496. package/llms/components/lr-tree.md +87 -15
  497. package/llms/components/lr-unit-picker.md +8 -3
  498. package/llms/components/lr-video-playlist.md +2 -0
  499. package/llms/components/lr-virtual-list.md +17 -8
  500. package/llms/components/lr-voice-picker.md +8 -3
  501. package/llms/components/lr-word-cloud.md +128 -12
  502. package/llms/components/lr-xml-viewer.md +106 -9
  503. package/llms/index.md +1 -1
  504. package/llms/peers.md +1 -1
  505. package/llms/shared/events-and-types.md +725 -264
  506. package/llms/shared/forms-and-accessibility.md +3 -17
  507. package/llms/shared/imports-and-registration.md +3 -17
  508. package/llms/shared/localization-and-rtl.md +0 -2
  509. package/llms/shared/styles-and-tokens.md +27 -36
  510. package/llms/shared/testing-and-utilities.md +4 -5
  511. package/llms/shared.md +770 -349
  512. package/llms.txt +1 -2
  513. package/locales.json +139 -139
  514. package/package.json +13 -4
  515. package/registrations.json +1 -1
  516. package/skills/compose-lyra-interfaces/SKILL.md +6 -8
  517. package/skills/lyra-ui/SKILL.md +20 -51
  518. package/skills/lyra-ui/commands/review.md +16 -33
  519. package/skills/lyra-ui/commands/update.md +6 -5
  520. package/skills/lyra-ui/online-api.md +15 -0
  521. package/skills/lyra-ui/reporting.md +2 -1
@@ -9,6 +9,6 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 17 parts, 39 custom properties — see `lr-line-chart.md`
12
+ - **Themeable via** 18 parts, 39 custom properties — see `lr-line-chart.md`
13
13
  - **Documented with** `lr-line-chart`: see [lr-line-chart.md](./lr-line-chart.md).
14
14
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 19 parts, 12 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 20 parts, 12 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -30,7 +30,10 @@ title, readonly color?, readonly data? }`; `date` accepts an ISO `YYYY-MM-DD` st
30
30
  milliseconds, or a valid `Date`, then normalizes to the displayed ISO day. Invalid date/title rows
31
31
  are omitted; `lr-event-select.detail.event` remains the original admitted object. `color` is
32
32
  sanitized before use as the marker background. The former ignored `start`/`end` fields are not
33
- part of the contract; use one event per displayed date
33
+ part of the contract; use one event per displayed date. Input retains the first 10,000 events
34
+ while preserving event identity. A localized `limit` part discloses omitted input in month and
35
+ agenda views; provide a smaller date range to include other events. Changed loss notices are
36
+ announced politely after mount
34
37
  - `value: string = ''` — the selected ISO date
35
38
  - `viewDate: string` (attribute `view-date`, defaults to the 1st of the current month) — the visible
36
39
  month; an unparseable value falls back to the current month
@@ -55,6 +58,25 @@ events render as `agenda-event` buttons in agenda view; either ceiling past that
55
58
  localized `event-limit`/`agenda-limit` "+N more" notice rather than mounting an unbounded number of
56
59
  buttons.
57
60
 
61
+ For a large event archive, let the host query the displayed month and replace `events` with a
62
+ bounded result. Listen for `lr-view-change.detail.viewDate` from the previous/next buttons and
63
+ out-of-grid keyboard moves. Assigning `viewDate` programmatically does not emit that event, so the
64
+ host must also call its loader for a programmatic jump. The host owns request cancellation and
65
+ obsolete-result checks: abort superseded month/page fetches and ignore results whose date window
66
+ or request generation is no longer current.
67
+
68
+ Keep each assigned window within the 10,000-event input bound and treat the four-per-day or
69
+ 500-entry agenda as previews when the selected period is dense. Show an explicit host total and
70
+ preview count for server-omitted events; native calendar overflow counts only admitted events.
71
+ For complete dense-event traversal, compose a configured `lr-table` with
72
+ `paginationMode = 'server'`, `pageSize`, `totalItems`, controlled one-based `page`, and the current
73
+ page's `rows`. Set `totalItems` to the full event count for the selected month or date. Handle
74
+ `lr-page-change.detail.page` by querying that page, then assigning `page` and `rows`; use stable
75
+ `rowKey` identities across pages.
76
+ `lr-row-activate.detail.row` identifies an event reached through the table, while
77
+ `lr-event-select.detail.event` identifies a calendar preview action. Complete traversal comes
78
+ from the paged table; the calendar remains a bounded month/day preview.
79
+
58
80
  **Keyboard:** the month grid is a fixed 6×7 matrix (leading/trailing days of adjacent months fill it
59
81
  out) with one roving tab stop — `focusedDate`, else `value`, else today, else the first rendered day.
60
82
  Arrows move by 1 day (Left/Right swapped under RTL) or 7, PageUp/PageDown by one month (clamping
@@ -72,7 +94,8 @@ month-navigation buttons; `previous-button` and `next-button` identify each dire
72
94
  `grid`, `week` (`display: contents`), `day`, `date`, `event` (a month-view marker), `event-limit`
73
95
  (localized "+N more" notice shown in a day cell whose events exceed the 4-event per-cell render
74
96
  ceiling), `agenda`, `agenda-event`, `agenda-limit` (localized "+N more" notice shown in agenda
75
- view when the visible month's events exceed the 500-event render ceiling), and `empty` (the agenda
97
+ view when the visible month's events exceed the 500-event render ceiling), `limit` (input-admission
98
+ notice), and `empty` (the agenda
76
99
  view's localized "no events" message).
77
100
 
78
101
  **Themeable custom properties:** `--lr-calendar-day-min-block-size` (default `var(--lr-size-6rem)`)
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [charts](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/charts.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `chart.js`, `chartjs-plugin-annotation`, `chartjs-plugin-datalabels`, `chartjs-plugin-zoom` — see `llms/peers.md`
12
- - **Themeable via** 17 parts, 39 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 18 parts, 39 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -32,6 +32,11 @@ Changing the data or calling `refreshTheme()` retries rendering, so the plot rec
32
32
  canvas capability becomes available.
33
33
 
34
34
  **Properties:**
35
+ - `maxRecords: number = 1000` (`max-records`) — rendered record budget, normalized to 2–1,000.
36
+ With `preparedData = null`, allocated chart width can reduce the rendered row count further;
37
+ the limit also applies to raw `config.data`. Prepared summaries instead undergo aggregate
38
+ admission, including gap and exact-point overlay capacity, without width-based resampling
39
+ (see below). The eight typed aliases and `lr-histogram` inherit this property.
35
40
  - `axes: LyraChartAxes = 'both'` — `'x' | 'y' | 'both' | 'none'`, controlling complete cartesian
36
41
  axes: labels, ticks, borders and grid lines. The `y` setting includes `y2`; invalid values use
37
42
  `both`. Radial charts ignore this setting. Use `grid` when only grid lines should disappear.
@@ -56,6 +61,10 @@ canvas capability becomes available.
56
61
  'radar' | 'polarArea' | 'bubble'` — every named default used by a typed `lr-*-chart` is
57
62
  already a first-class member, so `<lr-chart type="pie">` needs no subclass or cast to work;
58
63
  unknown runtime attribute/property values fall back to `bar` before reaching Chart.js
64
+ - `preparedData: LyraChartPreparedData | null = null` (property only) — a whole-source prepared
65
+ summary or indexed spatial source; `LyraChartPreparedData = LyraPreparedSeriesData |
66
+ LyraPreparedCategoryData | LyraSpatialChartSource`. Takes
67
+ precedence over `labels`, `datasets` and `config.data`; see the prepared-data contract below.
59
68
  - `description: string | null = null` — accessible chart description
60
69
  - `grid: 'x'|'y'|'both'|'none' = 'both'` — controls cartesian grid lines. On a radial chart, `x`
61
70
  controls angle lines and `y` controls concentric grid lines
@@ -168,7 +177,7 @@ canvas capability becomes available.
168
177
  Simplified pie/doughnut datasets with magnitudes above `Number.MAX_SAFE_INTEGER` are uniformly
169
178
  rescaled for finite canvas geometry. Lyra tooltips, data labels, legends, events and CSV retain
170
179
  original values; direct Chart.js callbacks see the rescaled peer data. Explicit `config.data`
171
- remains the unmodified full-fidelity escape hatch.
180
+ keeps its authored numeric values; the shared rendering sample still applies.
172
181
  - `legendPosition: LyraChartLegendPosition = 'top'` (attribute `legend-position`) — accepts the
173
182
  Chart.js `left|top|right|bottom|center|chartArea|{ [scaleId]: number }` positions plus logical
174
183
  `start`/`end`; the additive `auto` chooses right above 480px and bottom below that allocation
@@ -269,7 +278,8 @@ canvas capability becomes available.
269
278
  compatible with Chart.js's `ChartConfiguration`, deep-merged over the generated
270
279
  config; any nested key wins without clobbering sibling generated keys. This is the raw Chart.js
271
280
  escape hatch, so a caller-supplied `config.type` is passed through rather than normalized.
272
- Explicit `config.data.labels` and `config.data.datasets` arrays are authoritative independently:
281
+ With `preparedData = null`, explicit `config.data.labels` and `config.data.datasets` arrays are
282
+ authoritative independently:
273
283
  an omitted member still comes from the simplified `labels`/`datasets` properties, while an
274
284
  explicit array replaces that generated member rather than concatenating with it. This effective
275
285
  model drives canvas rendering, `appendData()`, export, the accessible name/summary, keyboard
@@ -279,7 +289,7 @@ canvas capability becomes available.
279
289
  `options.elements.bar`, or root `options` are left for Chart.js to resolve, including scriptable,
280
290
  indexable and `barBorderWidth`/`barBorderRadius` forms. Unset values retain Lyra's `--border-width`
281
291
  and `--border-radius` defaults; removing config restores those defaults. Raw `config.data.datasets`
282
- remain authoritative. Dense charts with transparent borders should set
292
+ remain authoritative on that legacy route. Dense charts with transparent borders should set
283
293
  `config.options.datasets.bar.borderWidth = 0` (or the public `--border-width: 0` CSS hook):
284
294
  a one-pixel transparent stroke can consume the fill of a bar narrower than two pixels.
285
295
  As a declarative alternative, place one `<script type="application/json">` in the default slot;
@@ -307,12 +317,244 @@ canvas capability becomes available.
307
317
  the live Chart.js instance; absent before load and after disconnect
308
318
  - `appendData(label, values, maxPoints?)` — appends one aligned numeric category and keeps a
309
319
  rolling window of the newest `maxPoints` (at most 10,000, also the default: `labels` and each
310
- series keep only the first 10,000 entries of a longer assigned array, with a development-mode
311
- warning). Each labels/datasets member is written back to the surface
320
+ series keep only the first 10,000 entries of a longer assigned array, with a localized `limit`
321
+ notice). Existing canonical points are reused without re-admission. Each labels/datasets member is written back to the surface
312
322
  that owns it: an explicitly overridden `config.data` member stays in `config`, while an omitted
313
323
  member continues through the simplified property and retains its generated Chart.js styling.
314
324
  Point-based scatter/bubble series are left unchanged because appending their x/y/r coordinates
315
- needs a richer caller-defined contract.
325
+ needs a richer caller-defined contract. `appendData()` is inactive while `preparedData` is set.
326
+
327
+ **Prepared whole-source data:** The full chart and its eight typed subclasses accept prepared
328
+ series/category summaries or a spatial source. Compatibility follows the effective type (`config.type` when supplied,
329
+ otherwise writable `type`), including after changing a typed tag's default:
330
+
331
+ | Effective type | Accepted prepared kind |
332
+ | --- | --- |
333
+ | `line` | `series` |
334
+ | `bar` | `series` or `categories` |
335
+ | `pie`, `doughnut`, `radar`, `polarArea` | `categories` |
336
+ | `scatter`, `bubble` | `spatial`, with linear scales; see the spatial contract below |
337
+
338
+ The following summary admission rules describe `series` and `categories`. A series descriptor supplies `revision`, series IDs/labels, whole-source `counts`
339
+ (`sourceCount`, `validCount`, `invalidCount`), full `xDomain`/`yDomain`, ordered `samples`, and an
340
+ exact `getPoint(ref, { signal })` reader. Samples carry `x`, `y`, original `sourceIndex` and
341
+ `breakBefore`; domains may be `null` for an all-invalid series. A category descriptor supplies
342
+ `revision`, whole-source `counts`, category IDs/labels, `categoryCounts`, aligned numeric series
343
+ values, and `aggregation: 'count' | 'sum' | 'mean' | 'host-defined'`. Category counts must conserve
344
+ the full valid observation count. Rendering and export do not enumerate or read the original
345
+ source. The generated accessible table and localized summary disclose that displayed values are
346
+ a summary and report whole-source valid/invalid counts. Series scales retain the supplied whole
347
+ domains; endpoint trend remains based on the original overview after an interior point reveal.
348
+
349
+ Admission copies the bounded summary and validates own data fields, unique IDs, safe counts,
350
+ finite domains/coordinates, sample order and gap flags. Sparse or accessor-backed descriptor
351
+ arrays are invalid; their accessors are not invoked. Each series/category collection admits at
352
+ most 1,000 entries before aggregate limits apply. IDs are limited to 256 UTF-16 units, labels to
353
+ 1,024, and their combined metadata to 65,536. Malformed, incompatible or oversized summaries show
354
+ a localized visible error rather than falling back to legacy input or silently resampling.
355
+
356
+ `maxRecords` (normalized to 2–1,000) is a global peer-entry capacity across all series, not a
357
+ per-series sample target. Every line-gap separator consumes an entry. Series input requires
358
+ `maxRecords >= 5` and reserves two additional entries for an isolating separator and one exact
359
+ point: four overview points without gaps need at least six entries. Semantic samples including
360
+ the selected overlay stay within 9,000; rectangular generated-table data cells stay within 1,000,
361
+ including the overlay reservation across every series. Category values also share the global
362
+ peer-entry and rectangular-cell limits. An admitted descriptor reaches the plot and table without
363
+ a second sampling stage; line gaps stay disconnected.
364
+
365
+ The host owns the descriptor and its readers. After changing a host-authored descriptor or its
366
+ revision, assign `preparedData` again (the same identity is accepted) or call the chart's unnamed
367
+ `requestUpdate()`. The chart revalidates and captures a fresh bounded snapshot; unrelated
368
+ presentation changes reuse it. Setting `preparedData = null` cancels source work and restores the
369
+ current legacy inputs. Source replacement, explicit refresh, disconnect and adoption invalidate
370
+ pending readers; late replies cannot replace the current view. The chart retains one bounded
371
+ overview and one displayed refinement/overlay, while reader closures may retain host-owned source
372
+ data. These bounds do not release data retained by the host.
373
+
374
+ **Complete spatial scatter/bubble source:** supply `preparedData: LyraSpatialChartSource` to
375
+ `lr-chart`, `lr-scatter-chart` or `lr-bubble-chart` with an effective scatter/bubble type and
376
+ `scaleType: 'linear'` (the default). Other effective types, logarithmic scales and
377
+ `lr-lite-chart` reject this kind visibly; invalid spatial input never restores raw data silently.
378
+ `labels`, raw `datasets` and `config.data` are inactive. Effective `config.type` still has its
379
+ established precedence over writable `type`. Clearing `preparedData` restores the current raw
380
+ route. Existing series/category preparation and histogram distribution contracts are separate.
381
+
382
+ ```ts
383
+ import type { LyraChartPreparedData } from
384
+ "@aceshooting/lyra-ui/components/charts/chart/chart.class.js";
385
+ import type {
386
+ LyraSpatialChartSource, LyraSpatialChartSeries, LyraSpatialChartPoint,
387
+ LyraSpatialBounds, LyraSpatialBin, LyraChartSpatialPointSelectDetail,
388
+ LyraSpatialBinSelectDetail,
389
+ } from "@aceshooting/lyra-ui/utilities/data-spatial.js";
390
+ ```
391
+
392
+ `LyraSpatialChartSource` extends `LyraSpatialPointSource<LyraSpatialChartPoint>` with
393
+ `kind: 'spatial'`, readonly `series`, and optional `radiusDomain`. It supplies immutable `revision`
394
+ (nonempty string at most 256 UTF-16 units or finite number), safe nonnegative global `count`, and
395
+ complete `bounds: { minX, maxX, minY, maxY } | null`; bounds are finite/ordered and null exactly for
396
+ an empty source. Methods/metadata and returned payload fields must be own data properties:
397
+ `query({ signal, bounds, maxPoints, maxBins })` returns `{ points, bins, matchedCount }`, and
398
+ `getPoint(id, { signal })` returns an exact original point or `null`. Both accept synchronous or
399
+ PromiseLike results. Indexing, aggregation and provider backing storage remain host-owned.
400
+
401
+ A `LyraSpatialChartPoint` is `{ id, sourceIndex, seriesId, x, y, radius?, label? }`. ID is globally
402
+ unique across series, nonblank and at most 256 UTF-16 units. Original `sourceIndex` is a safe
403
+ zero-based index below `count`; x/y are finite within global bounds. Required `seriesId` names one
404
+ of 1–1,000 declared `LyraSpatialChartSeries { id, label, color? }` records. Series IDs are unique,
405
+ nonblank and at most 256 units, labels at most 1,024, optional scalar colors at most 256, and all
406
+ series metadata together at most 65,536. Point labels are at most 1,024 units. Every declared
407
+ series gets a stable dataset/legend position, including empty series; no per-series population is
408
+ inferred from representatives. Source colors/labels govern these datasets; missing colors use the
409
+ existing series palette. Bounded duplicate/conflicting records reject, while global uniqueness
410
+ and complete-source consistency remain provider obligations.
411
+
412
+ A `LyraSpatialBin` is `{ bounds, count }` with positive safe count. All bin counts sum exactly to
413
+ `matchedCount <= source.count`, accounting for every matching observation across all series.
414
+ Representatives are point overlays of that same population and never increase the total. Bins
415
+ can leave spatial holes but cannot overlap interiors; normal-axis ownership is half-open with
416
+ inclusive final viewport edges. Representatives must belong to a bin and cannot outnumber its
417
+ population. Empty/collapsed global axes retain their exact semantics; no artificial domain extent
418
+ is added. The summary exposes global count/bounds, current viewport count/bounds and, for bubbles,
419
+ the complete radius domain. It distinguishes complete all-series density from bounded overlays.
420
+
421
+ Bubble sources require an own `radiusDomain`: finite nonnegative `{ min, max }` for a nonempty
422
+ source, exactly `null` for an empty source. Every bubble point requires finite nonnegative
423
+ `radius` within that complete domain; missing radius rejects instead of borrowing a raw-point
424
+ default. Scatter permits absent/null radius metadata and absent radius; a supplied radius requires
425
+ a valid containing domain. Scatter still paints ordinary markers. Semantic radius, including very
426
+ large finite values, remains unchanged in events/table/export; only bubble paint radius is bounded
427
+ to finite plot geometry. Density count controls its separate fill, never bubble radius.
428
+
429
+ `viewport: LyraSpatialBounds | null = null` (property only) uses global bounds when null. An explicit
430
+ viewport must lie within them with positive span on each noncollapsed global axis; collapsed axes
431
+ stay exactly collapsed. `selectedPointId: string = ''` (property only) controls one exact overlay,
432
+ independently of imperative reveal. For normalized `M = maxRecords` (default/maximum 1,000), spatial
433
+ mode requires `M >= 3`. Two exact slots fit inside M; the remaining `A = M - 2` permits
434
+ `ceil(A / 2)` bins and `A - ceil(A / 2)` representatives: default 499 + 499 + two exact slots.
435
+ Unused quotas are not borrowed. Exact selected/revealed points deduplicate against representatives
436
+ and each other. The source is never width-resampled after admission. Per-query metadata is at most
437
+ 997,000 UTF-16 units; series metadata, current/pending responses, exact records and bounded intent
438
+ strings share the existing 2,000,000-unit envelope. Query and exact lookup each allow one physically
439
+ unsettled call plus only the latest desired intent; ignored abort holds its permit until settlement.
440
+ No full point array, per-cell occupancy map or all-ID index is retained.
441
+
442
+ Source geometry uses private normalized linear peer axes to handle extreme finite coordinates
443
+ without overflow; displayed ticks, formatters, semantic data, table and events retain original
444
+ units. A collapsed axis paints at its center with its actual coordinate as the tick. Source data,
445
+ axes, linear type and x/y orientation cannot be overridden by geometry-changing raw config.
446
+ Existing `zoomable` x-axis wheel/drag/pinch interaction updates semantic x viewport bounds and
447
+ queries that viewport; y stays current. `resetZoom()` sets viewport null. Programmatic viewport
448
+ supports both axes; no pan interface is added.
449
+
450
+ `hiddenDatasets`/legend toggles hide declared-series point overlays only. Complete all-series density
451
+ and its counts remain unchanged, and the summary/legend explains this distinction. Hidden or
452
+ outside-viewport exact records can stay retained without drawing. The bounded table/CSV include
453
+ admitted records from hidden series; spoken table text marks those point series hidden.
454
+ `revealSourcePoint(id: string): Promise<boolean>` directly resolves an exact original ID, minimally
455
+ pans an explicit viewport while preserving its representable size, then makes that point keyboard
456
+ current and focuses the canvas. Null viewport stays global. It does not select, change controlled
457
+ visibility or emit activation. Hidden-series, missing, invalid, disconnected, canceled, obsolete or
458
+ unrepresentable-pan targets resolve `false`. The existing `LyraSeriesPointRef` overload remains for
459
+ ordered-series data and returns false for spatial input.
460
+
461
+ **Events:** Canvas keyboard navigation visits visible points, then density bins, using arrows/Home/End and
462
+ RTL-aware horizontal movement; Enter/Space activates the current bounded item. Point hits win over
463
+ density underneath. Exact/representative point activation emits noncancelable immutable
464
+ `lr-spatial-point-select` with `LyraChartSpatialPointSelectDetail`, shaped as `{ revision, point }`, preserving
465
+ original ID/sourceIndex/series/x/y/radius/label. Only admitted
466
+ representatives additionally emit `lr-point-activate`/`lr-datum-activate` with declared-series index
467
+ and current plotted point offset. Exact-only overlays do not invent plotted-record events.
468
+ Bin activation emits noncancelable immutable `lr-spatial-bin-select` with
469
+ `LyraSpatialBinSelectDetail { revision, bounds, count }`; bins never synthesize point events. `selectedPointId` stays controlled and programmatic writes are silent.
470
+
471
+ The generated long-form table uses one data cell per distinct admitted point or bin, plus its row
472
+ header; bins + points + exact overlays stay within M and the existing 1,000-cell bound. Point text
473
+ includes original source position/coordinates/radius; bin text includes count and bounds. Existing
474
+ data-table disclosure, fallback and slot behavior apply. Spatial `exportData('csv')` synchronously
475
+ exports only this bounded admitted snapshot, with header
476
+ `kind,seriesId,seriesLabel,id,sourceIndex,label,x,y,radius,minX,maxX,minY,maxY,count`.
477
+ Point rows leave bin fields blank; bin rows leave point fields blank. Hidden-series records remain
478
+ included. Numeric precision stays unlocalized by default; existing export formatters receive
479
+ original values and source index/label metadata for points, and strings remain formula-safe. No provider reads or full raw-source CSV is
480
+ implied. PNG follows the current rendered plot.
481
+
482
+ Same-reference `preparedData` assignment or keyless `requestUpdate()` refreshes the immutable
483
+ source; named presentation changes reuse accepted results. Replacement, type/budget/viewport
484
+ changes and lifecycle cancellation revoke obsolete requests/actions/reveals. Disconnect/adoption
485
+ clear ownership and reconnect uses current input. Provider closures may retain their own storage.
486
+ Appending remains inactive while preparedData is supplied.
487
+
488
+ **Exported spatial declarations:**
489
+
490
+ Inherited fields are repeated below to show each complete effective contract.
491
+
492
+ `LyraSpatialBounds {
493
+ readonly minX: number;
494
+ readonly maxX: number;
495
+ readonly minY: number;
496
+ readonly maxY: number;
497
+ }`
498
+
499
+ `LyraSpatialPoint {
500
+ readonly id: string;
501
+ readonly sourceIndex: number;
502
+ readonly x: number;
503
+ readonly y: number;
504
+ }`
505
+
506
+ `LyraSpatialBin {
507
+ readonly bounds: LyraSpatialBounds;
508
+ readonly count: number;
509
+ }`
510
+
511
+ `LyraSpatialQuery<T extends LyraSpatialPoint> {
512
+ readonly points: readonly T[];
513
+ readonly bins: readonly LyraSpatialBin[];
514
+ readonly matchedCount: number;
515
+ }`
516
+
517
+ `LyraSpatialPointSource<T extends LyraSpatialPoint> {
518
+ readonly revision: LyraSourceRevision;
519
+ readonly count: number;
520
+ readonly bounds: LyraSpatialBounds | null;
521
+ query(request: LyraSourceRequest & {
522
+ readonly bounds: LyraSpatialBounds;
523
+ readonly maxPoints: number;
524
+ readonly maxBins: number;
525
+ }): LyraSourceValue<LyraSpatialQuery<T>>;
526
+ getPoint(id: string, request: LyraSourceRequest): LyraSourceValue<T | null>;
527
+ }`
528
+
529
+ `LyraSpatialChartPoint extends LyraSpatialPoint {
530
+ readonly seriesId: string;
531
+ readonly radius?: number;
532
+ readonly label?: string;
533
+ readonly id: string;
534
+ readonly sourceIndex: number;
535
+ readonly x: number;
536
+ readonly y: number;
537
+ }`
538
+
539
+ `LyraSpatialChartSource extends LyraSpatialPointSource<LyraSpatialChartPoint> {
540
+ readonly kind: 'spatial';
541
+ readonly series: readonly LyraSpatialChartSeries[];
542
+ readonly radiusDomain?: LyraNumericDomain | null;
543
+ readonly revision: LyraSourceRevision;
544
+ readonly count: number;
545
+ readonly bounds: LyraSpatialBounds | null;
546
+ query(request: LyraSourceRequest & {
547
+ readonly bounds: LyraSpatialBounds;
548
+ readonly maxPoints: number;
549
+ readonly maxBins: number;
550
+ }): LyraSourceValue<LyraSpatialQuery<LyraSpatialChartPoint>>;
551
+ getPoint(id: string, request: LyraSourceRequest): LyraSourceValue<LyraSpatialChartPoint | null>;
552
+ }`
553
+
554
+ `LyraChartSpatialPointSelectDetail {
555
+ readonly revision: LyraSourceRevision;
556
+ readonly point: LyraSpatialChartPoint;
557
+ }`
316
558
 
317
559
  **Methods:** `renderChart()` requests a connected/visibility-gated render or incremental update.
318
560
  `resetZoom()` resets any active zoom/pan to the original view. `refreshTheme()` forces
@@ -325,7 +567,29 @@ when a DOM legend is present its computed swatch colors are refreshed too.
325
567
  `exportData('csv' | 'png')` returns a spreadsheet-safe CSV snapshot or the current PNG data URL
326
568
  when Chart.js is loaded. Numeric datasets retain the compact one-column-per-series CSV shape.
327
569
  Point datasets expand into `<series> x`, `<series> y`, and, when present, `<series> r` and
328
- `<series> label` columns so radius and per-point labels are not flattened away.
570
+ `<series> label` columns so radius and per-point labels are not flattened away. CSV keeps its
571
+ existing leading `label` column and series-column schema outside spatial mode. With nonspatial
572
+ prepared data it synchronously
573
+ exports only the current displayed bounded summary, refinement or exact overlay: series use x/y
574
+ columns and categories use numeric columns. It does not fetch full-source values, call a reader,
575
+ or add revision/source-ID columns.
576
+
577
+ `revealSourcePoint(ref: LyraSeriesPointRef): Promise<boolean>` resolves one original series
578
+ position, where `LyraSeriesPointRef { readonly seriesId: string; readonly sourceIndex: number }`.
579
+ `sourceIndex` is the original zero-based position, never a plotted offset. The chart calls
580
+ `getPoint(ref, { signal })` directly without scanning the source; the `prepareLyraSeriesData`
581
+ helper's reader performs one exact `[sourceIndex, 1]` read. A host may additionally supply
582
+ `queryRange({ seriesId, startIndex, endIndex, maxPoints, signal })` for a bounded original-index
583
+ neighborhood, with exclusive `endIndex`. Its allowance accounts for peer gaps, the overlay and
584
+ rectangular table expansion; returned indices, coordinates, order and capacity are validated. The
585
+ helper does not invent this optional capability. A revealed point is isolated from omitted path
586
+ segments and preserves full counts/domains. The promise resolves `false` for disconnected,
587
+ incompatible, missing, invalid, canceled or obsolete results, including readers that ignore abort.
588
+ Calling this method alone emits no activation event.
589
+
590
+ For ordered-series data, zoom and pan remain summary-only. They never infer a source-index range from an x-axis interval or
591
+ call `queryRange` automatically, even when it is supplied; refinement is requested only by an
592
+ explicit `revealSourcePoint()` call.
329
593
 
330
594
  **The categorical series ramp.** Eight tokens, `--lr-color-chart-1` … `--lr-color-chart-8`, with a
331
595
  separate set of values for light and dark mode. A series that sets no `color` of its own is assigned
@@ -412,9 +676,27 @@ Also emitted: `lr-legend-visibility-change-request` (cancelable proposal), and
412
676
  `{ datasetIndex: number, visible: boolean, hiddenDatasets: readonly number[] }`; the latter is the
413
677
  complete, sorted, valid next snapshot. Call `preventDefault()` on the proposal to veto the toggle;
414
678
  then no property change or commit event occurs.
415
- Category toggles use a separate pair, `lr-datum-visibility-change-request` (cancelable proposal) and
416
- `lr-datum-visibility-change` (accepted commit), carrying
417
- `{ index: number, visible: boolean, hiddenDatums: readonly number[] }`. Both details and their
679
+ Prepared datum activation additionally emits `lr-source-point-select` for series or
680
+ `lr-source-category-select` for categories. Their immutable details carry the committed original
681
+ revision and series/category identity, rather than a plotted offset:
682
+
683
+ - `LyraChartSourcePointSelectDetail { readonly revision: LyraSourceRevision; readonly seriesId:
684
+ string; readonly sourceIndex: number; readonly point: LyraSeriesObservation }`, where `point`
685
+ is a frozen coordinate snapshot with `readonly x: number` and `readonly y: number | null`.
686
+ - `LyraChartSourceCategorySelectDetail { readonly revision: LyraSourceRevision; readonly seriesId:
687
+ string; readonly categoryId: string; readonly value: number; readonly observationCount: number }`.
688
+
689
+ Existing `lr-point-activate` and `lr-datum-activate` still accompany activation and retain their
690
+ plotted-index meanings. While replacement/refinement is pending, actions on the committed visible
691
+ view retain its revision; obsolete callbacks cannot activate replacement data. The alias
692
+ `LyraChartPreparedData` and both source-event interfaces are exported from the chart component
693
+ entry and package root; the component entry also re-exports `LyraPreparedSeriesData`,
694
+ `LyraPreparedCategoryData` and `LyraSeriesPointRef`.
695
+
696
+ **Events:** Category toggles use a separate pair, `lr-datum-visibility-change-request` (cancelable proposal) and
697
+ `lr-datum-visibility-change` (accepted noncancelable commit), carrying
698
+ `LyraChartDatumVisibilityChangeDetail { index: number, visible: boolean, hiddenDatums: readonly number[] }`.
699
+ Both details and their
418
700
  complete, sorted index snapshots are frozen. `index` is the source category index, including when
419
701
  the displayed data is sampled; it applies across all rings. Programmatic assignments emit neither
420
702
  pair. `preventDefault()` leaves both controlled state and the chart unchanged.
@@ -435,17 +717,21 @@ pair. `preventDefault()` leaves both controlled state and the chart unchanged.
435
717
  alternative; `center` —
436
718
  optional overlay content positioned at the chart area's center, useful for doughnut and pie totals.
437
719
 
438
- **Bounded rendering and data alternative:** simplified `labels`/`datasets` canvas rendering, the
720
+ **Bounded rendering and data alternative (with `preparedData = null`):** simplified and raw
721
+ `config.data` canvas rendering, the
439
722
  DOM legend, generated table, keyboard-operable datum model, generated point-details in the summary,
440
- and automatic canvas name process at most 1,000 category×series records. When sampling is necessary,
441
- every series stays plotted and listed in the legend; only categories are thinned to the first,
442
- last and evenly spaced entries (series are thinned only beyond 500); a localized `data-truncation` notice
443
- is shown and announced. The sample is evenly spaced, not extreme-preserving: an isolated spike
444
- between sampled categories is not drawn, so pre-aggregate (for example a minimum and maximum per
445
- bucket) when every spike must stay visible. Supplying `slot="data-table"` suppresses the generated detailed sample and
446
- changes the notice to say only the plot is sampled, so use that escape hatch when the complete data set needs pagination, virtualization, or
447
- another application-owned presentation. Explicit `config.data` is the deliberate full-fidelity
448
- Chart.js escape hatch and is not rewritten by the simplified-surface sampler.
723
+ and automatic canvas name share a sample bounded by `maxRecords` and the allocated width. Numeric
724
+ sampling keeps endpoints and bucket extrema, plus representative gaps when the budget permits;
725
+ canvas, keyboard datums and accessible sampled rows share source indexes. Per-record styles retain
726
+ their source-index meaning. A localized `data-truncation` notice is shown and announced. A bounded
727
+ sample cannot preserve every local extremum; pre-aggregate when every spike must remain represented.
728
+ Supplying `slot="data-table"` suppresses the generated detailed sample and changes the notice to
729
+ say only the plot is sampled. Use that slot for a complete, paginated or virtualized presentation.
730
+ Export retains the full admitted semantic dataset. Input admission is separate: at most the first
731
+ 10,000 entries of each input collection are retained, and a localized `limit` notice discloses
732
+ omitted input. Hidden streamed tables refresh during idle, with a 250ms timeout; visible tables,
733
+ including canvas-failure fallbacks, refresh immediately. Explicit content refreshes invalidate any
734
+ pending streamed snapshot.
449
735
 
450
736
  **CSS parts:** `base`, `plot` (the fixed-height canvas/overlay region), `canvas`,
451
737
  `sync-crosshair` (decorative category line during an admitted synchronized interaction; the native
@@ -454,7 +740,7 @@ wrapping DOM legend), `legend-item` (a dataset/category visibility button), `leg
454
740
  (added while the dataset/category is hidden), `legend-swatch`,
455
741
  `reset-zoom-button`, `description`, `notices` (wrapper for nonfatal feature warnings and
456
742
  bounded-alternative truncation notices), `data-table`, `data-table-toggle` (the `dataTableToggle` disclosure button), `data-truncation` (the bounded-alternative
457
- notice), `feature-warning` (a nonfatal missing optional-feature warning), `center` (the
743
+ notice), `limit` (input-admission notice), `feature-warning` (a nonfatal missing optional-feature warning), `center` (the
458
744
  chart-area-centered wrapper for the `center` slot), `error` (neutral visible message rendered in
459
745
  place of `canvas` when the optional `chart.js` peer dependency fails to load; the failure transition
460
746
  is announced through the shared document-level light-DOM assertive sink)
@@ -611,7 +897,8 @@ announced. In particular, unavailable data labels do not remove generated table
611
897
  `stacked`, `stackedAxes`, any `without*` control, `dataLabels`, `stackTotals`, `config`, the parsed
612
898
  slotted config, `zoomable`, `locale`, `strings`, or the internal loading state actually changed in
613
899
  that update (so an
614
- unrelated property/state update, or a bare `requestUpdate()`, draws nothing). Resize callbacks
900
+ unrelated property/state update draws nothing; an unnamed `requestUpdate()` also refreshes
901
+ prepared input when set). Resize callbacks
615
902
  ignore unchanged inline sizes and coalesce into one animation-frame task; a responsive legend
616
903
  position change and its reactive update share that same single redraw. `refreshTheme()`, resize,
617
904
  optional-plugin completion, and histogram data changes all use the same connected/visible gate.
@@ -22,6 +22,12 @@ children (typically `lr-chat-message`s — _slotted mode_), or exactly one `lr-v
22
22
  (_virtual mode_, detected by its `scrollToIndex()`/`scrollContainer` API, so custom prefixes and
23
23
  other realms work). In virtual mode this component defers all scrolling to the slotted list's own
24
24
  `scrollToIndex()` and follows its content extent (`items` or `source`) as rows are appended or grow.
25
+ The viewport owns no message array. A slotted virtual-list's `items` binding retains its first
26
+ 10,000 identities; provide a bounded newest chronological window or an indexed `source` to expose
27
+ a larger or latest stream.
28
+ Logical count changes update following and unread counts even after the virtual list reaches
29
+ its capped native scroll extent. Reconnecting refreshes the unread count, while growth preserves
30
+ an explicitly released follow state.
25
31
  Follow/release state machine: while `follow` is engaged, content growth re-scrolls to the end;
26
32
  release happens only on a user-intent gesture (wheel, touchmove, scrollbar-drag, or
27
33
  PageUp/ArrowUp/Home/Shift+Space while the log region has focus) that leaves the
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [conversation](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/conversation.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `shiki` — see `llms/peers.md`
12
- - **Themeable via** 15 parts, 9 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 16 parts, 9 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -17,12 +17,13 @@
17
17
  ## `lr-code-block-core`
18
18
 
19
19
  A build-lean sibling of `<lr-code-block>` above, for a consumer whose `languages` map already
20
- covers every language it will ever render. Where `<lr-code-block>` unconditionally calls
20
+ covers every language it will ever render. Where `<lr-code-block>` can call
21
21
  `loadShikiHighlighter()` — the default ~200-language dynamic-import table loader, whose bundled
22
22
  lookup table a bundler can't statically narrow away even when a consumer never actually uses it —
23
23
  this component's own module never imports or calls that function at all. It only ever calls
24
24
  `loadShikiHighlighterCore(languages)` (shiki's "fine-grained bundle" recipe: `createHighlighterCore()`
25
- plus an explicit oniguruma engine, seeded with _only_ the grammars in `languages`), so a consumer
25
+ plus an explicit oniguruma engine, seeded with the resolved grammars in `languages`; a lazy grammar
26
+ is loaded only when requested), so a consumer
26
27
  importing this entry point instead of `code-block.js` gets a build genuinely free of shiki's full
27
28
  language table.
28
29
 
@@ -42,7 +43,10 @@ same as `<lr-code-block>`'s own plain-text fallback. Everything else — `code`/
42
43
  `filename`/`withoutCopyButton`/`collapsible`/`collapsed`/`maxHeight`, the copy button, the collapse header
43
44
  toggle, the loading-skeleton behavior while the fine-grained highlighter resolves — matches
44
45
  `<lr-code-block>` exactly, including its CSS parts, themeable custom properties, and stylesheet
45
- (this component reuses `code-block.styles.ts` directly).
46
+ (this component reuses `code-block.styles.ts` directly). Its inclusive syntax-highlighting ceiling
47
+ of 8,192 UTF-16 code units also matches: larger source stays fully readable as plain text with a
48
+ localized `limit` notice when `language` is set, without a loading skeleton. Highlight changes
49
+ patch existing lines without retokenizing, and gutter navigation reuses the source lines.
46
50
 
47
51
  **Properties:**
48
52
 
@@ -76,10 +80,11 @@ toggle, the loading-skeleton behavior while the fine-grained highlighter resolve
76
80
  entry, if any, currently treated as active (`data-active` on its lines).
77
81
  - `anchorKinds: LyraAnchor['kind'][] = ['line-range']` — readonly, for the shared anchor-target
78
82
  contract, identical to `<lr-code-block>`.
79
- - `languages: Record<string, ShikiLanguageSource> = {}` (attribute: false) — grammar definitions this
83
+ - `languages: Readonly<Record<string, ShikiLanguageSource>> = {}` (attribute: false) — grammar definitions this
80
84
  instance can highlight, e.g. `{ json: jsonGrammar }` (import from `shiki/langs/<name>.mjs`), or a
81
85
  lazy loader per key, e.g. `{ bash: () => import('@shikijs/langs/bash') }` — called at most once
82
- per key, memoized, the first time a fenced block actually requests that language. Empty
86
+ per highlighter/key pair, memoized, the first time this code block requests that language;
87
+ unused loaders do not run. Empty
83
88
  (the default) never highlights at all — every `language` renders the plain-text fallback, and so
84
89
  does a key whose lazy loader rejects.
85
90
  If `languages` changes while highlighting is loading, only results for the current map can update
@@ -105,7 +110,7 @@ body ended; `anchor` is a `line-range` anchor covering the selected lines).
105
110
  **Slots:** `header-actions` — identical to `<lr-code-block>`'s own slot.
106
111
 
107
112
  **CSS parts:** `base`, `header`, `filename`, `language`, `copy-button`, `copy-button-text`,
108
- `copy-button-icon`, `copy-button-control`, `header-actions`, `toggle`, `body`, `pre`, `code`, `line-highlight`, `line-button` —
113
+ `copy-button-icon`, `copy-button-control`, `header-actions`, `toggle`, `body`, `pre`, `code`, `line-highlight`, `line-button`, `limit` —
109
114
  identical set to `<lr-code-block>`.
110
115
 
111
116
  **Themeable custom properties:** identical to `<lr-code-block>` — `--lr-code-block-max-height`
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [conversation](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/conversation.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `shiki` — see `llms/peers.md`
12
- - **Themeable via** 15 parts, 9 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 16 parts, 9 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -39,6 +39,12 @@ resumes normal rendering. Highlighted gutter labels and locale-formatted line nu
39
39
  `.strings` and inherited or explicit locale changes. Unrelated updates retain the existing
40
40
  highlighted markup.
41
41
 
42
+ Syntax highlighting accepts source up to 8,192 UTF-16 code units, inclusive. Larger source remains
43
+ fully readable as plain text; when `language` is set, a localized `[part="limit"]` notice explains
44
+ the fallback, and no loading skeleton appears. Changing `highlightLines`, `highlights`, or
45
+ `activeHighlightId` patches the existing line state without tokenizing the source again. Moving
46
+ through an activatable gutter reuses the source lines and updates the previous and next tab stops.
47
+
42
48
  **Properties:**
43
49
 
44
50
  - `code: string = ''` — the raw source text
@@ -75,21 +81,29 @@ highlighted markup.
75
81
  entry, if any, currently treated as active (`data-active` on its lines).
76
82
  - `anchorKinds: LyraAnchor['kind'][] = ['line-range']` — readonly, for the shared anchor-target
77
83
  contract.
78
- - `languages?: Record<string, ShikiLanguageInput>` (attribute: false) — a map of language id to an
79
- already-imported shiki grammar module (e.g. `{ bash: bashGrammar }` from a module-scope
80
- `import bash from 'shiki/langs/bash.mjs'`). When `language` matches a key here, highlighting is
81
- seeded from exactly that pre-supplied grammar via a fine-grained `createHighlighterCore()`
84
+ - `languages?: Readonly<Record<string, ShikiLanguageInput>>` (attribute: false) — a map of language
85
+ id to a resolved shiki grammar (e.g. `{ bash: bashGrammar }` from a module-scope
86
+ `import bash from 'shiki/langs/bash.mjs'`). When `language`
87
+ matches a key here, highlighting uses that grammar via a fine-grained `createHighlighterCore()`
82
88
  highlighter, bypassing the default ~200-language dynamic-import path (`loadShikiHighlighter()`)
83
89
  for that language — an additive, opt-in escape hatch for a build scoped to just the languages a
84
- consumer actually needs. A `language` absent from this map (or `languages` left unset) falls back
90
+ consumer actually needs. A `language` absent from both this map and `languageLoaders` falls back
85
91
  to the default dynamic-import path unchanged. For a TypeScript annotation, use
86
- `import type { ShikiLanguageInput } from '@aceshooting/lyra-ui/components/lr-code-block.js'`;
87
- the type-only granular import emits no registration side effect.
92
+ `import type { ShikiLanguageInput } from
93
+ '@aceshooting/lyra-ui/components/lr-code-block.js'` for resolved-grammar annotations.
94
+ The type-only granular import emits no registration side effect.
88
95
  The map key need not be the grammar module's own registered name or one of its declared
89
96
  aliases — Lyra derives the Shiki `langAlias` mapping this needs automatically, so a key such as
90
97
  `tsx` reusing a differently-named grammar (e.g. TypeScript's own module, to avoid bundling a
91
98
  second near-identical grammar) still highlights under that key, for a lazy loader entry too.
92
99
 
100
+ - `languageLoaders?: Readonly<Record<string, ShikiLanguageLoader>>` (attribute: false) — lazy
101
+ grammar loaders, e.g. `{ bash: () => import('shiki/langs/bash.mjs') }`. Concrete `languages`
102
+ entries take priority for the requested language; otherwise only its loader executes. Leaving
103
+ this unset preserves the concrete-grammar and default highlighter paths. `ShikiLanguageLoader`
104
+ is exported from the same entry and returns
105
+ `Promise<ShikiLanguageInput | { default: ShikiLanguageInput }>`; assign new map objects after edits.
106
+
93
107
  - `copyAppearance: 'text' | 'icon' = 'text'` (attribute `copy-appearance`, reflected) — how the
94
108
  header's copy control presents itself. `'text'` is the labelled button this component has always
95
109
  rendered; `'icon'` swaps the visible label for a compact glyph and promotes the same localized
@@ -125,7 +139,7 @@ control in each appearance), `copy-button-control` (the copy control's own nativ
125
139
  `header-actions` (the wrapper around the `header-actions` slot; it carries the `hidden` attribute
126
140
  and computes to `display: none` whenever nothing is assigned, so an empty slot contributes no
127
141
  header gap — a rule that sets `display` on it must qualify itself with `:not([hidden])`),
128
- `toggle`, `body`, `pre`,
142
+ `toggle`, `body`, `pre`, `limit` (the syntax-highlighting ceiling notice),
129
143
  `code`, `line-highlight` (a line marked by `highlightLines` or a `line-range` entry in `highlights`),
130
144
  `line-button` (a gutter line-number button, only rendered while `activatableLines` and `lineNumbers`
131
145
  are both set)