@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,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** none
12
- - **Themeable via** 20 parts, 23 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 21 parts, 23 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
  ---
@@ -42,6 +42,16 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
42
42
 
43
43
  **Properties:**
44
44
  - `type: LyraLiteChartType = 'bar'` — `'bar' | 'line'`
45
+ - `maxRecords: number = 1000` (attribute `max-records`) — rendered record budget, normalized to
46
+ 2–1,000; invalid values or a removed attribute use the default. With `preparedData = null`, fit
47
+ layouts also sample to the measured allocation width; callbacks and events retain original
48
+ source category indexes, and scroll category widths follow the sampled categories. Prepared
49
+ input instead uses the global entry and table-cell admission limits described below.
50
+ - `preparedData: LyraChartPreparedData | null = null` (property only) — a bounded whole-source
51
+ series or category summary. It takes precedence over `labels` and `datasets`; see the prepared
52
+ route below for original coordinates, activation identities and exact-point lookup. The shared
53
+ union also names `LyraSpatialChartSource`; lite rejects that kind visibly and has no spatial
54
+ density, ID-reveal or scatter/bubble route.
45
55
  - `labels: readonly string[] = []` (attribute: false)
46
56
  - `datasets: readonly LyraLiteChartSeries[] = []` (attribute: false) —
47
57
  `LyraLiteChartSeries { readonly label: string; readonly data: readonly (number|null)[];
@@ -65,7 +75,9 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
65
75
  - `withoutZeroBaseline: boolean = false` (attribute `without-zero-baseline`) — lets the value axis
66
76
  start at the data minimum instead of always including zero.
67
77
  - `stacked: boolean = false` — sums each category's bars into one segmented bar instead of grouping
68
- them side by side; ignored for `type="line"`
78
+ them side by side; ignored for legacy `type="line"`. Prepared ordered series reject `stacked`
79
+ in either chart type because their source indexes are independent; prepared categories retain
80
+ category stacking.
69
81
  - `tickFormat?: (value: number) => string` (attribute: false) — formats a y-axis tick value for
70
82
  display (e.g. `(v) => \`$${v.toFixed(2)}\`` for currency, or a duration formatter for `"42s"`).
71
83
  Falls back to the built-in "nice numbers" formatter when unset. The returned string is painted
@@ -127,9 +139,9 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
127
139
  negative values fall back to it, and a finite value is capped so the category run stays within
128
140
  1,000,000px.
129
141
  - `maxLabels?: number | 'auto'` (attribute `max-labels`) — decimates which category axis labels
130
- actually render *text*: after the global record sampler runs, it selects from those retained
131
- categories, always shows the first and last sampled label, and roughly evenly distributes the
132
- rest between them. A number is authoritative up to the number of sampled categories. `'auto'`
142
+ actually render *text*: after legacy sampling or prepared-summary admission, it selects from
143
+ those retained categories, always shows the first and last retained label, and roughly evenly
144
+ distributes the rest between them. A number is authoritative up to the retained category count. `'auto'`
133
145
  re-selects after each resize from the resolved tick positions and the widest rendered caller
134
146
  label, using the same deterministic 7px-per-character estimate as label ellipsis. Whenever the
135
147
  first and last labels fit side by side, it keeps at least 10px of breathing room between every
@@ -142,8 +154,8 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
142
154
  It therefore responds to either `layout` mode without DOM text measurement or browser-specific
143
155
  font metrics. Unset (the default) renders every label, unchanged. Each rendered category label
144
156
  is allocation-aware: narrow/long text is ellipsized before paint, with the complete caller label
145
- retained as its accessible name. Independently, the global 1,000-record safety sampler may bound
146
- both marks and labels for very large category×series input.
157
+ retained as its accessible name. With `preparedData = null`, the global 1,000-record safety
158
+ sampler may independently bound marks and labels for very large category×series input.
147
159
  - `barX?: (index: number) => number` (attribute: false, bar type only) — overrides the internal
148
160
  per-category x-origin formula (`plotX + i * slot`) used by both bars and their axis labels, so a
149
161
  consumer can pixel-align this chart's bars with a sibling `<lr-heatmap>` calendar's week columns
@@ -164,8 +176,9 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
164
176
  the label alone when unset; no-op while `withLegend` is `false`.
165
177
  - `axisLabelText?: (label: string, index: number) => string | null` (attribute: false) — a
166
178
  display-only override for one category-axis tick's text; returning `null` renders no tick there at
167
- all. `labels` stays the single authoritative source for the generated accessible table's row
168
- headers, the per-mark `<title>`/accessible name, the live announcement and CSV export, so blanking
179
+ all. Effective category labels (`labels` for legacy input, descriptor labels for prepared
180
+ categories) remain authoritative for table row headers, per-mark `<title>`/accessible names,
181
+ live announcements and CSV export, so blanking
169
182
  a tick never blanks the same category where a reader or a spreadsheet needs it. Complements
170
183
  `maxLabels` rather than replacing it: that even decimation is applied FIRST, so a category it
171
184
  already dropped never reaches this callback — use this one for ticks that must line up with an
@@ -226,7 +239,8 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
226
239
  in the bounded rendered sample select matching bars and line points, which receive
227
240
  `data-selected` and explicit `aria-pressed="true"`; all other marks render `aria-pressed="false"`.
228
241
  For a multi-series chart, a selected source category selects the matching rendered mark in every
229
- dataset. Empty is the default.
242
+ dataset. Empty is the default. For prepared input, these remain plotted indexes (including
243
+ separator offsets), not original source indexes; use `revealSourcePoint()` for source lookup.
230
244
  Style the built-in highlight through `--lr-lite-chart-selected-outline-color` and
231
245
  `--lr-lite-chart-selected-outline-width`. Note
232
246
  `::part(bar)[data-selected]` and `::part(point)[data-selected]` are **invalid CSS** — Shadow Parts
@@ -235,15 +249,64 @@ is no "every item in the tooltip" surface to hook a title or footer formatter on
235
249
  - `labels`, `datasets`, and `selectedIndices` are clone-owned, bounded, frozen snapshots. Mutating
236
250
  a previously assigned array or nested series data has no effect; create and reassign a new
237
251
  collection. `labels` keeps its first 10,000 entries; each series keeps its first 10,000 values,
238
- fewer when more than four series share the 45,000-value bound (a development-mode warning reports
239
- the trim), so a long series is shortened rather than dropped.
252
+ fewer when more than four series share the 45,000-value bound, so a long series is shortened
253
+ rather than dropped. A localized `limit` notice discloses input loss separately from the
254
+ `data-truncation` rendering notice.
240
255
  - `minBarHeight?: number` (attribute `min-bar-height`) — optional minimum visible bar height for
241
256
  small non-zero values; finite input is capped at 1,000,000px before derived SVG geometry is
242
257
  calculated. Authored floors can exceed the available plot height. Linear and logarithmic stacks
243
258
  push subsequent segments along their signed pixel cursor; zero values remain unfloored.
244
259
  - `appendData(label, values, maxPoints?)` — appends one aligned category and keeps a rolling window
245
260
  of the newest `maxPoints` categories, never more than the `datasets` bound above (also the
246
- default)
261
+ default). The immutable window copy remains proportional to the retained window; existing
262
+ canonical points are not re-admitted. Hidden generated multi-series table formatting coalesces
263
+ append-only updates during idle, with a 250ms timeout. Visible tables, single-series data lists,
264
+ keyboard announcements and exports remain immediate. External data, formatter or locale changes
265
+ and explicit refreshes cancel deferred work. `appendData()` is inactive while `preparedData`
266
+ is supplied.
267
+
268
+ **Prepared whole-source data:** use `prepareLyraSeriesData` or `prepareLyraCategoryData` from
269
+ `@aceshooting/lyra-ui/utilities/data-preparation.js`, or supply a compatible bounded descriptor.
270
+ Ordered series support `line` and `bar`; category aggregates support `bar`. The shared descriptor
271
+ contract and validation limits are described under `lr-chart` above. Invalid, incompatible or
272
+ over-budget input shows a localized visible message instead of reading legacy arrays or sampling
273
+ again. `maxRecords` bounds entries across all series, and every line-gap separator costs an entry.
274
+ Ordered-series admission additionally reserves two render entries for an isolating separator and
275
+ one exact point. The 9,000 semantic-sample ceiling includes that one extra observation, and the
276
+ 1,000 rectangular-cell ceiling includes the reserved rows across all series. Category aggregates
277
+ use the global entry/cell limits without an exact-point reservation.
278
+
279
+ Each ordered series retains its own original x coordinates, source indexes and disconnected gaps;
280
+ nonmonotonic x remains in source order. Full x domains drive horizontal positions; full y domains
281
+ drive value geometry and the accessible min/max/trend summary, with the existing value-scale and
282
+ zero-baseline settings. Categorical synchronization,
283
+ `barX` and `barSlotWidth` are inactive for ordered series. Their accessible alternative uses a
284
+ bounded list even with multiple series, naming each observation's original index and x/y values.
285
+ Category input retains the category table/list behavior. The summary reports complete valid and
286
+ invalid observation counts as well as the displayed count.
287
+
288
+ The host owns the descriptor and reader closures. Reassign `preparedData` (including the same
289
+ identity), or call unnamed `requestUpdate()`, after changing a descriptor or its revision.
290
+ Presentation changes reuse the captured summary. Replacement, explicit refresh, disconnection and
291
+ adoption cancel pending source work and prevent obsolete replies from replacing the current view.
292
+ Setting `preparedData = null` restores the current legacy arrays. Reader closures may retain
293
+ host-owned backing data; component admission does not release that storage.
294
+
295
+ `revealSourcePoint(ref: LyraSeriesPointRef): Promise<boolean>` looks up an original series ID and
296
+ source index. It may refine a bounded source-index neighborhood through an optional host
297
+ `queryRange`; it never guesses an index from x or scans the full source. The component retains one
298
+ bounded overview and one current refinement/overlay. Pending work exposes busy/loading state;
299
+ invalid replies retain the completed view and show a localized failure. Revealing does not select
300
+ or activate a point. There is no zoom API on this component.
301
+
302
+ **Events:** Prepared activation additionally emits noncancelable `lr-source-point-select` with
303
+ `LyraChartSourcePointSelectDetail { revision, seriesId, sourceIndex, point: { x, y } }`, or
304
+ noncancelable `lr-source-category-select` with
305
+ `LyraChartSourceCategorySelectDetail { revision, seriesId, categoryId, value, observationCount }`.
306
+ These carry original source identity;
307
+ the existing point/datum events retain plotted-index meaning. Actions on the displayed view stay
308
+ bound to its committed revision while a replacement is pending; obsolete detached marks cannot
309
+ act on the new model.
247
310
 
248
311
  **Events:** `lr-datum-activate` — canonical family activation with `kind: 'bar'|'point'`,
249
312
  `datasetIndex`, `index`, `label`, and `value`. `lr-point-activate` is emitted for the same pointer
@@ -253,10 +316,15 @@ rendered point in two-dimensional screen space; an exact distance tie retains th
253
316
  target received the click.
254
317
 
255
318
  **Methods:** `exportData('csv' | 'svg')` returns a spreadsheet-safe CSV snapshot or the current SVG
256
- markup. CSV rows cover the canonical record count — the maximum of `labels.length` and every
319
+ markup. With `preparedData = null`, CSV rows cover the canonical record count — the maximum of `labels.length` and every
257
320
  `dataset.data.length` — and use empty cells for missing labels/values, so a longer or ragged series
258
321
  is never truncated or shifted. The method does not download a file; pair it with
259
- `lr-export-button` for download UX.
322
+ `lr-export-button` for download UX. Prepared exports synchronously serialize the current bounded
323
+ summary/refinement and start no source reads. Ordered-series CSV keeps the label-plus-series
324
+ column schema: each observation gets a row labelled with its original index and localized x/y
325
+ coordinates, a value in its own series column, and empty cells for other series. `skipZero` may
326
+ hide a zero bar but does not omit that admitted value from CSV. SVG exports the current rendered
327
+ view. Complete raw-source export remains host-owned.
260
328
 
261
329
  Axis titles retain their complete `xLabel`/`yLabel` values and accessible names. In the browser,
262
330
  visible titles fit their plot allocation using the rendered SVG font; long titles end with an
@@ -273,33 +341,30 @@ anchoring keeps working correctly under RTL without inverting which rendered cat
273
341
  keyword. Built-in mark summaries are complete localized templates and format values with
274
342
  `effectiveLocale`.
275
343
 
276
- **Performance:** `render()` recomputes the grid/marks on every update rather than memoizing against a
277
- content signature — `datasets`/`labels` can hold callbacks (`tickFormat`, `barX`) or arbitrary,
278
- possibly circular or BigInt-bearing application data that a fingerprint can't serialize safely, so a
279
- fresh, small SVG render is cheaper and more correct than a lossy cache. The shared sampling path
280
- keeps that render bounded to 1,000 category×series marks/keyboard records, retaining endpoints
281
- instead of materializing an unbounded hidden DOM or SVG tree. The sample is evenly spaced, not
282
- extreme-preserving, while the value axis still spans the complete data: a line can stop short of
283
- the axis maximum when the spike that set it falls between samples. Pre-aggregate (for example a
284
- minimum and maximum per bucket) when every spike must be drawn.
344
+ **Performance:** focus movement patches the active marks without rebuilding the SVG. Derived table
345
+ content reuses canonical input identity; arbitrary formatter callback results are not cached by a
346
+ serialized content fingerprint. With `preparedData = null`, the shared sampling plan bounds marks, keyboard records and
347
+ generated alternatives by `maxRecords`, retaining endpoints and bucket extrema within the available
348
+ budget. Fit layouts also use allocation width. The value axis still spans admitted data; a finite
349
+ sample cannot retain every extremum from arbitrarily many series, so pre-aggregate when every spike
350
+ must be represented.
285
351
 
286
352
  **Slots:** `data-table` — optional consumer-provided complete, paginated, or virtualized accessible
287
353
  data alternative.
288
354
 
289
- **CSS parts:** `base`, `description`, `grid-line`, `axis-label`, `axis-title`,
355
+ **CSS parts:** `base`, `description` (accessible summary and visible prepared loading/error text), `grid-line`, `axis-label`, `axis-title`,
290
356
  `sync-crosshair` (decorative synchronized category line), `sync-tooltip` (noninteractive positioned
291
357
  text tooltip while `syncGroup` is active), `bar` and `point` (each carries
292
358
  `data-selected` when its category index is in `selectedIndices`, with explicit pressed state on every
293
359
  mark), `line`, `legend`, `legend-item`, `legend-swatch`, `legend-text` (extra per-item text after
294
360
  the series label, rendered only when `legendText` is set), `live-region` (the current mark
295
361
  announcement for keyboard users), `data-list` (a visually hidden sampled list of plotted data
296
- points — single-series only), `data-table` (the generated/slotted alternative container),
362
+ points — single-series legacy/category input or any prepared ordered series), `data-table` (the generated/slotted alternative container),
297
363
  `data-table-toggle` (the `dataTableToggle` disclosure button), `table`
298
- (the generated semantic category×series table rendered when there is more than one dataset), and
299
- `data-truncation` (the
300
- visible/announced sampling notice).
364
+ (the generated semantic category×series table for multi-series legacy/category input), and
365
+ `data-truncation` (the visible/announced sampling notice), and `limit` (the input-admission notice).
301
366
 
302
- **Screen-reader data alternative:** a single dataset renders the flat `data-list` (one `<li>` per
367
+ **Screen-reader data alternative (legacy or prepared categories):** a single dataset renders the flat `data-list` (one `<li>` per
303
368
  plotted point, matching the roving-tabindex mark order). More than one dataset instead renders a
304
369
  `data-table` — a category-labelled `<caption>` (the shared localized `chartData` string), one
305
370
  `<th scope="col">` per series (plus a leading `chartCategory` corner header), and one
@@ -309,7 +374,7 @@ Finite table cells use `tableCellFormatter` when supplied and otherwise use the
309
374
  effective locale. A stacked multi-series bar chart with `tableTotals` adds a localized total
310
375
  column; null/non-finite inputs are skipped, while an all-missing category leaves the total cell
311
376
  blank instead of reporting a misleading zero. Built-in SVG marks, keyboard targets, and this data
312
- alternative share one endpoint-preserving sample of at most 1,000 category×series records. When
377
+ alternative share the same endpoint/extremum sample bounded by `maxRecords`. When
313
378
  sampling occurs, a localized `data-truncation` notice is shown and announced; provide
314
379
  `slot="data-table"` for a complete paginated, virtualized, or application-owned alternative, which
315
380
  suppresses the generated sample; the notice then says only the plot is sampled.
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 17 parts, 25 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 18 parts, 25 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
  ---
@@ -47,8 +47,10 @@ readonly LyraLocaleEntry[]`, `LyraLocaleEntry { tag: string; label?: string; cou
47
47
  the derived `localeNativeName(tag)` endonym only when it is non-blank; an explicitly blank (or
48
48
  whitespace-only) `label` is treated the same as an omitted one and still falls back to
49
49
  `localeNativeName(tag)`. Explicit catalogs are
50
- capped, cloned and frozen at assignment; mutate a new array/entry and reassign it to update the
51
- list. `country` (ISO 3166-1 alpha-2 or alpha-3) overrides a row's derived flag — e.g.
50
+ capped at the first 512 source entries, cloned and frozen at assignment; mutate a new array/entry
51
+ and reassign it to update the list. The localized `limit` part reports omitted input through
52
+ `localePickerInputLimit`. Closed listboxes contain no option rows after their exit transition;
53
+ the trigger still resolves the selected label. `country` (ISO 3166-1 alpha-2 or alpha-3) overrides a row's derived flag — e.g.
52
54
  showing Lebanon's flag for an `'ar'` row instead of the library's default Saudi Arabia mapping;
53
55
  only available on the `{tag,label,country}` object form, not the bare `string[]` form. Replacing
54
56
  the catalog while the listbox is open keeps keyboard navigation valid: an active row beyond the
@@ -191,7 +193,7 @@ priority until cleared.
191
193
 
192
194
  **Slots:** `label`, `hint`, `error`.
193
195
 
194
- **CSS parts:** `form-control`, `form-control-label`, `trigger`,
196
+ **CSS parts:** `limit` (input-loss notice), `form-control`, `form-control-label`, `trigger`,
195
197
  `trigger-flag` (the trigger's leading `<lr-flag>` for the current value, present only while
196
198
  `withoutFlags` is off and `triggerDisplay` is not `label`), `trigger-label` (the current language,
197
199
  visually hidden in flag-only mode), `listbox`, `option`, `option-flag` (present only while `withoutFlags` is off),
@@ -23,6 +23,31 @@ plus a peer-neutral `map` getter for common imperative operations. Its runtime v
23
23
  underlying MapLibre map. The component observes its own map-container allocation and calls the
24
24
  peer's `resize()` when that allocation changes.
25
25
 
26
+ **Large spatial sources:** a catalog of a million logical geospatial records can stay in a
27
+ host-owned spatial service. Supply a hosted vector style URL, or a style object with vector tile
28
+ sources and layers, through `mapStyle`; the selected peer requests and renders tiles for the
29
+ viewport. The host owns durable records, spatial indexing, identity lookup, global bounds and
30
+ total counts. Keep those totals beside the map: a rendered-feature query describes the current
31
+ viewport, not the complete catalog. Tile density, zoom range and service response sizes remain
32
+ application decisions. This route does not require a million-feature inline GeoJSON collection.
33
+
34
+ Configure the selected engine's worker before constructing the map, as described below. For a
35
+ custom tile protocol, register `addProtocol()` from that same engine package before assigning a
36
+ style that uses its scheme (`@aceshooting/lyra-map` for the default, `maplibre-gl` for explicit
37
+ `engine="maplibre"`). The host protocol handler supplies real tile bytes and owns its transport,
38
+ authorization and cancellation. Remove registrations with `removeProtocol()` when no remaining
39
+ map uses them. A protocol registration is peer setup, not an `lr-map` provider property.
40
+
41
+ Use bounded `dataLayers` for changing selections or local overlays fetched by identity or spatial
42
+ query. Only the first 100 descriptors are inspected, and `markers` inspects at most 2,000 entries;
43
+ neither is a complete catalog browser. Stable unique feature IDs allow
44
+ `updateSourceData(sourceId, diff)` to update an applied generated GeoJSON source without replacing
45
+ the whole collection. Check its boolean result and retain the host's authoritative state; a later
46
+ controlled `dataLayers` assignment replaces imperative changes. Opaque GeoJSON handoff and
47
+ uncloned diffs avoid a Lyra deep copy, while the peer still parses, indexes, transfers and caches
48
+ data. The tile cache belongs to the peer; bounded wrapper DOM does not establish a bound on worker
49
+ heap or guarantee constant rendering cost as the source grows.
50
+
26
51
  Markers and popups use the physical top-left origin required by MapLibre's projected transforms in
27
52
  both LTR and RTL. Their text and surrounding controls retain logical direction-aware layout.
28
53
 
@@ -195,7 +220,9 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
195
220
  - `markers: LyraMapMarker[] = []` (attribute: false) — `LyraMapMarker { id?: string; lngLat:
196
221
  [number, number]; color?: string; label?: string; unsafeHtml?: string }`; an explicit `id` is
197
222
  trimmed and must be nonempty, and the first successfully admitted marker for an explicit ID wins.
198
- A malformed earlier row does not reserve that ID. Markers are reconciled
223
+ Only the first 2,000 authored entries are inspected; `markersTruncated` reports an omitted
224
+ suffix. Use clustered `dataLayers` for larger point collections. A malformed earlier row does
225
+ not reserve that ID. Markers are reconciled
199
226
  by that explicit ID (falling back
200
227
  to a `lng,lat` key, disambiguated by occurrence order for duplicate-coordinate id-less markers,
201
228
  when `id` is omitted) so an unchanged marker isn't torn down and recreated on every `markers`
@@ -206,12 +233,14 @@ string; geojson: GeoJSON.FeatureCollection; field: string; stops: [number, strin
206
233
  escaped) when the content is plain text. For marker/popup naming, visible text is extracted from
207
234
  trusted markup while `script`, `style`, `template`, `[hidden]`, and `aria-hidden="true"` subtrees
208
235
  are excluded; an explicitly supplied `label` remains the more predictable accessible name. A
209
- marker whose `color` changes for a persisting `id`
236
+ marker whose authored `color` changes for a persisting `id`
210
237
  can't be recolored in place (no `Marker.setColor()`) and is torn down/reconstructed instead — see
211
238
  gotchas. Entries with non-finite coordinates, latitude outside `[-90, 90]`, or a runtime
212
239
  non-string `label` are skipped without aborting valid siblings. `color` is used only when the
213
240
  browser accepts it as CSS `color`;
214
- declaration breaks and `url()` paint servers fall back to MapLibre's default marker color.
241
+ declaration breaks and `url()` paint servers fall back to the default color. Without an authored
242
+ color, markers follow `--lr-color-brand` through CSS `currentColor`; rethemes preserve marker and
243
+ popup identity, including an open popup. Explicit authored color changes still reconstruct markers.
215
244
  Every retained marker is a named `role="button"` tab stop, including one without a popup. Click,
216
245
  Enter, and Space emit `lr-map-marker-activate`; Space suppresses its page-scroll default while
217
246
  preserving MapLibre's popup toggle. A popup-bearing marker additionally exposes
@@ -222,7 +251,8 @@ GeoJSON.FeatureCollection; tone?: 'accent' | 'success' | 'warning' |
222
251
  'danger' | 'neutral'; color?: string; strokeColor?: string; line?: LyraMapLineOptions;
223
252
  point?: LyraMapPointOptions; kind?: LyraMapDataLayerKind;
224
253
  heatmap?: LyraMapHeatmapOptions; cluster?: LyraMapClusterOptions }`. `sourceId` is trimmed and must be nonempty; the first layer for a
225
- `sourceId` that is successfully admitted wins; blank, malformed, and later duplicate records are
254
+ `sourceId` that is successfully admitted wins. Only the first 100 entries are inspected; blank,
255
+ malformed, and later duplicate records are
226
256
  ignored without reserving an identity for a valid later sibling. Each retained entry adds one
227
257
  GeoJSON source plus three geometry-filtered layers
228
258
  (fill, line, and circle, so a mixed `FeatureCollection` renders correctly), colored from the
@@ -253,6 +283,12 @@ heatmap?: LyraMapHeatmapOptions; cluster?: LyraMapClusterOptions }`. `sourceId`
253
283
  The component snapshots the configuration it reads. It passes `choropleth.geojson` and
254
284
  `dataLayers[].geojson` through to MapLibre; assign a new `choropleth`, `dataLayers`, or `markers`
255
285
  value after changing configuration, because mutating an assigned value is not observed.
286
+ For an in-place change to pass-through GeoJSON, call `requestUpdate()` explicitly to refresh its
287
+ comparison snapshot. This refresh still applies when coalesced with a named presentation update.
288
+ Changed geometry or bounding boxes replace the peer source data. For comparable feature
289
+ collections, unchanged snapshots avoid a redundant write; eligible property-only changes keep
290
+ the incremental update path. A refreshed standalone feature or over-limit collection uses a
291
+ full replacement even when its data is unchanged.
256
292
 
257
293
  `cluster` and `kind` (both new in 12.0.0) opt one entry out of that three-layer geometry split.
258
294
  **Both are strictly additive: an entry that sets neither renders exactly what it rendered before,
@@ -436,8 +472,12 @@ features keep semantically unchanged geometry/bbox values, the component emits M
436
472
  incremental `updateData()` for property changes, additions, removals, and order changes. The exact
437
473
  next order is preserved: an unchanged prefix stays in place and only the invalidated suffix is
438
474
  removed and re-added. Lyra snapshots control and projection data while retaining opaque GeoJSON
439
- identity at the MapLibre boundary; a bounded, accessor-free comparison verifies the JSON geometry
440
- graph instead. A missing/duplicate ID, changed geometry, exceeded bound, or uncertain
475
+ identity at the MapLibre boundary. Immutable admitted geometry and bbox identities reuse their
476
+ validated comparison projections; replace those identities when their contents change. Otherwise,
477
+ a bounded, accessor-free comparison verifies the JSON geometry graph. Automatic comparison
478
+ supports at most 10,000 features, with a work budget of at least 50,000 values or 4,096 values per
479
+ feature, whichever is larger, capped at 10,000,000 values. A missing/duplicate ID, changed geometry,
480
+ exceeded bound, or uncertain
441
481
  comparison falls back to `setData()` with no change in rendered behaviour. Peers without
442
482
  `updateData()` always take the old path.
443
483
 
@@ -463,7 +503,8 @@ payload beside the map.
463
503
  `LyraMapPointRadiusInterpolation`, `LyraMapPointIcon`, `LyraMapPointIconMode`,
464
504
  `LyraMapPointIconLineCap`, `LyraMapPointIconLineJoin`, `LyraMapMarker`, `LyraMapMarkerActivationDetail`,
465
505
  `LyraMapMarkerActivationSource`, `LyraMapLegendToggleDetail`, `LyraMapLegendPanelToggleDetail`,
466
- `LyraMapStyleSpecification`, `LyraMapEngine`, `LyraMapFeatureRequirements`, and `LyraMapInstance`.
506
+ `LyraMapStyleSpecification`, `LyraMapEngine`, `LyraMapFeatureRequirements`, `LyraMapSourceDataDiff`,
507
+ and `LyraMapInstance`.
467
508
 
468
509
  **Getters:** `map: LyraMapInstance | undefined` → the underlying runtime `maplibregl.Map`, exposed
469
510
  through the peer-neutral `getCanvas()`, `getCenter()`, `getZoom()`, `setCenter()`, `setZoom()`, and
@@ -473,6 +514,15 @@ value to the selected engine's `Map` type. `LyraMapInstance.prepareFeatures?()`
473
514
  modular engine and absent on canonical MapLibre, so guard it or narrow to the companion `Map`
474
515
  before calling. Identity is preserved: `.map` is the engine instance, not a proxy.
475
516
 
517
+ After `lr-map-load`, use the narrowed peer's `queryRenderedFeatures(point, { layers: [...] })`
518
+ for identities painted by style-owned vector layers; `point` is a screen position, which can be
519
+ obtained with the peer's `project([longitude, latitude])`. Attach peer interaction listeners when
520
+ the host needs those layers' hits. `lr-map-click` queries only the component-generated choropleth
521
+ and `dataLayers` layers described below; it does not query arbitrary layer IDs from `mapStyle`.
522
+
523
+ `markersTruncated: boolean` (read-only) is true when authored marker entries exceed the 2,000-entry
524
+ inspection ceiling; it does not count malformed rows skipped within that prefix.
525
+
476
526
  The modular engine automatically prepares initial and replacement style requirements, including
477
527
  projection and terrain. `<lr-map>` additionally awaits per-map main-thread and worker readiness
478
528
  before adding generated choropleth or `dataLayers` sources and layers. New heatmap, clustering, and
@@ -491,6 +541,15 @@ optional-peer import without constructing a map or allocating a WebGL context. P
491
541
  for an explicitly native element. It resolves to `false` when the selected peer is unavailable,
492
542
  allowing an application to choose a fallback before connecting an element.
493
543
 
544
+ `updateSourceData(sourceId: string, diff: LyraMapSourceDataDiff): boolean` forwards a caller-authored
545
+ incremental GeoJSON diff to an applied `dataLayers` or choropleth public `sourceId`. It returns
546
+ `false` before the source is ready, after disconnect, for an unknown source, or when the engine
547
+ lacks `updateData()`. Feature IDs must be stable and unique; the caller owns diff validity. The
548
+ diff is forwarded without cloning, and peer exceptions propagate. It does not change the controlled
549
+ properties. Automatic comparison history is invalidated before forwarding, so a later controlled
550
+ GeoJSON reassignment replaces the imperative state in full. Use this route for changes beyond the
551
+ automatic comparison ceiling.
552
+
494
553
  `fitBounds(bounds: LyraMapBounds, options?: LyraMapFitBoundsOptions): boolean` frames a box
495
554
  `[[west, south], [east, north]]` in the viewport: the way to show every current marker, or a
496
555
  selected region, whenever the data set changes. Use it instead of calling the peer's own
@@ -820,7 +879,7 @@ undefined`, or changing `choropleth.sourceId` to a different value, now calls `r
820
879
  - Ancestor theme-attribute and custom-property changes repaint the already-applied choropleth and
821
880
  data-layer colors/opacities in place. This does not recreate MapLibre sources/layers, replace the
822
881
  style, or reset the current viewport.
823
- - a marker whose `color` changes for a persisting `id` is torn down and reconstructed (maplibre-gl's
882
+ - a marker whose authored `color` changes for a persisting `id` is torn down and reconstructed (maplibre-gl's
824
883
  `Marker` has no `setColor()`) rather than mutated in place — this also closes any popup the user
825
884
  currently has open on that marker (a fresh, closed `Popup` is built for the new instance); an
826
885
  accepted side effect of the reconstruction fallback, not a bug.
@@ -18,10 +18,10 @@
18
18
 
19
19
  A build-lean sibling of `<lr-markdown>` above, for a consumer whose `languages` map already covers
20
20
  every language it will ever render — mirrors `<lr-code-block-core>`'s relationship to
21
- `<lr-code-block>`. Where `<lr-markdown>` unconditionally calls `loadShikiHighlighter()` — the
22
- default ~200-language dynamic-import table loader, whose bundled lookup table a bundler can't
23
- statically narrow away —
24
- this component's own module never imports or calls that function at all; it only ever calls
21
+ `<lr-code-block>`. The full `<lr-markdown>` module references `loadShikiHighlighter()` for languages
22
+ absent from its explicit map. That loader includes the default ~200-language dynamic-import table,
23
+ whose bundled lookup table a bundler cannot statically narrow away.
24
+ This component's own module never imports or calls that function; it only calls
25
25
  `loadShikiHighlighterCore(languages)`, so a consumer importing this entry point instead of
26
26
  `markdown.js` gets a build genuinely free of shiki's full language table.
27
27
 
@@ -43,6 +43,10 @@ support (`highlights`, `activeHighlightId`, `scrollToAnchor()`, the `lr-highligh
43
43
  `htmlMode`/streaming fallback matrix and known gotchas — is identical to `<lr-markdown>`; see that
44
44
  section above for the full write-up of shared behavior.
45
45
 
46
+ During progressive streaming, the complete plain-text tail stays in the DOM; its offscreen height
47
+ is estimated until revealed, so the scroll extent can adjust as pending text comes into view or
48
+ becomes settled Markdown.
49
+
46
50
  **Properties:** `content: string = ''`, `tabSize: number = 4` (attribute `tab-size`) — the same
47
51
  finite-integer-guarded leading-indentation expansion used by `<lr-markdown>`; finite values are
48
52
  clamped to `[1, 32]` (`0` becomes `1`, `33` becomes `32`), and only non-finite values (`NaN`,
@@ -55,7 +59,7 @@ instance's isolated peer-neutral configurable parser; `htmlMode: 'sanitize' | 'e
55
59
  `streamingRender: MarkdownStreamingRender = 'plain'` (attribute `streaming-render`, not reflected),
56
60
  `codeBlockHeader: boolean = false` (attribute `code-block-header`),
57
61
  `withoutSyntaxHighlighting: boolean = false` (attribute `without-syntax-highlighting`),
58
- `languages: Record<string, ShikiLanguageSource> = {}` (attribute: false) —
62
+ `languages: Readonly<Record<string, ShikiLanguageSource>> = {}` (attribute: false) —
59
63
  required, unlike `<lr-markdown>`'s optional `languages?:`; empty (the default) means every fenced
60
64
  block stays unhighlighted permanently. Each value is either an already-resolved grammar or a lazy
61
65
  loader (`() => Promise<ShikiLanguageInput | { default: ShikiLanguageInput }>`, e.g.
@@ -70,6 +74,7 @@ The same 1,000,000-code-unit/20,000-node corpus ceiling, 4,096-code-unit quote-f
70
74
  4,000,000-code-unit work ceiling, 10,000-record admission ceiling, 1,000-candidate window, and
71
75
  100-painted-highlight limit documented for `<lr-markdown>` apply here too, including active-first
72
76
  retention from anywhere in the admitted snapshot.
77
+ The same syntax-highlighting admission, source-size and cache bounds documented above also apply.
73
78
 
74
79
  **Methods:** `renderMarkdown(): void` — immediately reruns the current content through the parse,
75
80
  sanitize, highlight, and fallback pipeline after changing this instance's `marked` configuration;
@@ -116,7 +116,10 @@ uses for its own `[part="body"]`.
116
116
  use plain streaming; inline extensions and renderer overrides remain supported. A text tail
117
117
  follows the surrounding direction, while its open-fence preview uses code direction. Work is
118
118
  bounded per animation frame; after 2,000 settled groups the remaining source stays plain until
119
- completion. Large code blocks defer highlighting until completion.
119
+ completion. Large code blocks defer highlighting until completion. The offscreen plain-text tail
120
+ uses native rendering containment: its complete text stays in the DOM, but its height is estimated
121
+ until it is revealed, then remembered by the browser. The scroll extent can adjust as pending text
122
+ comes into view or becomes settled Markdown. This applies to both Markdown variants.
120
123
  Known limits of progressive mode: an in-progress list or table stays plain text until another
121
124
  block follows it (and a code fence inside it reads in page direction until then); raw HTML or a
122
125
  consumer renderer override that leaves an element open, and a reference definition whose title is
@@ -136,14 +139,18 @@ uses for its own `[part="body"]`.
136
139
  the header also removes authored style elements and their CSS text to prevent visual copy
137
140
  deception. Trusted mode provides no such guarantee.
138
141
  - `withoutSyntaxHighlighting: boolean = false` (attribute `without-syntax-highlighting`) — turns off
139
- fenced-code syntax highlighting. Unset (the default), every fenced block is upgraded via the
142
+ fenced-code syntax highlighting. Unset (the default), eligible fenced blocks are upgraded via the
140
143
  optional `shiki` peer once it is available; set it to keep plain output even when `shiki` is
141
144
  installed. In progressive mode, a block can be highlighted after it settles; the mutable tail
142
145
  remains unhighlighted.
143
- - `languages?: Record<string, ShikiLanguageInput>` (attribute: false) — same shape and purpose as
144
- `<lr-code-block>`'s own `languages`: a fine-grained, explicit language-grammar bundle scoping
145
- shiki's build output to just those grammars instead of its full ~200-language bundle. Forwarded
146
- verbatim to `loadShikiHighlighterCore()`. Unset (the default) uses the default full-bundle loader
146
+ - `languages?: Readonly<Record<string, ShikiLanguageInput>>` (attribute: false) — explicit
147
+ resolved grammars. Languages absent from both this map and `languageLoaders` use the full
148
+ loader's built-in fallback. Replace the map identity when changing its grammars.
149
+ - `languageLoaders?: Readonly<Record<string, ShikiLanguageLoader>>` (attribute: false) — lazy
150
+ grammars such as `{ json: () => import('shiki/langs/json.mjs') }`. Only a matching fenced
151
+ language invokes its loader; concrete `languages` entries take priority on duplicate keys.
152
+ Unset preserves concrete-grammar readback and the default loader. Assign a new map object after
153
+ edits; changing either map invalidates pending highlights and isolates cached output.
147
154
  - `headingAnchors: boolean = false` (attribute `heading-anchors`) — stamps a computed
148
155
  GitHub-slugger-style slug as `id` on every rendered heading.
149
156
  - `math: boolean = false` — renders `$inline$` and `$$block$$` TeX via the optional `katex` peer,
@@ -170,6 +177,16 @@ pass. It reuses that index across navigation and painting. Host-highlight admiss
170
177
  1,000 candidates and paints at most 100, with an active entry anywhere in the admitted snapshot
171
178
  placed first and preserved inside both ceilings.
172
179
 
180
+ Syntax highlighting admits the first 100 distinct language/code pairs in a document, or across a
181
+ progressive session. Each eligible block is limited to 8,192 UTF-16 code units, including its
182
+ terminal newline. Later or larger blocks remain readable plain code. Both Markdown tags share a
183
+ content-addressed cache, partitioned by the supplied `languages` map identity, with at most 100
184
+ entries and 2 MiB of retained key/output storage (two bytes per UTF-16 code unit); each entry is
185
+ limited to 512 KiB. Matching authored grammars share cached output across the full and core tags;
186
+ full-tag fallback languages do not populate the core tag's cache. When highlighted output exceeds
187
+ the byte budget, evicted blocks may remain plain instead of repeatedly tokenizing. Plain streaming
188
+ defers highlighting until completion; progressive streaming highlights settled blocks.
189
+
173
190
  **Methods:**
174
191
 
175
192
  - `renderMarkdown(): void` — immediately reruns the current content through the parse, selected
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 7 parts, 8 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 8 parts, 8 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
  ---
@@ -18,7 +18,7 @@
18
18
 
19
19
  The `more-results` CSS part exposes the additional-results message.
20
20
 
21
- Suggestion listboxes follow the [shared surface treatment](shared/styles-and-tokens.md);
21
+ Suggestion listboxes follow the [shared surface treatment](../shared/styles-and-tokens.md);
22
22
  the caller-owned message field retains its fill.
23
23
 
24
24
  A caret-anchored, keyboard-navigable popover for `@`-mention and `/`-slash-command autocomplete
@@ -43,7 +43,9 @@ preserving null readback; an explicitly empty query remains empty.
43
43
  plain `<textarea>` or single-line text `<input type="text"|"search">` gets caret-precise
44
44
  positioning; any other element anchors the whole popup under that element's own box.
45
45
  - `items: readonly Readonly<LyraMentionItem>[] = []` (attribute: false) — the full candidate set,
46
- pre-`query`-filtering. Assignment takes a shallow frozen snapshot. Runtime rows without a string
46
+ pre-`query`-filtering. Assignment admits the first 10,000 array positions into a shallow frozen
47
+ snapshot; `items` readback exposes that admitted prefix. Additional input is omitted with a
48
+ localized notice in `part="limit"`. Runtime rows without a string
47
49
  `label` remain in that diagnostic snapshot but are omitted from filtering/rendering before the
48
50
  built-in or custom predicate runs, so one malformed provider row cannot take down valid siblings.
49
51
  An entry's `disabled` marks that row non-actionable: `aria-disabled="true"` replaces its
@@ -55,7 +57,8 @@ preserving null readback; an explicitly empty query remains empty.
55
57
  (see `filter`).
56
58
  - `open: boolean = false` (reflected)
57
59
  - `filter: LyraMentionFilter | null = null` (attribute: false) — overrides the built-in
58
- case-insensitive `label`/`description` substring match entirely.
60
+ case-insensitive `label`/`description` substring match entirely. Replacing `items` refreshes
61
+ candidate search text; an explicit `requestUpdate()` refreshes a filter whose closure changed.
59
62
  - `emptyText?: string` (attribute `empty-text`) — `undefined` uses localized `noMatches`; every
60
63
  supplied string, including `''` and `'No matches'`, is caller-owned
61
64
  - `label?: string` — accessible name for the `role="listbox"` popup. `undefined` uses localized
@@ -67,7 +70,8 @@ preserving null readback; an explicitly empty query remains empty.
67
70
  filtered by `query` via `filter` (or the built-in default). An empty `query` skips the query
68
71
  predicate but still omits malformed-label rows. This getter retains every match; the popup
69
72
  renders and navigates the first 50, then adds a localized, non-option count of remaining matches
70
- as the listbox description.
73
+ as the listbox description. This visible-match limit is separate from source admission. Closed
74
+ popups contain no suggestion rows after their exit transition settles.
71
75
  - `activeDescendantId: string | null` — read-only getter; the `id` of the currently-highlighted
72
76
  internal row, or `null` while closed or when `filteredItems` is empty. Useful for diagnostics and
73
77
  same-tree consumers; do not copy it to an external control as a string IDREF.
@@ -115,7 +119,8 @@ renders `open="false"` on first paint)
115
119
 
116
120
  **CSS parts:** `listbox`, `option`, `option-icon` (when `icon` is set), `option-label`,
117
121
  `option-description` (when `description` is set), `empty`, `more-results` (the localized count
118
- shown when more suggestions match than the list renders).
122
+ shown when more suggestions match than the list renders), and `limit` (localized notice when
123
+ source admission omits candidates).
119
124
 
120
125
  **Themeable custom properties:** `--lr-mention-popover-option-active-bg` (default
121
126
  `var(--lr-color-brand-quiet)`) — background of the hovered or `[data-active]`