@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)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 2 parts, 0 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 8 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
  ---
@@ -19,6 +19,44 @@
19
19
  A file-explorer preset over `<lr-tree>` + `<lr-file-icon>`: path-keyed nodes with
20
20
  git-status/diff-count badges, lazy directory loading, and select/open events.
21
21
 
22
+ **Provider hierarchy:** `treeSource: FileTreeSource | undefined` (attribute: false)
23
+ uses `LyraHierarchySource<FileTreeNode, LyraHierarchyQuery>` from
24
+ `@aceshooting/lyra-ui/data-sources.js`. A defined source takes precedence over `nodes`, preserving
25
+ its identity; invalid defined input shows a localized source error. Setting `undefined` restores
26
+ the current legacy `nodes` input. Reassign even the same source, or call a keyless
27
+ `requestUpdate()`, after revision/provider-state changes. Locale, reconnect and adoption refresh
28
+ the source; unrelated named display updates do not.
29
+
30
+ The provider projects the complete visible preorder using the same `project` actions, fixed empty
31
+ query and required direct key lookup described for `lr-tree` above. `total` includes collapsed
32
+ nodes and `rows.count` counts all visible logical rows. Those counts can describe a million-node
33
+ host hierarchy while at most 301 rows mount and at most 401 rows are retained (four 100-row pages
34
+ and one focused row). Each range read requests at most 100 rows, with at most two physically
35
+ pending reads. No full path/ancestor index or nested subtree copy is built. The provider owns
36
+ storage, global uniqueness, selection/expansion snapshots and cancellation; source replacement
37
+ and obsolete replies cannot commit old rows or focus.
38
+
39
+ Global row keys must exactly equal `value.path`: nonblank strings of at most 65,536 UTF-16 units,
40
+ preserved verbatim without filesystem resolution. Paths are identities, not permission to read or
41
+ open a file; the host authorizes any resulting operation. Displayed `name`/`mimeType` use at most
42
+ 65,536 aggregate text units per row; oversized or accessor-backed fields fail visibly. Source
43
+ events contain only bounded frozen displayed metadata, with no `children`. The provider's
44
+ `childCount` identifies branches even when `kind` is omitted; branches never emit file-open.
45
+ Nested `value.children` is ignored. Logical depth, sibling positions, bounded keyboard navigation,
46
+ localized loading/empty/error states and retry follow the source tree contract above. The legacy
47
+ snapshot limits below remain separate from this route; `maxNodes` does not raise its source window.
48
+
49
+ **Controlled source selection:** an accepted user selection updates `selectedPath` and emits
50
+ `lr-file-select`. Activating an already-selected leaf file also emits `lr-file-open`, provided the
51
+ same source/projection is still current after the selection listener returns. The provider owns
52
+ the authoritative selected flags. External `selectedPath` changes submit an item selection after
53
+ the initial projection, without synthetic user events or moving focus; clearing it deselects the
54
+ previously controlled key. The default `null` does not request a global clear. A current valid path
55
+ is reconciled again after source replacement, rebind or refresh. Invalid empty/blank/oversized
56
+ controlled paths are not forwarded. This adapter has no source search/copy controls.
57
+
58
+ With `treeSource` undefined, the following snapshot and lazy-directory route applies.
59
+
22
60
  An unreadable optional field rejects only that file record; it cannot reserve the path against a
23
61
  later valid occurrence. Valid siblings retain their source order within the existing depth and
24
62
  inspected-position budgets.
@@ -26,7 +64,10 @@ inspected-position budgets.
26
64
  **Properties:** `nodes: readonly FileTreeNode[] = []` (attribute: false; clone-owned/frozen,
27
65
  cycle-safe snapshot omitting empty/blank paths and retaining the first successfully admitted occurrence of each path, bounded to
28
66
  the first 10,000 inspected source positions across 64 descendant levels; reassign after changes;
29
- rebinding the same array is a no-op). The composed `<lr-tree>` holds at most 1,000 rows: when the
67
+ rebinding the same array is a no-op). `maxNodes: number = 1000` (attribute `max-nodes`) sets the
68
+ composed tree's row budget, normalized to `1..10000`; unset or non-finite values restore 1,000.
69
+ The source budget remains 10,000 inspected positions. The composed `<lr-tree>` holds at most
70
+ `maxNodes` rows: when the
30
71
  whole listing is larger, each collapsed directory is projected as a single lazy row whose children
31
72
  load from the snapshot when it expands, so every top-level entry stays reachable;
32
73
  `selectedPath: string | null = null` (attribute `selected-path`), and `label?: string` — an
@@ -35,12 +76,14 @@ back to the localized default while an explicitly empty string renders as an emp
35
76
  `additions`/`deletions` are normalized once to finite nonnegative integers before localized visible
36
77
  and accessible diff summaries. A host `aria-label` wins by presence when naming the internal tree,
37
78
  including an explicit empty string; removing it restores `label` or the localized fallback.
79
+ Derived rows are reused until their data, locale or limit changes; selecting a different path
80
+ updates only the affected ancestor paths. An explicit `requestUpdate()` refreshes derived content.
38
81
 
39
82
  **Read-only getters:** `dataTruncated: boolean` — `true` when normalization omitted a malformed,
40
83
  duplicate, cyclic, over-depth or over-budget entry, or when the directories currently expanded hold
41
- more rows than the composed tree's 1,000-row budget.
84
+ more rows than the composed tree's configured row budget.
42
85
  When source normalization reaches its 10,000-node cap, the host shows a localized `limit` part;
43
- the composed tree shows its own 1,000-item notice when its valid-node cap is reached.
86
+ the composed tree shows its own notice when its configured valid-node cap is reached.
44
87
 
45
88
  **Lazy directories:** a directory with `hasChildren: true` and no `children` uses `<lr-tree>`'s own
46
89
  lazy lifecycle: expanding it shows the row's busy spinner (`aria-busy`), emits `lr-load-children`
@@ -49,13 +92,24 @@ children; an empty result ends the busy state without expanding. No placeholder
49
92
 
50
93
  **Methods:** `setChildren(path, children)` supplies a lazily-loaded directory's children.
51
94
  `revealPath(path)` expands every ancestor directory and scrolls the target row into view, resolving
52
- `true` once found. `expandAll()` and `collapseAll()` forward to the underlying `<lr-tree>`.
95
+ `true` once found in legacy mode. In source mode it delegates to
96
+ `revealSourceKey(key: string): Promise<boolean>`, which requests a provider reveal and focuses its
97
+ current visible row; missing/invalid/obsolete requests resolve `false`. The provider must return a
98
+ valid `focusIndex` for successful reveal. `expandAll()` and `collapseAll()` forward to the underlying
99
+ `<lr-tree>` only in legacy mode and are no-ops in source mode. `setChildren()` updates the legacy
100
+ `nodes` input; it does not mutate the provider. Source branch toggles use `project(toggle)` rather
101
+ than `lr-load-children`.
53
102
 
54
103
  **Events:** `lr-file-select` (frozen readonly `detail: { filePath, node }`, a row was activated),
55
104
  `lr-file-open` (frozen readonly `detail: { filePath, node }`, Enter/click on an already-selected file
56
105
  row), and `lr-load-children` (frozen readonly `detail: { filePath }`, a lazy unloaded directory
57
- expanded). The composed tree's own `lr-expand`, `lr-collapse`, `lr-after-*`, `lr-lazy-*` and
106
+ expanded, legacy mode only). Source select/open keep the same `{ filePath, node }` shape, with
107
+ `node` limited to the displayed record rather than a complete subtree. The composed tree's own
108
+ `lr-expand`, `lr-collapse`, `lr-after-*`, `lr-lazy-*` and
58
109
  `lr-selection-change` events stay inside the component.
59
110
 
60
111
  **CSS parts:** `base` — the root wrapper; `limit` — localized notice when the source listing
61
112
  exceeds its 10,000-item snapshot.
113
+ Source mode retains `base` and adds `tree` on the semantic root, plus `source-list`, `source-row`,
114
+ `source-toggle` (branch and retry buttons), `source-label`, `source-status`, and `source-error`.
115
+ The root owns the accessible name/busy state, and each flat source row owns logical treeitem ARIA.
@@ -52,6 +52,9 @@ Country/language flag image. Flag artwork ships in a **separate, optional peer p
52
52
 
53
53
  Exported authoring types are `LyraFlagShape`, `LyraFlagFidelity`, and `LyraFlagUrlResolver`.
54
54
 
55
+ Concurrent flags resolving the same country and fidelity share pending resolver work within the
56
+ current resolver generation. Settled or failed requests do not prevent later retries.
57
+
55
58
  **Events:** none.
56
59
 
57
60
  **Slots:** `fallback` — rendered in place of the flag when `country`/`language` cannot resolve to a
@@ -107,8 +110,8 @@ exported:
107
110
  itself (`'fr'` → `français`, `'pt-BR'` → `português (Brasil)`). That is what a language switcher
108
111
  should list, so a reader who understands none of the current UI language can still find their own.
109
112
  It derives from `Intl.DisplayNames`, so no name table ships with the library and results follow the
110
- browser's own ICU data; the underlying instance comes from a shared memoized cache, since a picker
111
- does one lookup per offered locale on every render pass. A tag with no display name resolves to the
113
+ browser's own ICU data. The underlying formatter and resolved native names are cached, so repeated
114
+ catalog renders reuse prior results. A tag with no display name resolves to the
112
115
  tag itself, and so does a structurally invalid one — `Intl.DisplayNames` throws a `RangeError` on
113
116
  those rather than falling back, and a language picker should degrade to showing the raw tag rather
114
117
  than tearing down the render. Pair it with `languageToCountry()` for the flag half of the same row.
@@ -9,7 +9,7 @@
9
9
  - **Release history** [CHANGELOG.md](../../CHANGELOG.md)
10
10
  - **Deprecations** none
11
11
  - **Optional peers** none
12
- - **Themeable via** 29 parts, 17 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 36 parts, 17 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,13 +18,26 @@
18
18
 
19
19
  A pannable/zoomable DAG workflow canvas: positions HTML node cards, draws SVG edges between their
20
20
  handles, runs a shared layered auto-layout for unpositioned nodes, and owns all selection/drag/
21
- connect interaction. It is readonly by default; opt into editor gestures with `nodes-draggable`,
21
+ connect interaction. Editor gestures are opt-in with `nodes-draggable`,
22
22
  `connectable`, and `droppable`. The component snapshots model inputs instead of retaining mutable
23
23
  caller aliases, and reports edit intent for the host to apply.
24
24
 
25
- Input/output handle IDs are reserved only after their complete handle record is admitted; unreadable
25
+ With `graphSource` unset, node cards and edges outside the visible viewport are culled. Active and selected nodes, active
26
+ and selected edge endpoints, connection targets and their incident edges remain available.
27
+ Keyboard navigation retains the complete model order and pans to reveal its destination. Panning
28
+ queries retained geometry indexes; companion snapshots contain the complete admitted model.
29
+ Viewport culling preserves existing collection-admission limits and controlled model semantics.
30
+ Without a measurable viewport, including during SSR, the complete model is rendered.
31
+
32
+ For legacy array inputs, input/output handle IDs are reserved only after their complete handle record is admitted; unreadable
26
33
  optional labels cannot suppress a later valid handle with the same ID.
27
34
 
35
+ Legacy node metadata uses a shared 50,000-position inspection budget per node assignment, at most
36
+ 10,000 own keys per record and 16 descendant levels. Cloned JSON references and cycles are shared
37
+ across node data roots and frozen; non-plain leaves remain opaque. The `input-limit` part reports
38
+ node/edge or metadata admission loss separately from `layout-limit`. JavaScript key enumeration
39
+ itself can still scale with an individual object's key count.
40
+
28
41
  Anchored Lyra overlays in a node's slotted content (a node menu, a tooltip) resolve the `fixed`
29
42
  strategy by default, because a node is translated inside a scaled, clipped world where an
30
43
  `absolute` overlay could never extend past the canvas; a trapped `fixed` overlay opens in the
@@ -53,6 +66,121 @@ import type {
53
66
  } from "@aceshooting/lyra-ui/components/data/flow-canvas/flow-types.js";
54
67
  ```
55
68
 
69
+ **Complete workflow source:** `graphSource: FlowCanvasSource | undefined`
70
+ (attribute: false) takes precedence over `nodes`/`edges`. Only `undefined` restores the latest
71
+ legacy inputs; invalid defined providers fail visibly without falling back to those arrays.
72
+ Provider identity/revision is caller-owned; the canvas admits bounded records and scenes.
73
+
74
+ ```ts
75
+ import "@aceshooting/lyra-ui/components/lr-flow-canvas.js";
76
+ import type { FlowCanvasSource } from
77
+ "@aceshooting/lyra-ui/components/data/flow-canvas/flow-canvas.class.js";
78
+ import type { FlowNode, FlowEdge, FlowStructureSnapshot } from
79
+ "@aceshooting/lyra-ui/components/data/flow-canvas/flow-types.js";
80
+ import type { LyraGraphSource, LyraGraphSourceQuery, LyraGraphSourceSummary,
81
+ LyraGraphOverview, LyraSourceBounds } from
82
+ "@aceshooting/lyra-ui/data-sources.js";
83
+ ```
84
+
85
+ `FlowCanvasSource = LyraGraphSource<FlowNode, FlowEdge>`; the exact generic protocols are in
86
+ [shared source contracts](../shared/events-and-types.md). It provides `revision`, `records`,
87
+ `scene(request)` and optional `overview(request)`. Source and records revisions must agree and
88
+ be a nonempty string or finite number. `records` supplies `query`, `lookup` and `locate` for the
89
+ complete logical workflow, separately from the bounded positioned scene.
90
+
91
+ **Global record navigation:** `sourcePage: number = 0` (`source-page`) is zero-based;
92
+ `sourcePageSize: number = 100` (`source-page-size`) normalizes to 1–500. Readonly
93
+ `sourceTotal: number | null` is the accepted current record-query total, or null while unavailable
94
+ or without a source. Size/query changes reset page zero; an out-of-range page receives at most
95
+ one corrective last-page request and publishes the accepted corrected page. The navigator offers
96
+ nodes or edges, full-source search, incident-edge scope with in/out/both direction, endpoint
97
+ links, page entry/previous/next and global Home/End/Up/Down record navigation.
98
+
99
+ The navigator sends `LyraGraphSourceQuery`, initially
100
+ `{ kind: 'nodes', search: '', centerKey: null, direction: 'both', nodeTypes: [] }`.
101
+ Search is bounded to 65,536 UTF-16 units; these controls query the whole source rather than
102
+ filtering a loaded scene/page. `records.query({ revision, locale, signal, page, pageSize, query })`
103
+ returns `{ rows, total, summary: { nodes, edges } }`. Each row is `{ key, order, value }`, where
104
+ `value` is `{ kind: 'node', value: FlowNode }` or `{ kind: 'edge', value: FlowEdge }` and its key is
105
+ exactly `node:<id>` or `edge:<id>` with a nonblank original ID. Safe nonnegative canonical `order`
106
+ and keys are unique within a page; rows exactly fill the requested in-bounds page. The required
107
+ summary gives complete global node/edge counts; unfiltered total equals the matching summary
108
+ count, filtered/incident total cannot exceed it, and accepted scenes must agree with those counts.
109
+ Totals and summary counts are safe nonnegative integers.
110
+ Groups/tags are not accepted on this route. Invalid/duplicate/oversized responses fail atomically,
111
+ without local filtering, sorting or silent trimming. Record pages copy only bounded display fields
112
+ and edge endpoints; they do not materialize complete node metadata.
113
+
114
+ `revealSourceKey(key: string): Promise<boolean>` accepts canonical `node:<id>`/`edge:<id>`, clears
115
+ search/incident scope for that kind, uses global `locate`, loads the matching page and attempts to
116
+ focus its navigator row. It resolves false for unset/invalid/missing, failed or superseded work. This is
117
+ separate from synchronous `focusNode(id, options)`, which moves camera/focus only for a node
118
+ already known in the current scene and does not fetch globally. Reveal does not promise a camera
119
+ move or a new scene. Reveal, controlled paging/selection and rebind emit no activation or selection
120
+ event; actual row activation retains `lr-node-activate`/`lr-edge-activate` and selection payloads
121
+ with original IDs. Scene absence does not prove global record absence.
122
+
123
+ **Bounded scene and source geometry:** `scene` receives viewport bounds, at most 32 selected/focus
124
+ reservation keys, `nodeLimit: 500` and `edgeLimit: 1000`. It returns at most those exact node/edge
125
+ entries, global `total`, explicit `coverage: 'complete' | 'neighborhood' | 'aggregate'` and non-null
126
+ `worldBounds`. Requests include revision/locale/signal, `mode: 'viewport'`, `centerKey: null`,
127
+ `bounds` and `includeKeys`. Nodes require finite explicit entry positions inside authoritative world
128
+ bounds; an optional value position must agree. Position/world rectangle endpoints stay within ±1,000,000,
129
+ with nonnegative world dimensions and finite endpoints. Scene edge keys/endpoints must match
130
+ value IDs and resolve to nodes in that scene. Missing positions never trigger local auto-layout.
131
+ The same revision must keep world bounds and global totals consistent. `source-coverage` reports
132
+ shown versus global counts, rather than suggesting every record is drawn.
133
+
134
+ Source scenes preserve FlowNode type, accessible label, disabled state, input/output handles and
135
+ data, plus FlowEdge handles, label and tone. They read own data descriptors; accessors reject.
136
+ `data` accepts plain records/arrays of strings, finite numbers, booleans and null, with shared
137
+ references/cycles preserved in detached frozen copies. Opaque leaves such as functions or Dates
138
+ reject. Each container/handle collection allows at most 10,000 entries, descendant container depth
139
+ is at most 16, and metadata/handle inspection shares a 50,000-field scene budget. Each admitted
140
+ text/key is at most 65,536 UTF-16 units, with a 2,000,000-unit cumulative text ceiling per scene
141
+ or record-page response. Overflow fails the complete response without clipping. JavaScript's
142
+ eager own-key enumeration can still allocate/work in proportion to one input object's key count
143
+ before that object's entry limit is rejected; these bounds do not make provider work constant.
144
+
145
+ Provider-derived retained data covers the current record page (at most 500 rows), current scene
146
+ (at most 500 nodes/1,000 edges) and bounded geometry/overview. Controlled selection keeps its existing first-10,000
147
+ candidate-ID bound and preserves offscene IDs instead of pruning them by scene membership;
148
+ scene reservations are at most 32 keys. This route does not materialize the full provider workflow
149
+ or cache historic pages.
150
+ Page/locate work, scene and overview each keep their fixed request lanes, with one physical call
151
+ per lane and only the latest queued intent. Ignored aborts keep physical permits until settlement;
152
+ providers should settle promptly. Paging does not reset the camera or refetch an unchanged scene;
153
+ pan/zoom/resize changes the viewport scene without restarting the record query. Accepted overview
154
+ is reused across viewport changes.
155
+
156
+ Source mode disables model editing: drag/nudge/connect/drop/delete and full-array layout/model
157
+ mutations, including gestures started before the source was assigned. It does not force public
158
+ `readonly`; pan/zoom/navigation and minimap controls remain usable when unlocked. Public
159
+ `readonly` still locks viewport interaction and makes viewport-mutating methods inert. Source
160
+ mode emits no model-edit/layout event presenting a bounded scene as the complete workflow.
161
+ `fit()` frames accepted global world bounds; legacy `fit()` frames admitted node geometry.
162
+
163
+ Companion snapshots add optional
164
+ `source: Readonly<{ coverage: 'complete' | 'neighborhood' | 'aggregate'; total: LyraGraphSourceSummary;
165
+ worldBounds: LyraSourceBounds; overview: LyraGraphOverview | null }>` when accepted source bounds
166
+ are available. Their node/edge arrays remain bounded exact scene geometry. `locked` still means
167
+ public `readonly`. Optional `overview({ revision, locale, signal, limit: 1024 })` must describe
168
+ those exact world bounds with at most 1,024 finite contained nonoverlapping bins whose counts sum
169
+ to the global node total. Null/unavailable/rejected overview is distinct from accepted empty
170
+ bins; the minimap never invents a global overview from scene nodes. The frozen accepted overview
171
+ identity is shared across viewport notifications.
172
+
173
+ Reassign even the same source or call a keyless `requestUpdate()` after revision/state changes.
174
+ Named local presentation paints reuse accepted provider data unless source revision/effective
175
+ locale changed. Replacement, unset, disconnect and adoption revoke old provider callbacks, gestures
176
+ and effects; superseding query/reveal revokes obsolete record controls. Reconnect captures current
177
+ input. Source navigator/status parts are `source-navigator`, `source-controls`, `source-status`, `source-coverage`,
178
+ `source-records` and `source-record`. Loading, successful empty, missing record, record failure
179
+ and scene failure remain distinct localized states with current guarded retry controls.
180
+
181
+ The following array admission, legacy auto-layout and complete-model snapshot rules apply with
182
+ `graphSource` unset; source behavior is described above.
183
+
56
184
  **Properties:**
57
185
 
58
186
  - `nodes: readonly FlowNode[] = []` (attribute: false) — each record has readonly `id`, optional
@@ -85,13 +213,13 @@ import type {
85
213
  - `readonly: boolean = false` (reflected) — freezes pan/zoom/drag/connect without touching the other
86
214
  gesture flags. Enabling it during a pan, node drag, pointer/keyboard connection, or palette drop
87
215
  cancels the active preview, rolls pan/node geometry back, clears transient state, and retires the
88
- window pointer listeners so a later release cannot commit. The one-shot initial framing still
89
- applies to a `readonly` canvas, and waits until the canvas has a rendered size (a hidden tab or
216
+ window pointer listeners so a later release cannot commit. The legacy one-shot initial framing
217
+ still applies to a `readonly` canvas, and waits until the canvas has a rendered size (a hidden tab or
90
218
  closed dialog is framed when it is first shown).
91
219
  - `selectedNodeIds: readonly string[] = []`, `selectedEdgeIds: readonly string[] = []` (attribute:
92
220
  false) — seed or replace selection. Each assignment snapshots at most the first 10,000 ids,
93
- omits blank/later duplicates first-wins, and prunes identities absent from the current canonical
94
- node/edge model. Reassign after changes. Activation and clear-selection gestures update frozen
221
+ omits blank/later duplicates first-wins, and, with `graphSource` unset, prunes identities absent
222
+ from the current canonical node/edge model. Reassign after changes. Activation and clear-selection gestures update frozen
95
223
  arrays before emitting `lr-selection-change`; model shrinkage prunes stale ids without claiming
96
224
  a user selection gesture occurred.
97
225
  - `minZoom: number = 0.25` (attribute `min-zoom`), `maxZoom: number = 2` (attribute `max-zoom`)
@@ -109,21 +237,25 @@ import type {
109
237
  - `viewport` (readonly getter) — a frozen `{ x, y, zoom }` snapshot
110
238
 
111
239
  **Methods:** `setViewport({ x, y, zoom })`, `zoomIn()`, `zoomOut()`, `resetZoom()`,
112
- `fit(options?: { padding?: number })` (frames every node), `focusNode(id, options?: { zoom? })`
113
- (pans/zooms to one node and moves roving focus onto it), `toContentPoint(clientX, clientY)` (maps a
240
+ `fit(options?: { padding?: number })` (frames legacy admitted nodes or source global world bounds),
241
+ `focusNode(id, options?: { zoom? })` (pans/zooms to one currently known node and moves roving focus
242
+ onto it), `toContentPoint(clientX, clientY)` (maps a
114
243
  pointer position to content coordinates, RTL-aware), `registerCompanion(cb: (snapshot:
115
244
  FlowStructureSnapshot) => void): () => void` — the subscription `lr-flow-minimap` uses to read
116
245
  live node/edge/viewport geometry without this canvas ever importing the minimap.
246
+ `revealSourceKey(key: string): Promise<boolean>` provides the global record navigation described above.
117
247
  All viewport-mutating methods, including `focusNode()`, are inert while `readonly`; coordinate mapping
118
248
  and companion subscription remain available because neither mutates viewport or edit state.
119
249
  Each companion observer receives its own deeply frozen `FlowStructureSnapshot`: readonly node and
120
250
  edge geometry/status arrays (shared between observers and reused, by identity, across
121
251
  viewport-only frames until the structure changes), viewport `{ x, y, zoom, width, height, minZoom, maxZoom }`, and the
122
252
  effective `readonly` state (as the snapshot's `locked` key), `orientation`, `layerGap`, and `nodeGap`. Zoom bounds are finite, positive, and
123
- sorted even when public inputs are invalid or reversed.
253
+ sorted even when public inputs are invalid or reversed. Source snapshots additionally carry the
254
+ accepted `source` descriptor above; their scene arrays do not imply full-source coverage.
124
255
 
125
- **Events:** `lr-node-activate` (`detail: { nodeId }`), `lr-edge-activate` (`detail: { edgeId, source, target
126
- }`), `lr-selection-change` (`detail: { selectedNodeIds, selectedEdgeIds }`), `lr-node-move` (`detail: { nodeId,
256
+ **Events:** `lr-node-activate` (`detail: { nodeId }`), `lr-edge-activate` (`detail: { edgeId,
257
+ sourceNodeId, targetNodeId, source, target }`, both endpoint-name pairs are supplied),
258
+ `lr-selection-change` (`detail: { selectedNodeIds, selectedEdgeIds }`), `lr-node-move` (`detail: { nodeId,
127
259
  position, previous }`), `lr-connect` (`detail: { source, target, sourceHandle, targetHandle }`),
128
260
  `lr-node-add` (`detail: { type, position }`, from a palette drop), `lr-selection-delete`
129
261
  (`detail: { nodeIds, edgeIds }`), `lr-viewport-change` (`detail: { x, y, zoom }`),
@@ -131,7 +263,7 @@ position, previous }`), `lr-connect` (`detail: { source, target, sourceHandle, t
131
263
  previously unpositioned nodes). Every detail and nested coordinate/array is readonly and frozen.
132
264
 
133
265
  **Slots:** default (consumer-authored cards matched by `node-id` and assigned to generated
134
- `node-{id}` slots), `top-start`, `top-end`, `bottom-start`, `bottom-end`. Each node always has a
266
+ `node-{id}` slots), `top-start`, `top-end`, `bottom-start`, `bottom-end`. Each rendered node has a
135
267
  declarative shadow-DOM fallback card, so SSR and hydration do not depend on imperative light-DOM
136
268
  card creation. An authored card replaces only its matching fallback; unmatched cards are unslotted
137
269
  with a warning. Opposite-side companion slots share wrapping rails in narrow allocations.
@@ -141,13 +273,19 @@ with a warning. Opposite-side companion slots share wrapping rails in narrow all
141
273
  (a dangling-edge stub line), `connection-line` (in-progress connect gesture), `node`, `empty`,
142
274
  `node-control` (the native per-node roving/activation control), `live-region`, `edge-list` (a
143
275
  visually hidden list only for dangling/unrenderable edges), `layout-limit` (a visible notice whose
144
- announcement uses the shared light-DOM polite sink), `overlay-rail`, and the
276
+ announcement uses the shared light-DOM polite sink), `input-limit` (node/edge or metadata
277
+ admission notice), `overlay-rail`, and the
145
278
  fallback-card parts `node-card`, `node-card-base`, `node-card-surface`, `node-card-header`,
146
279
  `node-card-heading`, `node-card-status`, `node-card-progress`, `node-card-body`, `node-card-toolbar`,
147
280
  `node-card-handle`, `node-card-handle-input`, and `node-card-handle-output`. A node whose `type`
148
281
  normalizes to a safe part token also exposes `node-type-{value}`. A selected node wrapper carries
149
282
  `data-selected`; its hidden `node-control` exposes the state as `aria-pressed`.
150
283
 
284
+ With `graphSource` set, additional CSS parts are `source-navigator` (complete-source record navigation), `source-controls`
285
+ (query and page controls), `source-records` (the bounded current page), `source-record` (one record
286
+ with incident-edge or endpoint actions), `source-status` (record/scene loading, failure and count
287
+ text), and `source-coverage` (accepted scene coverage relative to complete node/edge totals).
288
+
151
289
  `live-region` is a visually hidden, `aria-hidden` mirror of the latest item/gesture message. The
152
290
  actual messages are flushed to the document's shared light-DOM polite sink; mount is silent, and
153
291
  identical repeated messages are appended as separate announcements.
@@ -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, 10 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 9 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
  ---
@@ -22,6 +22,32 @@ rectangle, for orientation and fast navigation on canvases larger than the scree
22
22
  geometry always comes from the canvas's `registerCompanion()` snapshots, so the two can never
23
23
  disagree.
24
24
 
25
+ For legacy snapshots, the minimap retains every admitted node. Its node overview and moving viewport use
26
+ separate SVG layers, so panning keeps the overview tree unchanged. Existing `node`, `viewport`
27
+ and `viewport-hit-area` parts remain available.
28
+
29
+ **Source companion:** when `FlowStructureSnapshot.source` is present, the minimap frames its
30
+ accepted global `worldBounds`, including negative origins and positive fractional extents; it
31
+ never infers source extent from the bounded scene-node array. Every positive axis keeps its exact
32
+ source dimension without legacy padding or a one-unit minimum. Only an exactly zero-width or
33
+ zero-height axis receives a centered one-unit SVG display extent; source coordinates are unchanged.
34
+
35
+ Only accepted `source.overview.bins` render, under `aggregate-bin`, at most 1,024 rectangles.
36
+ They describe the complete node population within the authoritative world bounds; scene-node
37
+ rectangles are not painted as a substitute global overview. The canvas owns overview validation
38
+ and freezing, and the minimap adds no provider query or second normalization. A missing/rejected
39
+ `overview: null` shows localized `source-unavailable` (default “Workflow overview unavailable”)
40
+ while world framing and unlocked viewport controls remain usable. Accepted empty bins are a
41
+ successful empty overview and do not show the unavailable state.
42
+
43
+ The immutable overview layer is reused by identity across viewport-only snapshots. Map clicks,
44
+ viewport drag, wheel zoom and physical arrow keys use the same exact source-world inverse
45
+ mapping, including RTL and zero-axis display fallback. A change in world coordinate values
46
+ cancels an active drag; cloned equal bounds do not. Old subscriptions/detached controls cannot
47
+ move a later canvas binding. `locked` continues to reflect public canvas `readonly`; the source
48
+ editing gate alone does not disable minimap navigation. Removing the provider restores the
49
+ legacy node-geometry overview.
50
+
25
51
  **Properties:**
26
52
 
27
53
  - `for: string = ''` — id of the target `lr-flow-canvas`; when empty, the nearest ancestor canvas
@@ -39,7 +65,9 @@ disagree.
39
65
  **Slots:** none.
40
66
 
41
67
  **CSS parts:** `base` (the root wrapper; drops its border, background and corner radius under
42
- `frame="plain"`), `map` (the scaled SVG), `node` (one rect per node), `viewport` (the
68
+ `frame="plain"`), `map` (the scaled SVG), `node` (one rect per legacy node),
69
+ `aggregate-bin` (one accepted source overview rectangle), `source-unavailable` (missing source
70
+ overview message), `viewport` (the
43
71
  exact visible view rectangle), `viewport-hit-area` (the transparent draggable/focusable target),
44
72
  `instructions` (visually hidden keyboard help), and `live-region` (the `aria-hidden` mirror of the
45
73
  latest viewport-change text).
@@ -67,8 +95,8 @@ viewport-to-content ratio. The token inherits from ancestors; set it to `0` to o
67
95
  **Known gotchas:**
68
96
 
69
97
  - Never resolves `nodes`/`edges` on its own — it subscribes to `registerCompanion()` and repaints
70
- from whatever snapshot the canvas last pushed, so it can only ever show what the canvas itself
71
- currently renders.
98
+ from the complete admitted legacy geometry or the accepted source overview/world bounds the
99
+ canvas last pushed. Source scenes remain bounded and never substitute for a global overview.
72
100
  - A readonly canvas snapshot makes the hit area unfocusable and inert: no pointer, click, wheel, or keyboard
73
101
  shortcut can mutate the canvas.
74
102
  - Dragging the viewport rectangle calls the canvas's `setViewport()` directly; there's no separate
@@ -21,6 +21,12 @@ bar whose length is that stage's share of the **first** stage, read top-to-botto
21
21
  drop-off. It sits beside `lr-gauge` and `lr-heatmap` as an analytics primitive rather than a general
22
22
  chart type.
23
23
 
24
+ Supply `stages` and `comparison` as aggregate counts or measures computed across their complete
25
+ cohorts. A few stages can summarize one million underlying observations when each value includes
26
+ every applicable cohort member. The host or server performs the raw-event aggregation; the
27
+ component receives stage totals, and each comparison cohort normalizes to its own first stage.
28
+ The 500-stage rendering ceiling bounds stage cardinality independently of the observation count.
29
+
24
30
  When a positive finite stage value divided by a positive finite baseline overflows to `Infinity`,
25
31
  the main or comparison data fill clamps to 100%. Nonfinite input normalization, nonpositive-baseline
26
32
  behavior, percentage and drop-off text, and overflow border styling keep their existing rules.
@@ -32,6 +38,14 @@ Reach for `lr-bar-chart`/`lr-lite-chart` when you actually want a value axis and
32
38
  The whole chart is plain HTML — stage names, absolute values, shares and drop-off percentages are
33
39
  real text inside an `<ol>`, so there is no sighted-only drawing needing a separate transcript. The
34
40
  list carries the accessible name; a host `aria-label` overrides `label`.
41
+ Stage and comparison projections reuse their input identities. Reassign after changes, or call
42
+ `requestUpdate()` after mutating the current arrays. The component resolves at most the first 501
43
+ valid stages to detect overflow and renders at most 500.
44
+ Validation inspects at most 10,000 source positions per chunk and continues through malformed
45
+ entries until it reaches that valid-stage boundary or the end. The last completed chart stays
46
+ visible with `aria-busy` while a replacement is inspected. Keep pending source arrays and records
47
+ unchanged, or reassign/explicitly refresh to restart inspection. Replacement and disconnect cancel
48
+ unfinished work; reconnect derives the current input again.
35
49
 
36
50
  **Properties:**
37
51
 
@@ -23,18 +23,34 @@ The root and viewers family barrels still expose the same distinct `LyraGeojsonV
23
23
  for compatibility; importing it does not register the removed tag. Prefer the canonical class.
24
24
  The document registry renders `lr-geojson-viewer` for `application/geo+json` and `.geojson` filenames.
25
25
 
26
- Validates the parsed JSON is a `Feature`/`FeatureCollection`/bare geometry (one of `Point`,
27
- `LineString`, `Polygon`, `MultiPoint`, `MultiLineString`, `MultiPolygon`, `GeometryCollection`) before
28
- rendering; anything else renders the localized `geojsonViewInvalid` error. On success, it walks every
26
+ Responses are limited to 4 MiB (4,194,304 bytes) before `JSON.parse`. The parsed JSON must be a
27
+ `Feature`/`FeatureCollection`/bare geometry (one of `Point`,
28
+ `LineString`, `Polygon`, `MultiPoint`, `MultiLineString`, `MultiPolygon`, `GeometryCollection`);
29
+ anything else renders the localized `geojsonViewInvalid` error. On success, it walks every
29
30
  value and object key first, rejecting more than 50,000 graph units, nesting beyond 64 levels, more
30
- than 2 Mi UTF-16 units of aggregate keys/string values, or more than 4 Mi UTF-16 units of formatted
31
- metadata before serialization or peer handoff. It then walks every coordinate under a separate
31
+ than 2 Mi UTF-16 units of aggregate keys/string values, or more than 4,194,304 UTF-16 units of
32
+ formatted metadata. A size preflight rejects oversized pretty metadata before full serialization
33
+ or peer handoff. It then walks every coordinate under a separate
32
34
  10,000-position ceiling to compute a bounding box, seeds `center`/`zoom` from it as a placeholder, and
33
35
  frames the data with `<lr-map>.fitBounds()` (size-aware, padded, antimeridian-safe, no animation) once
34
36
  the map exists, then hands the parsed value to
35
- `<lr-map>` as a single `dataLayers` entry (`sourceId: 'lr-geojson'`). When the optional
37
+ `<lr-map>` as a single `dataLayers` entry (`sourceId: 'lr-geojson'`). The nested map explicitly uses
38
+ `engine="maplibre"`, preserving this viewer's native `maplibre-gl` peer contract independently of
39
+ `lr-map`'s modular default. There is no viewer engine-selection property. When the optional
36
40
  `maplibre-gl` peer isn't installed, it falls back to a status line plus a `<lr-json-viewer
37
- expand-depth="2">` of the raw value instead of the map.
41
+ expand-depth="2">` of the raw value instead of the map. The JSON-viewer fallback is registered
42
+ lazily only when the map peer is unavailable. Loaded documents survive disconnect/reconnect while
43
+ `src` is unchanged; changing `src` reloads the document.
44
+
45
+ **Large spatial datasets:** `src` remains a bounded GeoJSON document preview; it accepts neither a
46
+ tile manifest nor a catalog provider. For a million-record spatial source, keep records, indexing,
47
+ global counts and identity lookup in a host-owned service and compose a separate
48
+ [`lr-map`](./lr-map.md) with a tiled vector style through `mapStyle`. Query style-owned rendered
49
+ features through that map's public `map` getter, then fetch a bounded selected-feature overlay or a
50
+ deliberately sized GeoJSON preview document. Keep the full source total and preview scope visible
51
+ in the host interface. The preview's feature count describes only the admitted file, and its
52
+ metadata search does not traverse the full spatial service. This composition preserves all file,
53
+ geometry and text guards above.
38
54
 
39
55
  The root owns the named `region` landmark while loading, in fallback/error/idle states, and while a
40
56
  lazy map initializes. After `lr-map-load`, landmark ownership transfers to the map canvas so there
@@ -97,9 +113,10 @@ The canonical tag is registered by importing `components/lr-geojson-viewer.js` (
97
113
  `components/viewers/geojson-view/geojson-viewer.js`). The former `components/lr-geojson-view.js`,
98
114
  `components/viewers/geojson-view/geojson-view.js` and `geojson-view.class.js` routes were removed
99
115
  in 23.0.0. Applications using them to register the viewer must use the canonical tag-shaped route.
100
- Remote
101
- resources are capped at 25 MB; exceeding it surfaces the localized `documentPreviewResourceTooLarge`
102
- message instead of the map. Lyra supports MapLibre v5 and v6; consumers must import its CSS.
116
+ Remote resources are capped at 4 MiB (4,194,304 bytes) before JSON parsing; exceeding that bound
117
+ surfaces the localized `documentPreviewResourceTooLarge` message instead of the map. Lyra supports
118
+ native MapLibre v5 and v6; consumers must import its CSS and configure that peer before connecting
119
+ the viewer. Installing only `@aceshooting/lyra-map` does not satisfy this viewer's native peer contract.
103
120
  MapLibre v5's standard build includes its worker, while v6 is ESM-only, requires WebGL2, and needs
104
121
  its module-worker URL configured for the bundler before this viewer constructs the nested map. See
105
122
  `llms/components/lr-map.md` for the Vite v6 example and the other bundler variants.
@@ -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** `d3-drag`, `d3-force`, `d3-selection`, `d3-zoom` — see `llms/peers.md`
12
- - **Themeable via** 28 parts, 17 custom properties — see this component's own `@csspart`/`@cssprop` list below
12
+ - **Themeable via** 33 parts, 17 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,35 @@
18
18
 
19
19
  A node-link diagram whose default 2D force layout uses `d3-force`. Set `view="3d"` for an
20
20
  orbitable perspective view of real x/y/z positions, or `view="list"` for a visible, paginated
21
- list of all graph items. The 3D and list views require no optional peer.
21
+ list of all admitted graph items. The 3D and list views require no optional peer.
22
+
23
+ **Complete graph provider:** `graphSource: GraphSource | undefined` (attribute: false)
24
+ takes precedence over `nodes` and `edges`; an invalid defined source fails visibly. Setting
25
+ `undefined` restores the current legacy arrays. `GraphSource` is
26
+ `LyraGraphSource<LyraGraphNode, LyraGraphEdge & { readonly id: string }>`; see the
27
+ [shared graph-source protocol](../shared/events-and-types.md). Record keys are `node:<id>` or
28
+ `edge:<id>`, and source edges require explicit IDs. Reassign the source, even the same object,
29
+ or call `requestUpdate()` to refresh. The global record navigator remains available beside a
30
+ bounded diagram of at most 500 nodes and 1,000 edges, with up to 32 reserved active/focused keys.
31
+ Provider totals describe the complete source; scene coverage is disclosed separately, and
32
+ `fit()` frames only the current scene.
33
+
34
+ `sourcePage: number = 0` (attribute `source-page`) is the zero-based global record page;
35
+ `sourcePageSize: number = 100` (attribute `source-page-size`) normalizes to 1–500, and changing
36
+ its effective size resets page zero. Readonly `sourceTotal: number | null` reports the exact
37
+ active node/edge query total after a successful current response, or `0` for an empty composed
38
+ filter; otherwise `null` without a current response.
39
+ `revealSourceKey(key: string): Promise<boolean>` clears query filters, uses provider `locate`,
40
+ and reveals and focuses a canonical row without selecting or activating it. It returns false
41
+ when the source/key is invalid or absent, the target row cannot be found after paging, or work
42
+ is superseded.
43
+
44
+ Spatial rendering and layered layout load only when selected. After changing `view` to a spatial
45
+ view or selecting `layout="layered"`, await `updateComplete` to include that module's loading;
46
+ the existing asynchronous d3 data-readiness contract is unchanged. Node and edge snapshots retain
47
+ the existing 10,000-entry and 50,000-nested-value safety ceilings, so richer records can reach the
48
+ nested-value ceiling earlier. The visible limit notice reports retained and source counts. Narrow
49
+ or aggregate data before binding when the complete graph exceeds admission.
22
50
 
23
51
  **Spatial view:** `view: LyraGraphView = '2d'` accepts `'2d' | '3d' | 'list'`. Invalid runtime
24
52
  values normalize to `'2d'`. The default retains the existing 2D SVG/canvas behavior and adds no
@@ -34,7 +62,7 @@ placement keyed by node id, with genuine z separation. Inputs are never moved or
34
62
  `renderer`, `layout`, `chargeStrength`, `edgeDistance` and `seed` have no effect: there is no force
35
63
  solver, settling animation, auto-rotation or inertia. Rendering uses original perspective math
36
64
  and a Canvas 2D raster surface, with near-plane clipping, depth-ordered node/edge segments and
37
- frontmost picking. Fixed edge subdivision approximates crossings; this is not a mesh renderer or
65
+ frontmost picking. Adaptive edge subdivision approximates crossings; this is not a mesh renderer or
38
66
  a guarantee of perfect translucent intersections. Use modest graphs, typically low hundreds;
39
67
  the 2D canvas capacity claim below does not apply to 3D.
40
68
 
@@ -188,8 +216,8 @@ boolean; color?: string; dash?: number[] }` (source/target are node ids). `direc
188
216
  - `layout: 'force' | 'layered' = 'force'` — `'force'` runs the `d3-force` simulation described
189
217
  throughout this section, unchanged. `'layered'` swaps in a deterministic Sugiyama-lite layered
190
218
  layout instead (longest-path layering, barycenter crossing reduction, cycle-safe — back edges are
191
- reversed only for layering, never mutating caller data): positions are computed synchronously
192
- with no settle animation, sized from each node's own radius and spaced by `edgeDistance` (the
219
+ reversed only for layering, never mutating caller data): after the layout module loads, positions
220
+ are computed synchronously with no settle animation, sized from each node's own radius and spaced by `edgeDistance` (the
193
221
  layer gap) and a fixed 12px in-layer gap. Node drag is disabled in this mode (dragging would fight
194
222
  a computed layout) and `chargeStrength` becomes a documented no-op; pan/zoom, keyboard roving,
195
223
  `focusNode()`/`fit()`, hulls, edge labels, and `hiddenTypes` filtering all work identically to
@@ -210,6 +238,9 @@ boolean; color?: string; dash?: number[] }` (source/target are node ids). `direc
210
238
  only, not the visible marks. Every data-driven and token-derived canvas color is resolved through
211
239
  the live computed CSS cascade before painting, so CSS-wide keywords such as `inherit`/`unset`,
212
240
  custom-property references, and modern color functions reach Canvas as concrete colors.
241
+ Prefer this renderer for large admitted graphs. Visual painting is culled to the viewport, and
242
+ force simulation pauses while the graph is offscreen. SVG cursor movement retains the existing
243
+ item markup; it does not rebuild every node and link template.
213
244
 
214
245
  **Methods:** `focusNode(id, options?: { zoom? })` and `fit(options?: { padding?: number })` control the
215
246
  camera; `getNodePosition(id)` returns the current `{ x, y }` in graph-local drawing coordinates, or
@@ -248,6 +279,10 @@ the offscreen keyboard-roving items), `spatial-toolbar` (3D/list view and camera
248
279
  interaction surface), `spatial-instructions` (camera keyboard instructions), `spatial-list` (the
249
280
  visible paginated fallback), `spatial-list-item` (each activatable node, edge or community),
250
281
  `spatial-page-count` (localized total and page status), and `spatial-pagination` (page controls).
282
+ Source-mode parts: `source-navigator` (global query, record list and pagination), `source-row`
283
+ (a mounted record activation button), `source-row-active` (the navigator's roving tab stop),
284
+ `source-status` (loading, unavailable-record or error text), and `source-coverage` (full-source
285
+ totals and current diagram coverage).
251
286
 
252
287
  **Themeable custom properties:** `--lr-canvas-reserved-height` (default
253
288
  `var(--lr-size-24rem)`) sets the host block size and is shared with the optional pre-upgrade
@@ -278,8 +313,9 @@ behind a drawn `[part="link-label"]` (via `paint-order: stroke`).
278
313
  `--lr-graph-hull-fill` (default `var(--lr-color-brand)`) — community hull fill/stroke color
279
314
  (overridden inline per hull from `LyraGraphCommunity.color`).
280
315
  `--lr-graph-hull-opacity` (default `0.12`) — hull element opacity (composites fill+stroke as one).
281
- Under `renderer="canvas"` these five are read from computed style at paint time (there are no
282
- per-node elements to inherit them), so they must be set on or above the `<lr-graph>` host itself.
316
+ Under `renderer="canvas"` these five are resolved from computed style and cached until relevant
317
+ inputs change (there are no per-node elements to inherit them), so they must be set on or above
318
+ the `<lr-graph>` host itself.
283
319
  The canvas repaints when inherited theme inputs change (including ancestor class/data attributes,
284
320
  adopted stylesheets, and media-query theme transitions); a host does not need to reassign `nodes`
285
321
  to make new token values visible.