@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
@@ -45,18 +45,25 @@ over each rendered line's own text, one match per line ordered by that same op i
45
45
  the same diff alignment. Unsupported attributes and untyped property writes normalize to
46
46
  reflected `unified`.
47
47
  - `language: string = ''` — a shiki-recognized language id. Highlighting activates only when this
48
- has a matching entry in `languages` — there is deliberately no default full-table
48
+ has a matching entry in `languages` or `languageLoaders` — there is deliberately no default full-table
49
49
  `lr-code-block`-style fallback, so this component never reaches shiki's ~200-language
50
50
  dynamic-import table.
51
- - `languages?: Record<string, ShikiLanguageInput>` (attribute: false) — grammar definitions this
52
- instance can highlight, same shape as `lr-code-block-core`'s own `languages`.
51
+ - `languages?: Readonly<Record<string, ShikiLanguageInput>>` (attribute: false) — resolved grammar
52
+ definitions.
53
+ - `languageLoaders?: Readonly<Record<string, ShikiLanguageLoader>>` (attribute: false) — lazy
54
+ grammar loaders. Concrete `languages` entries take priority on duplicate keys. Only the requested
55
+ loader runs; unused loader entries stay unresolved. Unset preserves concrete-grammar behavior.
56
+ Assign new map objects after editing entries.
53
57
  - `contextLines: number | undefined` (attribute: `context-lines`) — keeps this many unchanged
54
58
  lines around each change and collapses longer unchanged runs into a localized fold marker. The
55
59
  default `undefined` shows every line; negative and non-finite values also disable folding.
56
60
  - `maxLines: number = 5000` (attribute `max-lines`) — maximum logical lines accepted on either
57
61
  side. Larger input renders the localized `diffViewTooLarge` fallback without computing or
58
62
  highlighting the diff. `Infinity` relaxes this line-count ceiling, but the fixed aggregate
59
- character and comparison-work ceilings remain in force.
63
+ character and comparison-work ceilings remain in force. Every value, including `Infinity`,
64
+ also enforces a hard 10,000-diff-operation render ceiling: at most 10,000 unified lines or
65
+ 20,000 split cells, including empty cells. Larger diffs show the localized `limit` fallback.
66
+ Offscreen rows use `content-visibility: auto` to defer paint.
60
67
  - `anchorKinds: readonly LyraAnchorKind[] = ['line-range']` (this viewer's supported
61
68
  `LyraAnchor.kind` values for the shared anchor-target contract).
62
69
 
@@ -66,6 +73,12 @@ later valid grammar from being used; grammar values themselves remain opaque to
66
73
  Non-enumerable names do not consume language slots, but every inspected name counts toward the
67
74
  20,000 structural ceiling.
68
75
 
76
+ Syntax highlighting accepts up to 8,192 UTF-16 code units on each input, inclusive. If either side
77
+ exceeds that ceiling, both sides use plain text with a localized `[part="limit"]` notice when
78
+ `language` is set. This highlighting fallback preserves admitted source text; the separate input,
79
+ comparison, and diff-operation limits still apply. The fine-grained highlighter path does not
80
+ import the default full-language-table loader.
81
+
69
82
  **Methods:** `search(query)` resolves the match count via a case-insensitive substring match over
70
83
  each rendered line's own text, ordered by `line-range` op index (empty/whitespace query behaves like
71
84
  `clearSearch()`); `searchNext()`/`searchPrevious()` advance/step back through matches (wrapping,
@@ -106,8 +119,8 @@ marker — plus `data-match`/`data-active-match` while a search result covers it
106
119
  technology exposes the change), `line-highlight-action` (the focusable button a resolved
107
120
  `highlights` entry adds to the line it first covers; emits `lr-highlight-activate`), `copy-button`
108
121
  (the copy affordance, only rendered while `copyable`; it stays pinned at the top while the view
109
- scrolls), `limit` (the localized over-`maxLines`
110
- fallback), `side` (one column in `layout="split"`, `data-side="old"|"new"`), `anchor-live-region`
122
+ scrolls), `limit` (the localized input/render-limit fallback or syntax-highlighting ceiling
123
+ notice), `side` (one column in `layout="split"`, `data-side="old"|"new"`), `anchor-live-region`
111
124
  (an aria-hidden, non-live shadow mirror of the latest anchor-jump message; the spoken copy is
112
125
  appended to the shared document-level polite sink only while the viewer and its composed ancestors
113
126
  are exposed to the accessibility tree).
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 21 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 24 parts, 0 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
  ---
@@ -20,6 +20,13 @@ Controlled searchable and filterable document inventory with versions, tags, own
20
20
  sorting, and bulk selection. It composes the table's bounded 100-row default, so a large document
21
21
  collection stays reachable through pagination without mounting an unbounded grid.
22
22
 
23
+ With `dataSource` unset, the tag facet displays the first 500 locale-sorted distinct tags. A localized `[part="limit"]`
24
+ note reports the omitted count. Search and a controlled `tagFilter` continue to match all admitted
25
+ document tags, including tags outside the facet window. Matching rows, sorting, and folded search
26
+ fields are reused when their inputs are unchanged; loading and selection updates reuse the current
27
+ row projection. A custom `filter` that depends on mutable closure state can be refreshed with a
28
+ keyless `requestUpdate()`. Publish document edits with a new outer array as described below.
29
+
23
30
  Own `tags: undefined` is treated like omitted tags; malformed tag arrays and entries remain invalid.
24
31
  Removing `search-term` clears search filtering without rewriting its `null` property readback; an
25
32
  explicitly empty query also clears filtering and a later query applies normally.
@@ -56,6 +63,53 @@ table. Omitted localizes the table's own `tableLoadFailed` default.
56
63
  `errorDescription: string = ''` (`error-description`) — failed-load supporting copy, forwarded to
57
64
  the nested table.
58
65
 
66
+ The provider query type is `DocumentLibrarySourceQuery { readonly searchTerm: string;
67
+ readonly tagFilter: readonly string[]; readonly sortKey: LibraryDocumentSortKey;
68
+ readonly sortDir: 'asc' | 'desc'; readonly filter: LyraDocumentLibrary['filter'] }`.
69
+
70
+ **Full-source paging:** Set property-only `dataSource: DocumentLibrarySource | undefined`
71
+ (default `undefined`) to browse a host-owned logical collection. `DocumentLibrarySource` is
72
+ `LyraPageSource<LibraryDocument, DocumentLibrarySourceQuery>`; both types are exported by the
73
+ component entry and package root. The query contains `searchTerm`, readonly `tagFilter`,
74
+ `sortKey`, `sortDir`, and the current `filter` callback. The provider applies AND-tag filtering
75
+ and ordering to the complete collection. A custom `filter` replaces the default text predicate;
76
+ they are not applied cumulatively. The query forwards `searchTerm` verbatim (null becomes empty).
77
+ The provider supplies the callback's trimmed, request-locale-folded text argument and owns any
78
+ remote translation of that callback. It must not filter only the returned page. Source-mode
79
+ `tagFilter` accepts at most 500 keys; its legacy 10,000-key allowance applies only without a source.
80
+
81
+ `sourcePage: number = 0` (`source-page`) is zero-based; `sourcePageSize: number = 100`
82
+ (`source-page-size`) normalizes to 1–500. Readonly `sourceTotal: number | null` is the exact
83
+ accepted query total, or `null` before a current authoritative result. The nested table converts
84
+ to its one-based page convention, shows unknown-total/loading/error states, and delegates sorting
85
+ to the source. Query or page-size changes reset to source page zero. An out-of-range page receives
86
+ one corrective last-page request. No complete array, row index or full-source search corpus is
87
+ built by the component.
88
+
89
+ The provider implements the shared `query`, global `lookup` and `locate` contract from
90
+ `@aceshooting/lyra-ui/data-sources.js`. Each accepted page must include `tags`, even when its
91
+ catalogue is empty: bounded `{ values, total, unavailableSelected }` facets describe the global
92
+ catalogue and supplied labels. Missing rows on the current page never prove a filter is absent;
93
+ only `unavailableSelected` removes a controlled tag. Facet values are bounded to 500 and source
94
+ rows to 500 tags and 65,536 display-text UTF-16 units each. Source-row tags render as complete text
95
+ lists rather than one chip per tag. Malformed or oversized replies show a localized error.
96
+
97
+ Bulk selection still contains up to 10,000 global IDs. The provider resolves them in sequential
98
+ batches of at most 500; only authoritative global lookup absence removes an ID. The header
99
+ checkbox selects or clears the loaded page while preserving off-page selections. Selection
100
+ changes wait for lookup to complete; failures expose `selection-status` and `selection-retry`.
101
+ User `lr-selection-change` carries the complete accepted ID list, and programmatic assignments
102
+ remain silent. Page/query changes and page retry reuse the independent selected-record cache.
103
+ `lr-filter-change.matchCount` reports the accepted global query total.
104
+
105
+ A defined source takes display precedence over `documents`; it never overwrites that legacy
106
+ getter. Invalid defined sources fail visibly. Setting `dataSource = undefined` restores the
107
+ current legacy documents and their existing limits. The source remains host-owned by identity;
108
+ after changing its contents or revision, reassign it (including the same object) or call unnamed
109
+ `requestUpdate()`. Replacement, explicit refresh, locale change, disconnect and adoption revoke
110
+ obsolete work. Named presentation updates reuse accepted data. Both source and legacy routes
111
+ forward instance `strings` to the composed table.
112
+
59
113
  **Events:**
60
114
 
61
115
  - `lr-filter-change` — non-cancelable; fresh frozen readonly `{ searchTerm, tags, matchCount }`.
@@ -64,17 +118,18 @@ the nested table.
64
118
  - `lr-selection-change` — non-cancelable; fresh frozen readonly `{ documentIds }`.
65
119
  - `lr-open` — non-cancelable; frozen readonly `{ documentId }`.
66
120
  - `lr-retry-request` — cancelable, `detail: null`; the nested table's built-in retry button was
67
- activated, only rendered while `error` is set. The library contains the child's request, then
121
+ activated while a host or provider load error is shown. The library contains the child's request, then
68
122
  emits its own canonical request. Preventing it leaves both library and table errors set; otherwise
69
- the default clears them.
123
+ the default clears the host error and retries the current provider page when a source is set.
70
124
 
71
125
  **Slots:** `error` — replaces the nested table's built-in failed-load state, including its retry
72
- button, while `error` is set.
126
+ button, while a host or provider load error is shown.
73
127
 
74
128
  **CSS parts:** `base`, `toolbar`, `search`, `tag-filter`, `selection-bar`, `selection-count`,
75
129
  `clear-selection`, `table`, `row`, `cell`, `header-cell`, `document-name`, `error-row`, `error-cell`,
76
130
  `error` (the nested table's built-in `lr-empty` host), `error-base`, `error-icon`, `error-heading`,
77
- `error-description`, `error-actions`, `retry-button`.
131
+ `error-description`, `error-actions`, `retry-button`, `limit` (the count of distinct tags omitted
132
+ from the facet), `selection-status` (source selection loading/error), and `selection-retry`.
78
133
 
79
134
  `selection-bar` is visible ordinary content, not a shadow live region. `selectedDocumentIds`
80
135
  assignments stay silent; each selection change the user makes (row or select-all checkbox, "Clear
@@ -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); family-wide breaking-change summaries: [retrieval](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/retrieval.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 9 parts, 10 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 11 parts, 10 custom properties — see this component's own `@csspart`/`@cssprop` list below
13
13
  - **Library-wide behavior** (events, form association, `locale`/`strings`, tokens, TS types): `llms/shared.md`
14
14
 
15
15
  ---
@@ -19,6 +19,76 @@
19
19
  Dependency-free accessible 2D embedding projection viewer. Coordinates are projected by the host;
20
20
  the component only normalizes them into SVG, colors optional clusters, and emits selection events.
21
21
 
22
+ **Complete spatial source:** `source: LyraSpatialPointSource<EmbeddingPoint & LyraSpatialPoint>
23
+ | null = null` (attribute: false) takes precedence over `points` without copying the complete
24
+ population. Setting `null` restores the legacy point-array route. `viewport: LyraSpatialBounds
25
+ | null = null` (attribute: false) uses `{ minX, maxX, minY, maxY }`; `null` shows the complete global
26
+ domain. Source storage, indexing and aggregation remain host-owned.
27
+
28
+ ```ts
29
+ import type { EmbeddingPoint } from
30
+ "@aceshooting/lyra-ui/components/retrieval/embedding-explorer/embedding-explorer.class.js";
31
+ import type {
32
+ LyraSpatialBounds, LyraSpatialPoint, LyraSpatialBin, LyraSpatialQuery,
33
+ LyraSpatialPointSource, LyraSpatialBinSelectDetail,
34
+ } from "@aceshooting/lyra-ui/utilities/data-spatial.js";
35
+ ```
36
+
37
+ The provider has immutable `revision`, safe nonnegative integer `count`, and complete global
38
+ `bounds: LyraSpatialBounds | null`; bounds are null exactly for an empty source. Revision is a
39
+ nonempty string of at most 256 UTF-16 units or a finite number. `query({ signal, bounds, maxPoints,
40
+ maxBins })` returns `{ points, bins, matchedCount }`; `getPoint(id, { signal })` returns the exact
41
+ original point or `null`. Both methods may return values or PromiseLike results. Source metadata,
42
+ methods and payload fields must be own data properties; accessor-backed or sparse replies reject.
43
+ Unknown point fields are excluded from the closed projection.
44
+
45
+ Each exact/representative point supplies `{ id, sourceIndex, x, y, label?, sourceId?, cluster? }`.
46
+ `sourceIndex` is a safe original zero-based index below `count`, independent of the representative
47
+ array position; coordinates are finite and within global bounds. IDs are globally unique,
48
+ nonblank and at most 256 UTF-16 units; `label` is at most 1,024 units, `sourceId` and string `cluster`
49
+ at most 256 units, and numeric clusters must be finite. Query representatives and exact lookups
50
+ must agree within a revision. Admission detects bounded duplicate/conflicting identities; global
51
+ uniqueness and unseen data truth remain provider obligations.
52
+
53
+ Each `LyraSpatialBin` has `{ bounds, count }` with positive safe `count`. Bin counts sum exactly
54
+ to `matchedCount <= source.count`, covering every match in the current viewport. Representative
55
+ points overlay that population and never add to its total. Bins may leave spatial holes but cannot
56
+ overlap in their interiors; normal-axis ownership is half-open with inclusive final viewport
57
+ edges. Representatives must belong to a bin and cannot outnumber its population. Collapsed global
58
+ axes stay exactly collapsed and project at the center; a noncollapsed axis requires a positive
59
+ viewport span contained in the global domain. No fabricated domain expansion is applied.
60
+
61
+ Source mode requires normalized `maxRenderedPoints >= 3`, including for an empty source;
62
+ smaller budgets show an error. The default remains 1,000 and ceiling 10,000. Two slots within that
63
+ budget are reserved for independent controlled-selected and imperative-revealed exact points.
64
+ For `A = maxRenderedPoints - 2`, `maxBins = ceil(A / 2)` and `maxPoints = A - maxBins`: default
65
+ 499 bins + 499 representatives + two exact slots. Unused capacity is not borrowed. Exact overlays
66
+ deduplicate against representatives and each other. Each query admits at most 997,000 UTF-16
67
+ metadata units; current/pending queries, exact records and bounded intent/revision strings share
68
+ a 2,000,000-unit envelope. No full point array or all-ID map is retained.
69
+
70
+ `revealSourcePoint(id: string): Promise<boolean>` resolves an exact original ID, minimally pans an
71
+ explicit viewport while preserving its representable span/clamping to global bounds, waits for
72
+ current query/rendering and focuses that point. A null viewport stays global. It leaves
73
+ `selectedPointId` unchanged and emits no selection. Missing, invalid, obsolete, disconnected or
74
+ unrepresentable-pan requests resolve `false`. Selected and revealed records have independent slots;
75
+ a selected record may remain retained outside the visible viewport. Accessible point ordinals use
76
+ original `sourceIndex + 1`, not representative order.
77
+
78
+ **Events:** `lr-point-select` retains `{ point }` for exact original immutable point data, including ID and
79
+ sourceIndex. Activating a density bin emits noncancelable `lr-spatial-bin-select` with frozen
80
+ `LyraSpatialBinSelectDetail { revision, bounds, count }`, never an exact-point event. Source mode
81
+ adds `bin` and `error` parts; `limit` reports the complete global count/domain and current viewport
82
+ count/domain with density and overlay counts distinguished. The cluster legend describes retained
83
+ point overlays rather than certifying all global clusters.
84
+
85
+ Reassign even the same source, or call a keyless `requestUpdate()`, after revision/state changes.
86
+ Named style/strings updates reuse admitted data. Replacement, refresh, disconnect and adoption
87
+ revoke older controls, reveal promises and visible effects. Query and exact lookup each allow one
88
+ physically unsettled call plus only the latest desired intent; ignored aborts hold that lane until
89
+ settlement. Providers should honor the abort signal. The following sampling and last-completed-view
90
+ activation behavior describes the legacy route with `source` null.
91
+
22
92
  **Properties:** `points: EmbeddingPoint[] = []` (attribute: false), where each point is `{ id, x,
23
93
  y, label?, sourceId?, cluster? }`; `selectedPointId: string = ''` (attribute
24
94
  `selected-point-id`); `height: string = '360px'` (any CSS length valid for `block-size`,
@@ -29,25 +99,35 @@ including `auto` for `viewBox`-derived aspect-ratio sizing; applied on the host
29
99
  attribute or `label`, `accessibleLabel` names the plot. An authored host `aria-label` governs the plot name too (including an
30
100
  explicitly empty value), so a competing internal generic label is not exposed. Non-finite
31
101
  coordinates are omitted.
102
+ `maxRenderedPoints: number = 1000` (attribute `max-rendered-points`) controls the evenly sampled
103
+ point budget. Finite values clamp to 1–10,000; invalid values use 1,000. A selected point outside
104
+ the sample is additionally retained. Replace `points` to change the owned input.
32
105
  Blank point ids and later duplicates are also omitted first-wins before empty state, roving focus,
33
106
  selection, rendering, or events.
34
107
  Pointer and programmatic focus synchronize the single roving tab stop, and every point keeps at
35
108
  least a 24×24 CSS px pointer target at narrow allocations without enlarging its marker. Optional
36
109
  cluster membership is exposed as each option's description and in a visible text legend, so the
37
110
  grouping never depends on color alone.
38
- Above 1,000 points, the plot renders a deterministic, evenly spaced sample of the whole array
111
+ Above `maxRenderedPoints` (1,000 by default), the plot renders a deterministic, evenly spaced sample of the whole array
39
112
  (spanning the full input, not a leading run) instead of every point, keeping DOM node and listener
40
- count bounded while the sampled points stay representative of the full plotted distribution; a
41
- localized "showing N of M" notice appears in `[part="limit"]`. `bounds` and the cluster legend
42
- still derive from the complete `points` array, so a decimated view keeps the same scale and the
43
- same complete legend as the full plot. The selected point is always drawn, even when the sample
44
- skipped it. An assignment too large for one collection snapshot (10,000 entries / 50,000 values) is
45
- itself sampled evenly across its whole length, and the notice counts the full input.
113
+ count bounded. This index sample does not guarantee spatial extrema or every cluster. A localized
114
+ "showing N of M" notice appears in `[part="limit"]`. Bounds and the cluster legend derive from the
115
+ admitted snapshot; a selected point in that snapshot is drawn even when the render sample skipped
116
+ it. An assignment too large for one collection snapshot (10,000 entries / 50,000 values) first
117
+ selects a bounded set of evenly spaced candidate identities across its whole length, then resolves
118
+ each candidate's first valid occurrence in cancelable chunks. The notice counts the full input,
119
+ but bounds, clusters, and selectable identities remain limited to that admitted snapshot.
120
+ The last completed view stays visible with `aria-busy` until the replacement is ready; activating
121
+ one of its points still emits that displayed point. Keep pending source arrays and records stable,
122
+ or reassign/explicitly call `requestUpdate()` to restart inspection. Replacement and disconnect
123
+ cancel unfinished work, and reconnect resumes from the current source.
46
124
 
47
125
  **Events:** `lr-point-select` (`{ point }`), activated by click or Enter/Space (not on key repeat).
48
126
 
49
127
  **CSS parts:** `base`, `plot`, `point`, `legend`, `legend-item`, `legend-swatch`, `legend-label`,
50
- `limit` (the "showing N of M" render-cap notice, present only above 1,000 points), `empty`.
128
+ `limit` (the "showing N of M" sampling notice), `empty`.
129
+ Spatial-source parts: `bin` (a focusable density region, separate from representative point
130
+ overlays) and `error` (invalid or unavailable spatial-source feedback).
51
131
 
52
132
  **Themeable custom properties:** `--lr-embedding-explorer-selected-stroke` (default
53
133
  `var(--lr-color-brand)`) — stroke color of the selected point; `--lr-embedding-explorer-height`
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `emoji-picker-element-data` — see `llms/peers.md`
12
- - **Themeable via** 18 parts, 28 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 19 parts, 28 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
  ---
@@ -28,6 +28,11 @@ reloads it. This only applies to the built-in dataset, never to a consumer-suppl
28
28
  When the filtered set reaches 200 items, the grid automatically windows its visible rows while
29
29
  preserving the full option count through `aria-setsize`/`aria-posinset`.
30
30
 
31
+ `groups` retains at most 64 groups, 20,000 emoji items in total and 64 shortcodes per item. The
32
+ localized `limit` part reports omitted input through `emojiPickerInputLimit`. Built-in datasets
33
+ are admitted once per loaded dataset and shared as frozen snapshots; caller assignments retain
34
+ their owned snapshot behavior.
35
+
31
36
  Removing `label`, `hint`, or `error-text` treats the removed value as absent for rendering while
32
37
  preserving native attribute-removal property readback. Host `aria-describedby` references resolve in
33
38
  the host root onto the value-owning listbox before its local error/hint guidance. Target
@@ -107,7 +112,7 @@ transferring focus, so End and long row jumps never strand focus on a removed vi
107
112
  **Slots:** `label` (custom label content), `hint` (custom hint content), `error` (custom error
108
113
  content, overrides the `errorText` attribute when provided).
109
114
 
110
- **CSS parts:** `form-control` (the outer wrapper around label, `base`, error and hint),
115
+ **CSS parts:** `limit` (input-loss notice), `form-control` (the outer wrapper around label, `base`, error and hint),
111
116
  `form-control-label` (the visible label), `base`, `search-wrapper` (the row wrapper around
112
117
  `search` and `search-clear`), `search` (`role="combobox"`), `search-clear` (clears the search
113
118
  field, replacing the native search-cancel glyph the component resets; rendered only while it has a
@@ -19,20 +19,37 @@
19
19
  Its native search field honors the shared `--lr-input-*` search hooks and `--lr-icon-button-*` action hooks listed in the component reference.
20
20
 
21
21
  Filterable and taggable evaluation-example list with add, remove, import, and export affordances.
22
- If the public collection boundary truncates an oversized dataset, `[part="limit"]` names the
22
+ With `dataSource` unset, if the public collection boundary truncates an oversized dataset, `[part="limit"]` names the
23
23
  number of retained examples. Pagination within those examples remains available in the table.
24
24
 
25
25
  **Properties:**
26
26
 
27
+ - `dataSource: EvalDatasetSource | undefined` (property only) — a host-owned full
28
+ logical source; takes display precedence over `examples`. Invalid defined sources fail visibly;
29
+ unsetting restores the current legacy examples without overwriting their getter.
30
+ - `sourcePage: number = 0` (`source-page`) — zero-based source page.
31
+ - `sourcePageSize: number = 100` (`source-page-size`) — source page size, normalized to 1–500.
32
+ - readonly `sourceTotal: number | null` — exact accepted query total, or `null` until a current
33
+ authoritative result is available.
34
+
27
35
  - `examples: readonly EvalExample[] = []` (attribute: false) — `EvalExample { id: string; input: string;
28
36
  expectedOutput?: string; tags?: readonly string[]; metadata?: Record<string, unknown> }` (exported here).
29
37
  It is a dedicated dataset-row shape; no shared agent type models a labeled evaluation row.
30
38
  `input`/`expectedOutput` are plain
31
39
  strings (not structured payloads), rendered as plain text by every column's `cell()`. Fully
32
40
  controlled: add/remove/import/export are all _requests_; the host mutates and passes the array
33
- back. Empty/blank ids and later duplicate ids are omitted before selection, filtering, mutation requests, and the
41
+ back. The bounded readonly outer snapshot retains at most the first 10,000 examples; records and
42
+ opaque `metadata` retain identity. Reassign `examples` after editing records, including when
43
+ reusing the same source array. A keyless `requestUpdate()` also refreshes the normalized rows and
44
+ search corpus. Other clone-owned collections retain the 10,000-entry/50,000-node safety budgets.
45
+ Empty/blank ids and later duplicate ids are omitted before selection, filtering, mutation requests, and the
34
46
  nested grid are derived. Distinct tag chips are ordered with the component's effective-locale
35
- collation
47
+ collation; at most 500 distinct tags render. Active tags reserve places within that budget so
48
+ their deselection controls remain visible; the remaining places show the earliest unselected
49
+ tags. A localized `limit` note reports the omitted count. Search and tag filtering still use all
50
+ admitted examples and tags, including tags
51
+ outside the displayed facet window. Filtering and the tag corpus are reused across unrelated
52
+ disabled or selection changes
36
53
  - `searchable: boolean = false` (reflected) — built-in free-text search over `input`,
37
54
  `expectedOutput`, and `tags` (case-insensitive substring)
38
55
  - `autocomplete: string = ''`, `spellcheck: boolean = true`, `autocapitalize: string = ''`,
@@ -50,6 +67,38 @@ expectedOutput?: string; tags?: readonly string[]; metadata?: Record<string, unk
50
67
  localized `evalDatasetLabel`. A host `aria-label` remains on the custom-element host as its
51
68
  overall name and is not cloned onto the independently interactive grid
52
69
 
70
+ The provider query type is `EvalDatasetSourceQuery { readonly search: string;
71
+ readonly tags: readonly string[]; readonly sortKey: string | null;
72
+ readonly sortDir: 'asc' | 'desc' }`.
73
+
74
+ **Full-source paging:** `EvalDatasetSource = LyraPageSource<EvalExample, EvalDatasetSourceQuery>`;
75
+ both types are exported from the component entry and package root. `EvalDatasetSourceQuery`
76
+ contains `search`, readonly `tags`, `sortKey: string | null`, and `sortDir: 'asc' | 'desc'`.
77
+ The provider owns complete-source text filtering, OR-tag filtering combined with that text query,
78
+ and ordering. The nested table uses server sorting and one-based paging while `sourcePage` remains
79
+ zero-based. Query and page-size changes reset source page zero; an invalid page receives at most
80
+ one corrective last-page request. Loading, unknown totals and failures use the composed table's
81
+ localized states; stale rows cannot be activated.
82
+
83
+ The shared `LyraPageSource` contract comes from `@aceshooting/lyra-ui/data-sources.js`. Its page
84
+ must include explicit global `tags` metadata, even for an empty catalogue. Facets have
85
+ `{ values, total, unavailableSelected }`; at most 500 values retain global labels and counts.
86
+ Available active tags must reserve positions in that budget so they remain removable. Only
87
+ `unavailableSelected`, not absence from one page, removes an active filter. Source rows allow at
88
+ most 500 tags and 65,536 display-text UTF-16 units per row; opaque `metadata` is not traversed or
89
+ rendered. Invalid or oversized responses fail visibly rather than becoming a partial dataset.
90
+
91
+ Source page/query transitions clear the private selected example once, keeping Remove restricted
92
+ to a visible current row. Existing import/export/add events remain requests for the host; export
93
+ does not silently serialize just the loaded page. A source-mode sort both issues the provider
94
+ query and preserves the single existing `lr-sort` pass-through event. `disabled` also prevents
95
+ source sorting and mutations. Instance `strings` reach the composed table.
96
+
97
+ The source is retained by identity. Reassign it, including the same object, or call unnamed
98
+ `requestUpdate()` after source/revision mutation. Replacement, explicit refresh, locale change,
99
+ disconnect and adoption revoke obsolete responses; unrelated named presentation updates reuse
100
+ the current data. No million-row snapshot or whole-source filter/index is created by this route.
101
+
53
102
  **Events:** `lr-example-select` (`detail: { exampleId: string | null }`),
54
103
  `lr-example-add-request` (`detail: null` — no payload; `emit()`
55
104
  normalizes an omitted detail to `null`, never `undefined`), `lr-example-remove-request` (`detail: { exampleId:
@@ -59,12 +108,12 @@ format: string }`), and the deliberate nested-table pass-through `lr-sort` (`det
59
108
  re-dispatched (no detail) when the internal search field (only rendered while `searchable`) gains or
60
109
  loses focus, since native focus neither bubbles nor crosses the shadow boundary.
61
110
  All three built-in columns are sortable; activating one of their headers produces that commit for
62
- the host to apply to its controlled `examples` array.
111
+ the host to apply to its controlled `examples` array, or for the source to order its query result.
63
112
 
64
113
  **CSS parts:** `base`, `toolbar`, `search`, `search-input` (the composed `lr-input type="search"`),
65
114
  `search-input-field` (its native `<input>`), `search-clear` (its clear button, rendered only while the field has text), `tag-filter`,
66
- `grid`, `add-button`, `remove-button`, `limit` (shown when the source examples exceed the snapshot
67
- cap), `import` (the internal `compact` `lr-file-input`; its
115
+ `grid`, `add-button`, `remove-button`, `limit` (shown for source examples beyond the snapshot
116
+ cap or distinct tags beyond the 500-facet ceiling), `import` (the internal `compact` `lr-file-input`; its
68
117
  dropzone text and accessible name are the localized `evalDatasetImportLabel`), `export`.
69
118
 
70
119
  **Themeable custom properties:** the built-in search field is a composed `lr-input`, so it is themed through the shared `--lr-input-*` and `--lr-form-control-*` tokens (the former `--lr-eval-dataset-search-*` hooks are removed).
@@ -72,7 +121,7 @@ The search field remains a filter toolbar, with the native editing hints listed
72
121
 
73
122
  **Known gotchas:**
74
123
 
75
- - Shrinking `examples` out from under live UI state is handled: a `selectedId` that no longer matches
124
+ - With `dataSource` unset, shrinking `examples` out from under live UI state is handled: a `selectedId` that no longer matches
76
125
  any row resets to `null`, and an active tag filter that no longer matches any row's `tags` is
77
126
  dropped rather than silently matching zero rows forever.
78
127
  - A search or tag filter that hides the selected row also clears that selection and emits
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md); family-wide breaking-change summaries: [agent-tools](https://github.com/aceshooting/lyra-ui/blob/main/packages/lyra-ui/llms/agent-tools.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** `shiki` — see `llms/peers.md`
12
- - **Themeable via** 9 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 12 parts, 0 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,6 +30,85 @@ The table uses `label` or the localized purpose-specific evaluation-runs name. A
30
30
  on `<lr-eval-result>` remains the overall host name and is not cloned onto the independently
31
31
  interactive table; use `label` to distinguish several comparison grids on one page.
32
32
 
33
+ **Full-source comparison runs:** `dataSource: EvalResultSource | undefined`
34
+ (attribute: false) takes precedence over `runs`; invalid defined providers fail visibly.
35
+ Setting `undefined` restores current legacy runs. `sourcePage: number = 0` (`source-page`) is
36
+ zero-based; `sourcePageSize: number = 100` (`source-page-size`) normalizes to 1–500. Readonly
37
+ `sourceTotal: number | null` is the accepted current-query total, or null while unavailable/without
38
+ a source. Page-size and accepted sort changes reset page zero. An out-of-range page receives at
39
+ most one corrective last-page request.
40
+
41
+ ```ts
42
+ import type { EvalResultSource, EvalResultSourceQuery, EvalRunResult } from
43
+ "@aceshooting/lyra-ui/components/agent-tools/eval-result/eval-result.class.js";
44
+ import type { LyraPageSource, LyraPageResult, LyraSourceRecord } from
45
+ "@aceshooting/lyra-ui/data-sources.js";
46
+ ```
47
+
48
+ `EvalResultSource` is `LyraPageSource<EvalRunResult, EvalResultSourceQuery>`. The immutable provider
49
+ revision is a nonempty string or finite number. `query({ revision, locale, signal, page, pageSize,
50
+ query })` returns `{ rows, total }`; query is `{ sortKey: string | null, sortDir: 'asc' | 'desc' }`,
51
+ initially null/asc. Each record is `{ key, order, value }`, with `key === value.id`, nonblank original
52
+ ID and safe canonical source `order`; page keys/orders are unique and rows exactly fill the
53
+ requested in-bounds page. `lookup(keys, context)` returns complete globally present requested
54
+ records, omitting absent IDs; `locate(key, query, context)` supplies the shared page-source
55
+ contract but ordinary comparison paging does not use it. Provider order/sorting applies globally,
56
+ without sorting a partial page locally.
57
+
58
+ Source mode forwards the table's original cancelable `lr-sort-request`
59
+ `{ phase: 'request', sortKey, sortDir }` and accepted `lr-sort`
60
+ `{ phase: 'commit', sortKey, sortDir }` once. Veto prevents a source order change; only a current
61
+ commit updates the server query and resets page zero. These sort events remain contained in the
62
+ legacy route. Existing columns define the sorting choices rather than a new sort property API.
63
+
64
+ `selectedRunId` and `baselineRunId` stay fully controlled and are never rewritten. A null ID means
65
+ the first global row of the current query, not the first row of whichever page is displayed.
66
+ Starting on a nonzero page can therefore request a size-one page-zero primer before the requested
67
+ page; only its fallback key is retained and its row/total never becomes the displayed page.
68
+ Paging preserves that fallback; sort/locale/source refresh recomputes it. Explicit selected and
69
+ baseline IDs resolve off-page through one deduplicated lookup of at most two keys. A missing
70
+ explicit ID does not fall back to the first row; an absent selection suppresses review/diff, while
71
+ missing baseline retains the existing selected-output comparison behavior. Empty-source success
72
+ and failed lookup remain distinct. Controlled ID changes and fallback resolution emit no activation.
73
+ Same-revision paging/sorting and locale-only formatting retain explicit comparison records;
74
+ source revision/rebind/lifecycle changes revoke old pair data before it can drive review/diff.
75
+
76
+ The current page holds at most 500 rows and the selected/baseline cache at most two records;
77
+ pending replacement work is separately bounded by those same limits. There is no full runs array
78
+ or secondary corpus. Page, selected-pair and locate work share the source's existing fixed
79
+ lanes: one physical call per lane plus only the latest queued intent. The primer uses the same
80
+ page lane, and ignored aborts keep physical permits until settlement. Fixed own-data fields
81
+ `id`, `label`, optional `model`/`promptVersion` and `output` share a 65,536 UTF-16-unit row budget;
82
+ a missing streaming output becomes `''`. Oversized/accessor-backed rows reject without clipping.
83
+ Keys are at most 65,536 units and share the page helper's 2,000,000-unit key admission budget.
84
+
85
+ Source `scores`/`review` dictionaries remain complete opaque provider references. Custom column
86
+ cell/style/title/value callbacks and footers receive borrowed original provider records; built-in
87
+ identity/diff/review uses closed frozen projections. Source `lr-run-activate { runId, run }`
88
+ freezes the event envelope/run shell while preserving the complete scores/review identities,
89
+ without deeply cloning or freezing those maps. Legacy activation retains its whole-detail deep
90
+ snapshot and existing exhaustion-to-null behavior. Built-in review reads only configured
91
+ `rubricKeys`, bounded to 10,000 combined scalar/category entries and 65,536 UTF-16 text units;
92
+ it never JSON-serializes the complete source review dictionary. Existing review events retain
93
+ original run IDs and their current selected-pair ownership. Disabled review stays inactive while
94
+ the comparison grid remains usable.
95
+
96
+ Initial source loading uses `source-status`. Current page errors/retry use the composed table;
97
+ selected/baseline or review-projection failure uses `selection-status`/`selection-retry` and retries
98
+ the pair without refetching the page. Initial failure is quiet; later page failures are announced
99
+ by the table and pair failures by the parent, without duplicated announcements. Reassign even the
100
+ same source, or call a keyless `requestUpdate()`, after revision/state changes. Named presentation
101
+ updates reuse accepted records. Source/lifecycle replacement and obsolete page/pair changes revoke
102
+ old controls, callbacks and review effects. The following run-array normalization/fallback details
103
+ apply to the legacy route; columns/rubric/presentation contracts apply to both.
104
+
105
+ **Exported source query declaration:**
106
+
107
+ `EvalResultSourceQuery {
108
+ readonly sortKey: string | null;
109
+ readonly sortDir: 'asc' | 'desc';
110
+ }`
111
+
33
112
  **Properties:**
34
113
 
35
114
  - `runs: EvalRunResult[] = []` (attribute: false) — `EvalRunResult { id: string; label: string;
@@ -47,9 +126,10 @@ model?: string; promptVersion?: string; output: string; scores?: RubricValue; re
47
126
  - `label: string = ''` — accessible name for the independently interactive comparison grid;
48
127
  falls back to the localized evaluation-runs name when unset
49
128
  - `selectedRunId: string | null = null` (attribute `selected-run-id`) — the run open for review and the diff's
50
- **new** side; falls back to `runs[0]?.id` when empty
129
+ **new** side; null falls back to the first legacy run, or the first global current-query run
130
+ in source mode
51
131
  - `baselineRunId: string | null = null` (attribute `baseline-run-id`) — the run compared against and the
52
- diff's **old** side; falls back to `runs[0]?.id` when empty
132
+ diff's **old** side; null uses the same first-run fallback described above
53
133
  - `reviewSkippable: boolean = false` (attribute `review-skippable`) — shows a Skip control on the
54
134
  review form (forwarded to `lr-rubric-form.skippable`)
55
135
  - `disabled: boolean = false` (reflected) — disables the review form's controls only; the comparison
@@ -59,6 +139,11 @@ model?: string; promptVersion?: string; output: string; scores?: RubricValue; re
59
139
  string; value: RubricValue }`), `lr-review-validity-change` (`detail: { runId: string; valid:
60
140
  boolean; errors: Record<string, string> }`), `lr-review-submit` (`detail: { runId: string; value:
61
141
  RubricValue }`), `lr-review-skip` (`detail: { runId: string }`).
142
+ In source mode, `lr-sort-request` is the original cancelable table proposal with frozen
143
+ `TableSortRequestDetail { phase: 'request', sortKey, sortDir }`; `sortDir` is `'asc' | 'desc'`.
144
+ `lr-sort` is the accepted, noncancelable table commit with frozen
145
+ `TableSortCommitDetail { phase: 'commit', sortKey, sortDir }`. Preventing the request suppresses
146
+ the commit and leaves the current source sort unchanged.
62
147
 
63
- **CSS parts:** `base`, `empty`, `grid`, `diff`, `diff-view`,
148
+ **CSS parts:** `base`, `empty`, `grid`, `source-status`, `selection-status`, `selection-retry`, `diff`, `diff-view`,
64
149
  `diff-labels`, `diff-label-old`, `diff-label-new`, `review`.
@@ -19,7 +19,7 @@
19
19
  CSV/JSON download button with extensible event-driven formats — either single-format (click exports
20
20
  immediately) or multi-format (click opens a small menu).
21
21
 
22
- The format menu follows the [shared surface treatment](shared/styles-and-tokens.md).
22
+ The format menu follows the [shared surface treatment](../shared/styles-and-tokens.md).
23
23
 
24
24
  **Properties:**
25
25