@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
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import"../../forms/input/input.class.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getCollator,getNumberFormat}from"../../../internal/intl-cache.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{styles}from"./eval-dataset.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{firstByIdentity}from"../collection-identity.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_evalDatasetAddExample,LYRA_DEFAULT_evalDatasetColumnExpectedOutput,LYRA_DEFAULT_evalDatasetColumnInput,LYRA_DEFAULT_evalDatasetColumnTags,LYRA_DEFAULT_evalDatasetEmpty,LYRA_DEFAULT_evalDatasetImportLabel,LYRA_DEFAULT_evalDatasetLabel,LYRA_DEFAULT_evalDatasetLimit,LYRA_DEFAULT_evalDatasetNoMatches,LYRA_DEFAULT_evalDatasetRemoveExample,LYRA_DEFAULT_evalDatasetSearchLabel,LYRA_DEFAULT_evalDatasetTagFilterLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings/shared.generated.js";const MAX_RENDERED_EXAMPLES=100,rowKey=row=>row.id;class LyraEvalDataset extends LyraElement{constructor(){super(...arguments),this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.examplesTruncated=!1,this.examples=[],this.searchable=!1,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.accept="",this.exportFormats=["csv","json"],this.disabled=!1,this.label="",this.searchText="",this.activeTags=new Set,this.selectedId=null,this.normalizedCache=[],this.visibleExamples=[],this.onAddClick=()=>{this.disabled||this.emit("lr-example-add-request")},this.onRemoveClick=()=>{this.disabled||this.selectedId===null||this.emit("lr-example-remove-request",{exampleId:this.selectedId})},this.onGridRowActivate=e=>{if(e.stopPropagation(),this.disabled)return;const id=e.detail.row.id;this.selectedId=id,this.emit("lr-example-select",{exampleId:id})},this.onFiles=e=>{e.stopPropagation(),!(this.disabled||e.detail.files.length===0)&&this.emit("lr-import-request",{files:[...e.detail.files]})},this.onExportButtonExport=e=>{e.preventDefault(),e.stopPropagation(),!this.disabled&&this.emit("lr-export-request",{format:e.detail.format})},this.gateDisabledClear={handleEvent:event=>{this.disabled&&event.stopPropagation()},capture:!0}}static{this.defaultStrings={...super.defaultStrings,evalDatasetAddExample:LYRA_DEFAULT_evalDatasetAddExample,evalDatasetColumnExpectedOutput:LYRA_DEFAULT_evalDatasetColumnExpectedOutput,evalDatasetColumnInput:LYRA_DEFAULT_evalDatasetColumnInput,evalDatasetColumnTags:LYRA_DEFAULT_evalDatasetColumnTags,evalDatasetEmpty:LYRA_DEFAULT_evalDatasetEmpty,evalDatasetImportLabel:LYRA_DEFAULT_evalDatasetImportLabel,evalDatasetLabel:LYRA_DEFAULT_evalDatasetLabel,evalDatasetLimit:LYRA_DEFAULT_evalDatasetLimit,evalDatasetNoMatches:LYRA_DEFAULT_evalDatasetNoMatches,evalDatasetRemoveExample:LYRA_DEFAULT_evalDatasetRemoveExample,evalDatasetSearchLabel:LYRA_DEFAULT_evalDatasetSearchLabel,evalDatasetTagFilterLabel:LYRA_DEFAULT_evalDatasetTagFilterLabel,fieldRequired:LYRA_DEFAULT_fieldRequired}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["examples","exportFormats"])}static{this.identityCollectionProperties=Object.freeze(["examples"])}static{this.styles=[LyraElement.styles,styles,agentActionButtonStyles]}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted()}updated(changed){if(super.updated(changed),this.limitAnnouncementInitialized&&this.examplesTruncated&&!this.previouslyTruncated){const truncation=publicCollectionTruncation(this,"examples");truncation&&this.limitAnnouncements.announcePolite(this.localize("evalDatasetLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(truncation.retained)}))}this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.examplesTruncated}static{this.immutableEventDetails=Object.freeze(["lr-import-request"])}get normalizedExamples(){if(this.normalizedFor!==this.examples){this.normalizedFor=this.examples;const deduped=firstByIdentity(Array.isArray(this.examples)?this.examples:[],example=>example.id);this.normalizedCache=deduped.map(example=>Array.isArray(example.tags)?example:{...example,tags:void 0})}return this.normalizedCache}willUpdate(changed){if(super.willUpdate(changed),changed.has("searchable")&&!this.searchable&&(this.searchText=""),changed.has("examples")){this.selectedId!==null&&!this.normalizedExamples.some(example=>example.id===this.selectedId)&&this.clearSelection();const available=new Set(this.allTags());[...this.activeTags].some(tag=>!available.has(tag))&&(this.activeTags=new Set([...this.activeTags].filter(tag=>available.has(tag))))}this.visibleExamples=this.filterExamples(),(changed.has("examples")||changed.has("searchText")||changed.has("activeTags")||changed.has("searchable"))&&this.selectedId!==null&&!this.visibleExamples.some(example=>example.id===this.selectedId)&&this.clearSelection()}clearSelection(){this.selectedId=null,this.emit("lr-example-select",{exampleId:null})}allTags(){const tags=new Set;for(const example of this.normalizedExamples)for(const tag of example.tags??[])tags.add(tag);return[...tags].sort(getCollator(this.effectiveLocale).compare)}filterExamples(){const query=this.searchText.trim().toLocaleLowerCase(this.effectiveLocale);return this.normalizedExamples.filter(example=>this.activeTags.size>0&&!(example.tags??[]).some(tag=>this.activeTags.has(tag))?!1:query===""?!0:[example.input,example.expectedOutput??"",...example.tags??[]].join(" ").toLocaleLowerCase(this.effectiveLocale).includes(query))}buildColumns(){const labels=[this.localize("evalDatasetColumnInput"),this.localize("evalDatasetColumnExpectedOutput"),this.localize("evalDatasetColumnTags")],key=labels.join("\0");return this.columnsCache?.key!==key&&(this.columnsCache={key,columns:this.createColumns(labels)}),this.columnsCache.columns}selectedKeys(){return this.selectedKeysCache?.id!==this.selectedId&&(this.selectedKeysCache={id:this.selectedId,keys:this.selectedId===null?new Set:new Set([this.selectedId])}),this.selectedKeysCache.keys}createColumns([inputLabel,expectedLabel,tagsLabel]){return[{key:"input",label:inputLabel,sortable:!0,sortValue:row=>row.input,cell:row=>row.input},{key:"expectedOutput",label:expectedLabel,sortable:!0,sortValue:row=>row.expectedOutput??"",cell:row=>row.expectedOutput??""},{key:"tags",label:tagsLabel,sortable:!0,sortValue:row=>(row.tags??[]).join(", "),cell:row=>(row.tags??[]).join(", ")}]}onTagChipToggle(tag,e){if(e.stopPropagation(),this.disabled)return;const next=new Set(this.activeTags);e.detail.selected?next.add(tag):next.delete(tag),this.activeTags=next}stopOwnedEvent(event){event.stopPropagation()}renderToolbar(){return html`
1
+ import{__decorate}from"tslib";import{SourcePageController}from"../../../internal/source-page-controller.js";import{finiteInteger}from"../../../internal/numbers.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{createHaystackMemo}from"../../../internal/search-haystack.js";import{indexByKey}from"../../../internal/keyed-index.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import"../../forms/input/input.class.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getCollator,getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{styles}from"./eval-dataset.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{firstByIdentity}from"../collection-identity.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_evalDatasetAddExample,LYRA_DEFAULT_evalDatasetColumnExpectedOutput,LYRA_DEFAULT_evalDatasetColumnInput,LYRA_DEFAULT_evalDatasetColumnTags,LYRA_DEFAULT_evalDatasetEmpty,LYRA_DEFAULT_evalDatasetImportLabel,LYRA_DEFAULT_evalDatasetLabel,LYRA_DEFAULT_evalDatasetLimit,LYRA_DEFAULT_evalDatasetNoMatches,LYRA_DEFAULT_evalDatasetRemoveExample,LYRA_DEFAULT_evalDatasetSearchLabel,LYRA_DEFAULT_evalDatasetTagFilterLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_tagFacetLimit}from"../../../internal/default-strings/shared.generated.js";const MAX_RENDERED_EXAMPLES=100,MAX_TAG_FACETS=500,rowKey=row=>row.id;class LyraEvalDataset extends LyraElement{constructor(){super(...arguments),this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.examplesTruncated=!1,this.sourceStateVersion=0,this.sourceEpoch=0,this.sourceSyncing=!1,this.sourceRows=[],this.sourceTags=[],this.sourceFacetLabels=new Map,this.sourceSortKey=null,this.sourceSortDir="asc",this.sourcePages=new SourcePageController(this,{normalizeRecord:(record,isCurrent)=>this.projectSourceExample(record,isCurrent),validateMetadata:(result,query)=>{if(!result.tags||query.tags.length>MAX_TAG_FACETS||result.tags.unavailableSelected.some(key=>!query.tags.includes(key)))throw new TypeError("Invalid example source facets");const available=new Set(result.tags.values.map(facet=>facet.key)),missing=new Set(result.tags.unavailableSelected);if(query.tags.some(key=>!available.has(key)&&!missing.has(key)))throw new TypeError("Selected source facet is missing")},onChange:()=>{this.sourceStateVersion++}}),this.sourcePage=0,this.sourcePageSize=100,this.onSourcePage=event=>{event.stopPropagation(),this.sourceMode&&!this.disabled&&(this.sourcePage=event.detail.page-1)},this.onSourceSort=event=>{!this.sourceMode||this.disabled||(this.sourceSortKey=event.detail.sortKey,this.sourceSortDir=event.detail.sortDir,this.syncSource(),this.sourceStateVersion++)},this.onSourceRetry=event=>{event.stopPropagation(),this.sourceMode&&!this.disabled&&this.requestUpdate()},this.examples=[],this.searchable=!1,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.accept="",this.exportFormats=["csv","json"],this.disabled=!1,this.label="",this.searchText="",this.activeTags=new Set,this.selectedId=null,this.normalizedCache=[],this.explicitRefresh=0,this.normalizedRefresh=0,this.searchCorpus=createHaystackMemo((example,locale)=>[example.input,example.expectedOutput??"",...example.tags??[]].join(" ").toLocaleLowerCase(resolveIntlLocale(locale))),this.visibleExamples=[],this.onAddClick=()=>{this.disabled||this.emit("lr-example-add-request")},this.onRemoveClick=()=>{this.disabled||this.sourceBlocked||this.selectedId===null||this.emit("lr-example-remove-request",{exampleId:this.selectedId})},this.onGridRowActivate=e=>{if(e.stopPropagation(),this.disabled||this.sourceBlocked||this.sourceMode&&!this.sourceRows.includes(e.detail.row))return;const id=e.detail.row.id;this.selectedId=id,this.emit("lr-example-select",{exampleId:id})},this.onFiles=e=>{e.stopPropagation(),!(this.disabled||e.detail.files.length===0)&&this.emit("lr-import-request",{files:[...e.detail.files]})},this.onExportButtonExport=e=>{e.preventDefault(),e.stopPropagation(),!this.disabled&&this.emit("lr-export-request",{format:e.detail.format})},this.gateDisabledClear={handleEvent:event=>{this.disabled&&event.stopPropagation()},capture:!0}}static{this.defaultStrings={...super.defaultStrings,evalDatasetAddExample:LYRA_DEFAULT_evalDatasetAddExample,evalDatasetColumnExpectedOutput:LYRA_DEFAULT_evalDatasetColumnExpectedOutput,evalDatasetColumnInput:LYRA_DEFAULT_evalDatasetColumnInput,evalDatasetColumnTags:LYRA_DEFAULT_evalDatasetColumnTags,evalDatasetEmpty:LYRA_DEFAULT_evalDatasetEmpty,evalDatasetImportLabel:LYRA_DEFAULT_evalDatasetImportLabel,evalDatasetLabel:LYRA_DEFAULT_evalDatasetLabel,evalDatasetLimit:LYRA_DEFAULT_evalDatasetLimit,evalDatasetNoMatches:LYRA_DEFAULT_evalDatasetNoMatches,evalDatasetRemoveExample:LYRA_DEFAULT_evalDatasetRemoveExample,evalDatasetSearchLabel:LYRA_DEFAULT_evalDatasetSearchLabel,evalDatasetTagFilterLabel:LYRA_DEFAULT_evalDatasetTagFilterLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,tagFacetLimit:LYRA_DEFAULT_tagFacetLimit}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["examples","exportFormats"])}static{this.identityCollectionProperties=Object.freeze(["examples"])}static{this.styles=[LyraElement.styles,styles,agentActionButtonStyles]}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.sourceMode&&this.selectedId!==null&&this.clearSelection()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted(),this.sourcePages.adopted()}updated(changed){if(super.updated(changed),this.limitAnnouncementInitialized&&this.examplesTruncated&&!this.previouslyTruncated){const truncation=publicCollectionTruncation(this,"examples");truncation&&this.limitAnnouncements.announcePolite(this.localize("evalDatasetLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(truncation.retained)}))}this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.examplesTruncated}static{this.immutableEventDetails=Object.freeze(["lr-import-request"])}get dataSource(){return this._dataSource}set dataSource(value){const previous=this._dataSource;this._dataSource=value,this.sourceEpoch=(this.sourceEpoch??0)+1,this.requestUpdate("dataSource",previous)}get sourceTotal(){return this.dataSource===void 0?null:this.sourcePages.state.result?.total??null}get sourceMode(){return this.dataSource!==void 0}get sourceBlocked(){return this.sourceMode&&(this.sourcePages.state.pending||!!this.sourcePages.state.error||!!this.sourceFailure)}projectSourceExample(record,isCurrent){const assertCurrent=()=>{if(!isCurrent())throw new TypeError("Obsolete source record")},descriptorOf=(target,key)=>{assertCurrent();const descriptor=getOwnDataDescriptor(target,key);return assertCurrent(),descriptor};if(assertCurrent(),record.value===null||typeof record.value!="object")throw new TypeError("Invalid source example");const candidate=record.value,read=(key,optional=!1)=>{const descriptor=descriptorOf(candidate,key);if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!optional&&descriptor===MISSING_OWN_DATA_DESCRIPTOR)throw new TypeError("Invalid source example");return descriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:descriptor.value},id=read("id"),input=read("input"),expectedOutput=read("expectedOutput",!0),rawTags=read("tags",!0);if(typeof id!="string"||!id.trim()||id!==record.key||typeof input!="string"||expectedOutput!==void 0&&typeof expectedOutput!="string")throw new TypeError("Invalid source example");let units=id.length+input.length+(expectedOutput?.length??0);const tags=[];if(rawTags!==void 0){if(!Array.isArray(rawTags))throw new TypeError("Invalid source tags");const length=descriptorOf(rawTags,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||length.value>MAX_TAG_FACETS)throw new RangeError("Invalid source tags");for(let i=0;i<length.value;i++){const tag=descriptorOf(rawTags,String(i));if(tag===MISSING_OWN_DATA_DESCRIPTOR||tag===UNSAFE_OWN_DATA_DESCRIPTOR||typeof tag.value!="string")throw new TypeError("Invalid source tag");units+=tag.value.length,tags.push(tag.value)}}if(units>65536)throw new RangeError("Source example too large");return{key:record.key,order:record.order,value:Object.freeze({id,input,...expectedOutput===void 0?{}:{expectedOutput},tags:Object.freeze(tags)})}}syncSource(){if(!(!this.sourcePages||this.sourceSyncing)){this.sourceSyncing=!0;try{if(!this.sourceMode){this.sourceInputs&&this.sourcePages.bind(void 0),this.sourceInputs=void 0,this.sourceQueryInputs=void 0,this.sourceResult=void 0,this.sourceRows=[],this.sourceTags=[],this.sourceFailure=void 0;return}const source=this.dataSource,epoch=this.sourceEpoch+this.explicitRefresh,size=finiteInteger(this.sourcePageSize,100,1,500);let page=finiteInteger(this.sourcePage,0,0,Math.floor(Number.MAX_SAFE_INTEGER/size));const queryInputs=[this.searchText,this.activeTags,this.sourceSortKey,this.sourceSortDir,size];this.sourceQueryInputs&&queryInputs.some((value,index)=>value!==this.sourceQueryInputs[index])&&(page=0,this.sourcePage=0),this.sourceQueryInputs=queryInputs;const revision=source.revision,inputs=[source,revision,epoch,this.effectiveLocale,...queryInputs,page];if(this.sourceInputs&&inputs.every((value,index)=>value===this.sourceInputs[index]))return;this.sourceInputs=inputs,this.sourceFailure=void 0,this.sourceRows=[],this.sourceTags=[],this.sourceResult=void 0,this.selectedId!==null&&this.clearSelection(),this.sourcePages.bind({source,revision,epoch,locale:this.effectiveLocale});const query=Object.freeze({search:this.searchText,tags:Object.freeze([...this.activeTags]),sortKey:this.sourceSortKey,sortDir:this.sourceSortDir});this.sourcePages.request(query,page,size)}catch(error){this.sourcePages.bind(void 0),this.sourceRows=[],this.sourceTags=[],this.sourceResult=void 0,this.sourceFailure=error}finally{this.sourceSyncing=!1}}}acceptSourcePage(){const result=this.sourcePages.state.result;if(!result||result===this.sourceResult)return;this.sourceResult=result,this.sourceRows=result.rows.map(record=>record.value),this.sourceTags=result.tags.values.map(facet=>facet.key),this.sourceFacetLabels=new Map(result.tags.values.map(facet=>[facet.key,facet.label]));const removed=new Set(result.tags.unavailableSelected);if([...this.activeTags].some(key=>removed.has(key))){this.activeTags=new Set([...this.activeTags].filter(key=>!removed.has(key)));return}this.sourcePage!==this.sourcePages.state.page&&(this.sourceSyncing=!0,this.sourcePage=this.sourcePages.state.page,this.sourceSyncing=!1,this.sourceInputs=this.sourceInputs?[...this.sourceInputs.slice(0,-1),this.sourcePages.state.page]:void 0)}get normalizedExamples(){if(this.normalizedFor!==this.examples){this.normalizedFor=this.examples;const deduped=firstByIdentity(Array.isArray(this.examples)?this.examples:[],example=>example.id);this.normalizedCache=deduped.map(example=>Array.isArray(example.tags)?example:{...example,tags:void 0})}return this.normalizedCache}requestUpdate(...args){args[0]===void 0&&(this.explicitRefresh=(this.explicitRefresh??0)+1),(args[0]===void 0||["dataSource","sourcePage","sourcePageSize","searchText","activeTags"].includes(String(args[0])))&&this.syncSource(),super.requestUpdate(...args)}willUpdate(changed){if(super.willUpdate(changed),changed.has("searchable")&&!this.searchable&&(this.searchText=""),this.syncSource(),this.sourceMode){this.acceptSourcePage();return}const normalizedChanged=changed.has("dataSource")||this.normalizedFor!==this.examples||this.normalizedRefresh!==this.explicitRefresh;if(this.normalizedRefresh!==this.explicitRefresh&&(this.normalizedRefresh=this.explicitRefresh,this.normalizedFor=void 0),changed.has("searchable")&&!this.searchable&&(this.searchText=""),normalizedChanged){this.selectedId!==null&&!indexByKey(this.normalizedExamples,rowKey).has(this.selectedId)&&this.clearSelection();const available=new Set(this.allTags());[...this.activeTags].some(tag=>!available.has(tag))&&(this.activeTags=new Set([...this.activeTags].filter(tag=>available.has(tag))))}const inputs=[this.normalizedExamples,this.searchText,this.activeTags,this.effectiveLocale],filtersChanged=!this.filterMemo||inputs.some((input,index)=>input!==this.filterMemo.inputs[index]);filtersChanged&&(this.filterMemo={inputs,rows:this.filterExamples()}),this.visibleExamples=this.filterMemo.rows,filtersChanged&&this.selectedId!==null&&!indexByKey(this.visibleExamples,rowKey).has(this.selectedId)&&this.clearSelection()}clearSelection(){this.selectedId=null,this.emit("lr-example-select",{exampleId:null})}allTags(){const examples=this.normalizedExamples,locale=this.effectiveLocale;if(this.tagsMemo?.examples===examples&&this.tagsMemo.locale===locale)return this.tagsMemo.tags;const tags=new Set;for(const example of this.normalizedExamples)for(const tag of example.tags??[])tags.add(tag);const sorted=[...tags].sort(getCollator(locale).compare);return this.tagsMemo={examples,locale,tags:sorted},sorted}filterExamples(){const query=this.searchText.trim().toLocaleLowerCase(this.effectiveLocale),corpus=query?this.searchCorpus(this.normalizedExamples,this.effectiveLocale):void 0;return this.normalizedExamples.filter((example,index)=>this.activeTags.size>0&&!(example.tags??[]).some(tag=>this.activeTags.has(tag))?!1:query===""?!0:corpus[index].includes(query))}buildColumns(){const labels=[this.localize("evalDatasetColumnInput"),this.localize("evalDatasetColumnExpectedOutput"),this.localize("evalDatasetColumnTags")],key=labels.join("\0");return this.columnsCache?.key!==key&&(this.columnsCache={key,columns:this.createColumns(labels)}),this.columnsCache.columns}selectedKeys(){return this.selectedKeysCache?.id!==this.selectedId&&(this.selectedKeysCache={id:this.selectedId,keys:this.selectedId===null?new Set:new Set([this.selectedId])}),this.selectedKeysCache.keys}createColumns([inputLabel,expectedLabel,tagsLabel]){return[{key:"input",label:inputLabel,sortable:!0,sortValue:row=>row.input,cell:row=>row.input},{key:"expectedOutput",label:expectedLabel,sortable:!0,sortValue:row=>row.expectedOutput??"",cell:row=>row.expectedOutput??""},{key:"tags",label:tagsLabel,sortable:!0,sortValue:row=>(row.tags??[]).join(", "),cell:row=>(row.tags??[]).join(", ")}]}onTagChipToggle(tag,e){if(e.stopPropagation(),this.disabled)return;const next=new Set(this.activeTags);e.detail.selected?next.add(tag):next.delete(tag),this.activeTags=next}stopOwnedEvent(event){event.stopPropagation()}renderToolbar(){return html`
2
2
  <div part="toolbar">
3
3
  <button part="add-button" data-agent-action="brand" type="button" ?disabled=${this.disabled} @click=${this.onAddClick}>
4
4
  ${this.localize("evalDatasetAddExample")}
@@ -7,7 +7,7 @@ import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/nat
7
7
  part="remove-button"
8
8
  data-agent-action="neutral"
9
9
  type="button"
10
- ?disabled=${this.disabled||this.selectedId===null}
10
+ ?disabled=${this.disabled||this.sourceBlocked||this.selectedId===null}
11
11
  @click=${this.onRemoveClick}
12
12
  >
13
13
  ${this.localize("evalDatasetRemoveExample")}
@@ -67,21 +67,22 @@ import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/nat
67
67
  @blur=${relayFocus}
68
68
  ></lr-input>
69
69
  </div>
70
- `}renderTagFilter(tags){return html`
71
- <div part="tag-filter" role="group" aria-label=${this.localize("evalDatasetTagFilterLabel")}>
70
+ `}visibleTagFacets(tags){if(this.facetMemo?.tags===tags&&this.facetMemo.selected===this.activeTags)return this.facetMemo.visible;const visible=[];let unselectedBudget=MAX_TAG_FACETS-this.activeTags.size;for(const tag of tags)if(this.activeTags.has(tag)?visible.push(tag):unselectedBudget>0&&(visible.push(tag),unselectedBudget--),visible.length===MAX_TAG_FACETS)break;return this.facetMemo={tags,selected:this.activeTags,visible},visible}renderTagFilter(tags){const label=this.localize("evalDatasetTagFilterLabel"),omitted=this.sourceMode?(this.sourceResult?.tags?.total??0)-tags.length:tags.length-MAX_TAG_FACETS,overflow=omitted>0?this.localize("tagFacetLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(omitted)}):"",inputs=[tags,this.activeTags,this.disabled,label,overflow,this.sourceFacetLabels];if(this.tagTemplateMemo&&inputs.every((input,index)=>input===this.tagTemplateMemo.inputs[index]))return this.tagTemplateMemo.template;const template=html`
71
+ <div part="tag-filter" role="group" aria-label=${label}>
72
72
  <lr-chip-group>
73
- ${tags.map(tag=>html`<lr-chip
73
+ ${(this.sourceMode?tags:this.visibleTagFacets(tags)).map(tag=>html`<lr-chip
74
74
  toggleable
75
75
  .value=${tag}
76
76
  .selected=${this.activeTags.has(tag)}
77
77
  .disabled=${this.disabled}
78
78
  @lr-chip-toggle-request=${e=>this.onTagChipToggle(tag,e)}
79
79
  @lr-chip-select=${this.stopOwnedEvent}
80
- >${tag}</lr-chip
80
+ >${this.sourceMode?this.sourceFacetLabels.get(tag)??tag:tag}</lr-chip
81
81
  >`)}
82
82
  </lr-chip-group>
83
+ ${overflow?html`<p part="limit" role="note">${overflow}</p>`:nothing}
83
84
  </div>
84
- `}render(){const label=this.label||this.localize("evalDatasetLabel"),tags=this.allTags(),visible=this.visibleExamples,examples=this.normalizedExamples,truncation=publicCollectionTruncation(this,"examples");this.examplesTruncated=truncation!==void 0;const filtered=visible.length!==examples.length,emptyText=examples.length===0?this.localize("evalDatasetEmpty"):filtered&&visible.length===0?this.localize("evalDatasetNoMatches"):"";return html`
85
+ `;return this.tagTemplateMemo={inputs,template},template}render(){const label=this.label||this.localize("evalDatasetLabel"),tags=this.sourceMode?this.sourceTags:this.allTags(),visible=this.sourceMode?this.sourceRows:this.visibleExamples,examples=this.sourceMode?this.sourceRows:this.normalizedExamples,truncation=this.sourceMode?void 0:publicCollectionTruncation(this,"examples");this.examplesTruncated=truncation!==void 0;const filtered=this.sourceMode?!!this.searchText||this.activeTags.size>0:visible.length!==examples.length,emptyText=examples.length===0&&!filtered?this.localize("evalDatasetEmpty"):filtered&&visible.length===0?this.localize("evalDatasetNoMatches"):"";return html`
85
86
  <div part="base">
86
87
  ${this.renderToolbar()}
87
88
  ${this.searchable?this.renderSearch():nothing}
@@ -89,10 +90,21 @@ import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/nat
89
90
  <lr-table
90
91
  part="grid"
91
92
  aria-label=${label}
92
- .selectionMode=${this.disabled?"none":"single"}
93
+ .strings=${this.strings}
94
+ .paginationMode=${this.sourceMode?"server":"client"}
95
+ .page=${this.sourceMode?finiteInteger(this.sourcePage,0,0,Number.MAX_SAFE_INTEGER)+1:1}
96
+ .totalItems=${this.sourceMode?this.sourceTotal??0:-1}
97
+ .unknownTotal=${this.sourceMode&&this.sourceTotal===null}
98
+ .hasNext=${!this.sourceMode||this.sourceTotal!==null}
99
+ .loading=${this.sourceMode&&this.sourcePages.state.pending}
100
+ .error=${this.sourceMode&&!!(this.sourceFailure||this.sourcePages.state.error)}
101
+ .sortMode=${this.sourceMode?"server":"client"}
102
+ .sortKey=${this.sourceMode?this.sourceSortKey:null}
103
+ .sortDir=${this.sourceMode?this.sourceSortDir:"asc"}
104
+ .selectionMode=${this.disabled||this.sourceBlocked?"none":"single"}
93
105
  .columns=${this.buildColumns()}
94
106
  .rows=${visible}
95
- .pageSize=${MAX_RENDERED_EXAMPLES}
107
+ .pageSize=${this.sourceMode?finiteInteger(this.sourcePageSize,100,1,500):MAX_RENDERED_EXAMPLES}
96
108
  .rowKey=${rowKey}
97
109
  .selectedRowKeys=${this.selectedKeys()}
98
110
  .emptyHeading=${emptyText}
@@ -103,12 +115,14 @@ import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/nat
103
115
  @focus=${this.stopOwnedEvent}
104
116
  @blur=${this.stopOwnedEvent}
105
117
  @lr-sort-request=${this.stopOwnedEvent}
118
+ @lr-sort=${this.onSourceSort}
119
+ @lr-retry-request=${this.onSourceRetry}
106
120
  @lr-priority-columns-visibility-change=${this.stopOwnedEvent}
107
121
  @lr-row-expand-toggle=${this.stopOwnedEvent}
108
122
  @lr-load-more=${this.stopOwnedEvent}
109
123
  @lr-selection-change=${this.stopOwnedEvent}
110
124
  @lr-filter-change=${this.stopOwnedEvent}
111
- @lr-page-change=${this.stopOwnedEvent}
125
+ @lr-page-change=${this.onSourcePage}
112
126
  @lr-cell-edit=${this.stopOwnedEvent}
113
127
  @lr-column-resize=${this.stopOwnedEvent}
114
128
  @lr-row-activate=${this.onGridRowActivate}
@@ -116,4 +130,4 @@ import{__decorate}from"tslib";import{relayNativeEvent}from"../../../internal/nat
116
130
  ></lr-table>
117
131
  ${truncation?html`<p part="limit" role="note">${this.localize("evalDatasetLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(truncation.retained)})}</p>`:nothing}
118
132
  </div>
119
- `}}__decorate([property({attribute:!1})],LyraEvalDataset.prototype,"examples",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalDataset.prototype,"searchable",void 0),__decorate([property()],LyraEvalDataset.prototype,"autocomplete",void 0),__decorate([property({converter:spellcheckConverter})],LyraEvalDataset.prototype,"spellcheck",void 0),__decorate([property()],LyraEvalDataset.prototype,"autocapitalize",void 0),__decorate([property({attribute:"autocorrect"})],LyraEvalDataset.prototype,"autoCorrect",void 0),__decorate([property({attribute:"inputmode"})],LyraEvalDataset.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraEvalDataset.prototype,"enterKeyHint",void 0),__decorate([property()],LyraEvalDataset.prototype,"accept",void 0),__decorate([property({attribute:!1})],LyraEvalDataset.prototype,"exportFormats",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalDataset.prototype,"disabled",void 0),__decorate([property()],LyraEvalDataset.prototype,"label",void 0),__decorate([state()],LyraEvalDataset.prototype,"searchText",void 0),__decorate([state()],LyraEvalDataset.prototype,"activeTags",void 0),__decorate([state()],LyraEvalDataset.prototype,"selectedId",void 0);export{LyraEvalDataset};
133
+ `}}__decorate([state()],LyraEvalDataset.prototype,"sourceStateVersion",void 0),__decorate([property({attribute:!1})],LyraEvalDataset.prototype,"dataSource",null),__decorate([property({type:Number,attribute:"source-page"})],LyraEvalDataset.prototype,"sourcePage",void 0),__decorate([property({type:Number,attribute:"source-page-size"})],LyraEvalDataset.prototype,"sourcePageSize",void 0),__decorate([property({attribute:!1})],LyraEvalDataset.prototype,"examples",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalDataset.prototype,"searchable",void 0),__decorate([property()],LyraEvalDataset.prototype,"autocomplete",void 0),__decorate([property({converter:spellcheckConverter})],LyraEvalDataset.prototype,"spellcheck",void 0),__decorate([property()],LyraEvalDataset.prototype,"autocapitalize",void 0),__decorate([property({attribute:"autocorrect"})],LyraEvalDataset.prototype,"autoCorrect",void 0),__decorate([property({attribute:"inputmode"})],LyraEvalDataset.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraEvalDataset.prototype,"enterKeyHint",void 0),__decorate([property()],LyraEvalDataset.prototype,"accept",void 0),__decorate([property({attribute:!1})],LyraEvalDataset.prototype,"exportFormats",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalDataset.prototype,"disabled",void 0),__decorate([property()],LyraEvalDataset.prototype,"label",void 0),__decorate([state()],LyraEvalDataset.prototype,"searchText",void 0),__decorate([state()],LyraEvalDataset.prototype,"activeTags",void 0),__decorate([state()],LyraEvalDataset.prototype,"selectedId",void 0);export{LyraEvalDataset};
@@ -0,0 +1 @@
1
+ import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";function read(value,key,current,required=!1){if(!current())throw new Error("Source record revoked");if(!value||typeof value!="object")throw new TypeError("Invalid source run");const descriptor=getOwnDataDescriptor(value,key);if(!current())throw new Error("Source record revoked");if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||required&&descriptor===MISSING_OWN_DATA_DESCRIPTOR)throw new TypeError("Invalid source field");return descriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectEvalSourceRun(record,current){const id=read(record.value,"id",current,!0),label=read(record.value,"label",current,!0),model=read(record.value,"model",current),promptVersion=read(record.value,"promptVersion",current),output=read(record.value,"output",current);let units=0;for(const value of[id,label,model,promptVersion,output]){if(value!==void 0&&typeof value!="string")throw new TypeError("Invalid source run text");units+=typeof value=="string"?value.length:0}if(typeof id!="string"||!id.trim()||id!==record.key||typeof label!="string"||units>65536)throw new TypeError("Invalid source run");const scores=read(record.value,"scores",current),review=read(record.value,"review",current);for(const value of[scores,review])if(value!==void 0&&(value===null||typeof value!="object"||Array.isArray(value)))throw new TypeError("Invalid source run values");return Object.freeze({id,label,...model===void 0?{}:{model},...promptVersion===void 0?{}:{promptVersion},output:output??"",...scores===void 0?{}:{scores},...review===void 0?{}:{review}})}function projectEvalSourceReview(review,keys,current){const value=Object.create(null);let entries=0,units=0;for(const key of keys){if(++entries>1e4)throw new RangeError("Source review too large");units+=key.key.length;const field=review===void 0?void 0:read(review,key.key,current);if(typeof field=="string")units+=field.length,value[key.key]=field;else if(typeof field=="number"&&Number.isFinite(field))value[key.key]=field;else if(field===void 0)value[key.key]=void 0;else if(Array.isArray(field)){const length=read(field,"length",current,!0);if(typeof length!="number"||!Number.isSafeInteger(length)||length<0||entries+length>1e4)throw new RangeError("Source review too large");entries+=length;const values=[];for(let index=0;index<length;index++){const item=read(field,String(index),current,!0);if(typeof item!="string")throw new TypeError("Invalid source review value");if(units+=item.length,units>65536)throw new RangeError("Source review too large");values.push(item)}value[key.key]=Object.freeze(values)}else throw new TypeError("Invalid source review value");if(units>65536)throw new RangeError("Source review too large")}return Object.freeze(value)}export{projectEvalSourceReview,projectEvalSourceRun};
@@ -1,13 +1,10 @@
1
- import{type TemplateResult}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import type{RubricKey,RubricValue}from'../../forms/rubric-form/rubric-form.class.js';import type{AgentRunActivateDetail}from'../run-events.js';import type{TableColumn}from'../../data/table/table.class.js';
2
- /**
3
- * One model/prompt-version's output for a single evaluation example, plus whatever automated
4
- * `scores` it already carries and whatever `review` a human has entered for it so far. `scores`
5
- * and `review` are both keyed the same way as the `rubricKeys` passed to this component -- the
6
- * same `RubricValue` shape `<lr-rubric-form>` itself reads and writes -- so a `TableColumn`'s
7
- * `cell()` accessor and the rubric form's own `value` binding can both read a run's fields with
8
- * no conversion.
9
- */
10
- export interface EvalRunResult{readonly id:string;readonly label:string;readonly model?:string;readonly promptVersion?:string;readonly output:string;readonly scores?:RubricValue;readonly review?:RubricValue;}export interface LyraEvalResultEventMap{'lr-run-activate':CustomEvent<LyraEventDetailSnapshot<AgentRunActivateDetail<EvalRunResult>>>;'lr-review-input':CustomEvent<LyraEventDetailSnapshot<{runId:string;value:RubricValue;}>>;'lr-review-validity-change':CustomEvent<LyraEventDetailSnapshot<{runId:string;valid:boolean;errors:Record<string,string>;}>>;'lr-review-submit':CustomEvent<LyraEventDetailSnapshot<{runId:string;value:RubricValue;}>>;'lr-review-skip':CustomEvent<LyraEventDetailSnapshot<{runId:string;}>>;}
1
+ import type{EvalRunResult}from'./eval-run-result.js';export type{EvalRunResult}from'./eval-run-result.js';import type{LyraPageSource}from'../../../data-sources.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement,type LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import type{RubricKey,RubricValue}from'../../forms/rubric-form/rubric-form.class.js';import type{AgentRunActivateDetail}from'../run-events.js';import type{LyraTableEventMap,TableColumn}from'../../data/table/table.class.js';
2
+ /** Full-source server order for the comparison grid. */
3
+ export interface EvalResultSourceQuery{readonly sortKey:string|null;readonly sortDir:'asc'|'desc';}export type EvalResultSource=LyraPageSource<EvalRunResult,EvalResultSourceQuery>;export interface LyraEvalResultEventMap{
4
+ /** Source mode only: the original cancelable table proposal. */
5
+ 'lr-sort-request':LyraTableEventMap<EvalRunResult>['lr-sort-request'];
6
+ /** Source mode only: the original accepted table sort. */
7
+ 'lr-sort':LyraTableEventMap<EvalRunResult>['lr-sort'];'lr-run-activate':CustomEvent<LyraEventDetailSnapshot<AgentRunActivateDetail<EvalRunResult>>>;'lr-review-input':CustomEvent<LyraEventDetailSnapshot<{runId:string;value:RubricValue;}>>;'lr-review-validity-change':CustomEvent<LyraEventDetailSnapshot<{runId:string;valid:boolean;errors:Record<string,string>;}>>;'lr-review-submit':CustomEvent<LyraEventDetailSnapshot<{runId:string;value:RubricValue;}>>;'lr-review-skip':CustomEvent<LyraEventDetailSnapshot<{runId:string;}>>;}
11
8
  /**
12
9
  * `<lr-eval-result>` — rubric scoring, human review, and comparison across a single evaluation
13
10
  * example's runs (one per model or prompt version), LangSmith/Arize-eval-result style. Duplicate
@@ -34,10 +31,20 @@ export interface EvalRunResult{readonly id:string;readonly label:string;readonly
34
31
  * `selectedRunId`/`baselineRunId` that doesn't match any entry in `runs` degrades gracefully: the
35
32
  * comparison grid still renders, and the review/diff sections simply don't (no error, no crash).
36
33
  *
34
+ * `dataSource` opts into server pages of at most 500 rows; explicit selected/baseline IDs
35
+ * resolve through a separate lookup of at most two IDs. Null selection remains the first global
36
+ * row of the current query, including when an initial nonzero page needs a size-one primer.
37
+ * Provider rows are immutable for their revision. Fixed run fields are projected and frozen;
38
+ * source activation events retain complete opaque scores/review dictionaries by identity.
39
+ * Custom column callbacks receive original provider records; built-in review reads configured
40
+ * rubric keys only. Reassign the provider or call requestUpdate() to refresh.
41
+ *
37
42
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
38
43
  * collection and reassign it after changes; mutating the assigned array does not update the view.
39
44
  *
40
45
  * @customElement lr-eval-result
46
+ * @event lr-sort-request - Source mode only: cancelable original table sort proposal.
47
+ * @event lr-sort - Source mode only: accepted original table sort commit.
41
48
  * @event lr-run-activate - A comparison-grid row was activated. `detail: { runId, run }`.
42
49
  * @event lr-review-input - The selected run's rubric value changed. `detail: { runId, value }`.
43
50
  * @event lr-review-validity-change - The selected run's rubric validity changed. `detail: { runId, valid, errors }`.
@@ -46,6 +53,9 @@ export interface EvalRunResult{readonly id:string;readonly label:string;readonly
46
53
  * @csspart base - The outer wrapper.
47
54
  * @csspart empty - The message shown when `runs` has no entries.
48
55
  * @csspart grid - The `<lr-table>` comparison table.
56
+ * @csspart source-status - Localized initial source loading status.
57
+ * @csspart selection-status - Localized source selection loading/failure status.
58
+ * @csspart selection-retry - Retries the current selected/baseline lookup.
49
59
  * @csspart review - The `<lr-rubric-form>` scoring the selected run.
50
60
  * @csspart diff - The wrapper around the diff caption and `<lr-diff-view>`.
51
61
  * @csspart diff-labels - The caption row naming the two compared runs (only rendered while comparing two distinct runs).
@@ -55,7 +65,17 @@ export interface EvalRunResult{readonly id:string;readonly label:string;readonly
55
65
  * @status stable
56
66
  * @since 4.1.0
57
67
  */
58
- export declare class LyraEvalResult extends LyraElement<LyraEvalResultEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
68
+ export declare class LyraEvalResult extends LyraElement<LyraEvalResultEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];protected static readonly identityCollectionObjectProperties:readonly string[];protected static readonly identityEventDetailProperties:Readonly<{'lr-run-activate':readonly string[];}>;private sourceStateVersion;private _dataSource?;private sourceEpoch;private acceptedSourceRevision?;private sourceVersion;private pairVersion;private sourceSyncing;private sourceResync;private sourceLocaleUpdate;private sourceInputs?;private sourceOrderInputs?;private pairInputs?;private sourceResult?;private sourceRows;private sourcePair;private readonly sourceOriginals;private sourceFailure;private pairFailure;private sourcePriming;private sourceTableShown;private fallbackId;private sourceSortKey;private sourceSortDir;private sourceColumnsMemo?;private sourceReviewMemo?;private sortRequest?;private readonly announcements;private failureInitialized;private previousFailure;private readonly sourcePages;
69
+ /** Immutable full-source provider; takes precedence over runs. Same-reference assignment or
70
+ * requestUpdate() refreshes. undefined restores legacy runs. Source keys equal run IDs. */
71
+ get dataSource():EvalResultSource|undefined;set dataSource(value:EvalResultSource|undefined);
72
+ /** Zero-based provider page. Null selection uses the first global row, primed with a size-one
73
+ * page-zero request when necessary, independently of this displayed page. */
74
+ sourcePage:number;
75
+ /** Provider rows per page, normalized to 1..500. */
76
+ sourcePageSize:number;
77
+ /** Exact displayed-query total; null while pending/failed or outside provider mode. */
78
+ get sourceTotal():number|null;private get sourceMode();requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;attributeChangedCallback(name:string,old:string|null,value:string|null):void;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private clearSourceLifecycle;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private syncSource;private loadSourcePage;private syncPair;private sourceColumns;
59
79
  /** The runs (one per model or prompt version) being compared for this evaluation example. Empty
60
80
  * ids are omitted and duplicates normalize first-wins before selection, diff, grid, and review
61
81
  * events. */
@@ -1,7 +1,7 @@
1
- import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./eval-result.styles.js";import{firstByIdentityMemo}from"../collection-identity.js";import{LYRA_DEFAULT_evaluationDashboardRunsLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_noData}from"../../../internal/default-strings/shared.generated.js";const EMPTY_RUNS=[],EMPTY_COLUMNS=[],EMPTY_KEYS=[],runId=run=>run.id,columnKey=column=>column.key,rubricKey=key=>key.key,rowKey=row=>row.id;class LyraEvalResult extends LyraElement{constructor(){super(...arguments),this.runs=EMPTY_RUNS,this.columns=EMPTY_COLUMNS,this.rubricKeys=EMPTY_KEYS,this.label="",this.selectedRunId=null,this.baselineRunId=null,this.reviewSkippable=!1,this.disabled=!1}static{this.defaultStrings={...super.defaultStrings,evaluationDashboardRunsLabel:LYRA_DEFAULT_evaluationDashboardRunsLabel,noData:LYRA_DEFAULT_noData}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["runs","columns","rubricKeys"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-run-activate","lr-review-input","lr-review-validity-change","lr-review-submit","lr-review-skip"])}get normalizedRuns(){return firstByIdentityMemo(Array.isArray(this.runs)?this.runs:[],runId)}get normalizedColumns(){return firstByIdentityMemo(Array.isArray(this.columns)?this.columns:[],columnKey)}get normalizedRubricKeys(){return firstByIdentityMemo(Array.isArray(this.rubricKeys)?this.rubricKeys:[],rubricKey)}get effectiveSelectedRunId(){return this.selectedRunId??this.normalizedRuns[0]?.id??""}get selectedRun(){const id=this.effectiveSelectedRunId;return this.normalizedRuns.find(run=>run.id===id)}get effectiveBaselineRunId(){return this.baselineRunId??this.normalizedRuns[0]?.id??""}get baselineRun(){const id=this.effectiveBaselineRunId;return this.normalizedRuns.find(run=>run.id===id)}stopOwnedEvent(event){event.stopPropagation()}reviewValue(run){const json=JSON.stringify(run.review??null);return(this.reviewBinding?.id!==run.id||this.reviewBinding.json!==json)&&(this.reviewBinding={id:run.id,json,value:run.review??{}}),this.reviewBinding.value}renderReview(selected){return html`<lr-rubric-form
1
+ import{__decorate}from"tslib";import{SourcePageController}from"../../../internal/source-page-controller.js";import{finiteInteger}from"../../../internal/numbers.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{projectEvalSourceRun,projectEvalSourceReview}from"./eval-result-source.js";import{collectionSupport,snapshotEventDetail}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./eval-result.styles.js";import{agentActionButtonStyles}from"../agent-action-button.styles.js";import{firstByIdentityMemo}from"../collection-identity.js";import{LYRA_DEFAULT_evaluationDashboardRunsLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_loading,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_sourceSelectionFailed,LYRA_DEFAULT_sourceSelectionLoading}from"../../../internal/default-strings/shared.generated.js";const EMPTY_RUNS=[],EMPTY_COLUMNS=[],EMPTY_KEYS=[],runId=run=>run.id,columnKey=column=>column.key,rubricKey=key=>key.key,rowKey=row=>row.id;class LyraEvalResult extends LyraElement{constructor(){super(...arguments),this.sourceStateVersion=0,this.sourceEpoch=0,this.sourceVersion=0,this.pairVersion=0,this.sourceSyncing=!1,this.sourceResync=!1,this.sourceLocaleUpdate=!1,this.sourceRows=[],this.sourcePair=[],this.sourceOriginals=new WeakMap,this.sourcePriming=!1,this.sourceTableShown=!1,this.sourceSortKey=null,this.sourceSortDir="asc",this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.failureInitialized=!1,this.previousFailure=!1,this.sourcePages=new SourcePageController(this,{normalizeRecord:(record,isCurrent)=>{const epoch=this.sourceEpoch,source=this.dataSource,owner=this.ownerDocument,value=projectEvalSourceRun(record,()=>isCurrent()&&this.isConnected&&this.sourceEpoch===epoch&&this.dataSource===source&&this.ownerDocument===owner);return this.sourceOriginals.set(value,record.value),{key:record.key,order:record.order,value}},validateMetadata:()=>{},onChange:()=>{this.sourceStateVersion++}}),this.sourcePage=0,this.sourcePageSize=100,this.runs=EMPTY_RUNS,this.columns=EMPTY_COLUMNS,this.rubricKeys=EMPTY_KEYS,this.label="",this.selectedRunId=null,this.baselineRunId=null,this.reviewSkippable=!1,this.disabled=!1}static{this.defaultStrings={...super.defaultStrings,evaluationDashboardRunsLabel:LYRA_DEFAULT_evaluationDashboardRunsLabel,loading:LYRA_DEFAULT_loading,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,sourceSelectionFailed:LYRA_DEFAULT_sourceSelectionFailed,sourceSelectionLoading:LYRA_DEFAULT_sourceSelectionLoading}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["runs","columns","rubricKeys"])}static{this.styles=[LyraElement.styles,styles,agentActionButtonStyles]}static{this.immutableEventDetails=Object.freeze(["lr-run-activate","lr-review-input","lr-review-validity-change","lr-review-submit","lr-review-skip"])}static{this.identityCollectionObjectProperties=Object.freeze(["dataSource"])}static{this.identityEventDetailProperties=Object.freeze({"lr-run-activate":Object.freeze(["run"])})}get dataSource(){return this._dataSource}set dataSource(value){const old=this._dataSource;this._dataSource=value,this.sourceEpoch=(this.sourceEpoch??0)+1,this.requestUpdate("dataSource",old)}get sourceTotal(){return this.sourceMode?this.sourceResult?.total??null:null}get sourceMode(){return this.dataSource!==void 0}requestUpdate(...args){if(this.sourceLocaleUpdate){super.requestUpdate(...args),this.syncSource();return}args[0]===void 0&&!this.sourceLocaleUpdate&&(!this.sourceOrderInputs||this.effectiveLocale===this.sourceOrderInputs[3])&&(this.sourceEpoch=(this.sourceEpoch??0)+1),(args[0]===void 0||["dataSource","sourcePage","sourcePageSize"].includes(String(args[0])))&&this.syncSource(),["selectedRunId","baselineRunId"].includes(String(args[0]))&&this.sourcePages&&this.sourceMode&&(this.syncSource(),this.syncPair()),args[0]==="rubricKeys"&&(this.sourceReviewMemo=void 0,this.pairFailure=void 0),super.requestUpdate(...args)}attributeChangedCallback(name,old,value){const previous=this.sourceLocaleUpdate;(name==="lang"||name==="locale")&&(this.sourceLocaleUpdate=!0);try{super.attributeChangedCallback(name,old,value)}finally{this.sourceLocaleUpdate=previous}}connectedCallback(){super.connectedCallback(),this.syncSource()}disconnectedCallback(){this.clearSourceLifecycle(),super.disconnectedCallback()}adoptedCallback(){this.clearSourceLifecycle(),this.sourcePages.adopted(),this.announcements.adopted(),super.adoptedCallback(),this.syncSource()}clearSourceLifecycle(){this.sourceEpoch++,this.sourceVersion++,this.pairVersion++,this.sourceTableShown=!1,this.failureInitialized=!1,this.previousFailure=!1,this.sourceInputs=void 0,this.sourceOrderInputs=void 0,this.pairInputs=void 0,this.acceptedSourceRevision=void 0,this.sourceRows=[],this.sourcePair=[],this.sourceResult=void 0,this.fallbackId=void 0,this.sourceReviewMemo=void 0,this.sourceColumnsMemo=void 0,this.sourcePages.bind(void 0)}willUpdate(changed){super.willUpdate(changed),this.syncSource(),this.syncPair()}updated(changed){super.updated(changed);const state2=this.sourcePages.state,failed=this.sourceMode&&!!(this.pairFailure||state2.selectionError);this.failureInitialized&&failed&&!this.previousFailure&&this.announcements.announcePolite(this.localize("sourceSelectionFailed")),this.sourceMode&&!state2.pending&&!state2.selectionPending&&(this.sourceResult||state2.error||this.sourceFailure)&&(this.failureInitialized=!0),this.previousFailure=failed}syncSource(){if(!this.sourcePages)return;if(this.sourceSyncing){this.sourceResync=!0;return}if(!this.isConnected)return;this.sourceSyncing=!0;const source=this.dataSource,epoch=this.sourceEpoch,current=()=>this.dataSource===source&&this.sourceEpoch===epoch&&this.isConnected;try{if(source===void 0){this.sourceInputs&&this.clearSourceLifecycle(),this.sourceFailure=void 0,this.pairFailure=void 0;return}const revision=source.revision;if(!current())return;const locale=this.effectiveLocale,size=finiteInteger(this.sourcePageSize,100,1,500);let page=finiteInteger(this.sourcePage,0,0,Math.floor(Number.MAX_SAFE_INTEGER/size));const orderInputs=[source,revision,epoch,locale,this.sourceSortKey,this.sourceSortDir],resetFallback=!this.sourceOrderInputs||orderInputs.some((value,index)=>value!==this.sourceOrderInputs[index]);this.sourceInputs&&(size!==this.sourceInputs[6]||this.sourceSortKey!==this.sourceInputs[4]||this.sourceSortDir!==this.sourceInputs[5])&&(page=0);const inputs=[...orderInputs,size,page],needPrime=(this.selectedRunId===null||this.baselineRunId===null)&&(resetFallback||this.fallbackId===void 0);if(this.sourceInputs&&inputs.every((value,index)=>value===this.sourceInputs[index])&&!(needPrime&&!this.sourcePriming&&this.sourceResult))return;const version=++this.sourceVersion;if(resetFallback&&(this.fallbackId=void 0),this.sourceOrderInputs=orderInputs,this.sourceInputs=inputs,this.sourceRows=[],this.sourceResult=void 0,this.sourceColumnsMemo=void 0,this.sourceFailure=void 0,this.sourcePage=page,this.acceptedSourceRevision!==revision&&(this.pairVersion++,this.pairInputs=void 0,this.sourcePair=[],this.sourceReviewMemo=void 0),this.sourcePages.bind({source,revision,epoch,locale}),!current()||version!==this.sourceVersion)return;this.acceptedSourceRevision=revision,this.sourcePriming=needPrime&&page!==0;const query=Object.freeze({sortKey:this.sourceSortKey,sortDir:this.sourceSortDir});this.loadSourcePage(version,query,page,size,this.sourcePriming),this.syncPair()}catch(error){current()&&(this.sourceVersion++,this.pairVersion++,this.sourceRows=[],this.sourceResult=void 0,this.sourcePair=[],this.sourceFailure=error,this.sourcePages.bind(void 0))}finally{this.sourceSyncing=!1,this.sourceResync&&(this.sourceResync=!1,this.syncSource())}}async loadSourcePage(version,query,page,size,prime){const owner=this.ownerDocument,current=()=>this.isConnected&&this.ownerDocument===owner&&this.sourceVersion===version&&this.sourceMode;if(prime){const accepted2=await this.sourcePages.request(query,0,1);if(!current())return;if(!accepted2){this.sourcePriming=!1,this.sourceStateVersion++;return}if(this.fallbackId=this.sourcePages.state.result.rows[0]?.key??null,this.syncPair(),!current())return}const accepted=await this.sourcePages.request(query,page,size);current()&&(this.sourcePriming=!1,accepted&&(this.sourceResult=this.sourcePages.state.result,this.sourceRows=this.sourceResult.rows.map(record=>record.value),this.fallbackId===void 0&&this.sourcePages.state.page===0&&(this.fallbackId=this.sourceRows[0]?.id??null),this.sourceInputs&&(this.sourceInputs=[...this.sourceInputs.slice(0,-1),this.sourcePages.state.page]),this.sourcePage=this.sourcePages.state.page,this.syncPair()),this.sourceStateVersion++)}syncPair(force=!1){if(!this.sourcePages||!this.sourceMode||!this.isConnected)return;const selected=this.selectedRunId??this.fallbackId,baseline=this.baselineRunId??this.fallbackId,inputs=[this.dataSource,this.sourceEpoch,this.acceptedSourceRevision,selected,baseline];if(!force&&this.pairInputs&&inputs.every((value,index)=>value===this.pairInputs[index]))return;this.pairInputs=inputs;const version=++this.pairVersion,owner=this.ownerDocument;this.sourcePair=[],this.sourceReviewMemo=void 0,this.pairFailure=void 0;const keys=[...new Set([selected,baseline].filter(id=>typeof id=="string"&&id.length>0))];this.sourcePages.resolveSelection(keys).then(records=>{!this.isConnected||this.ownerDocument!==owner||this.pairVersion!==version||!this.sourceMode||(records&&(this.sourcePair=records),this.sourceStateVersion++)})}sourceColumns(){const columns=this.normalizedColumns;if(this.sourceColumnsMemo?.columns===columns&&this.sourceColumnsMemo.rows===this.sourceRows)return this.sourceColumnsMemo.value;const rows=this.sourceRows,version=this.sourceVersion,current=()=>this.isConnected&&this.sourceMode&&this.sourceVersion===version&&this.sourceRows===rows,value=columns.map(column=>{const wrapped={...column};for(const name of["cell","cellStyle","cellTitle","heatValue","editValue","editLabel"]){const callback=column[name];typeof callback=="function"&&Object.assign(wrapped,{[name]:row=>{if(!current()||!rows.includes(row))return;const result=callback.call(column,this.sourceOriginals.get(row));return current()?result:void 0}})}return column.footer&&(wrapped.footer=pageRows=>{if(!current())return;const result=column.footer(pageRows.map(row=>this.sourceOriginals.get(row)));return current()?result:void 0}),wrapped});return this.sourceColumnsMemo={columns,rows,value},value}get normalizedRuns(){return firstByIdentityMemo(Array.isArray(this.runs)?this.runs:[],runId)}get normalizedColumns(){return firstByIdentityMemo(Array.isArray(this.columns)?this.columns:[],columnKey)}get normalizedRubricKeys(){return firstByIdentityMemo(Array.isArray(this.rubricKeys)?this.rubricKeys:[],rubricKey)}get effectiveSelectedRunId(){return this.selectedRunId??(this.sourceMode?this.fallbackId:this.normalizedRuns[0]?.id)??""}get selectedRun(){const id=this.effectiveSelectedRunId;return this.sourceMode?this.sourcePair.find(record=>record.key===id)?.value:this.normalizedRuns.find(run=>run.id===id)}get effectiveBaselineRunId(){return this.baselineRunId??(this.sourceMode?this.fallbackId:this.normalizedRuns[0]?.id)??""}get baselineRun(){const id=this.effectiveBaselineRunId;return this.sourceMode?this.sourcePair.find(record=>record.key===id)?.value:this.normalizedRuns.find(run=>run.id===id)}stopOwnedEvent(event){event.stopPropagation()}reviewValue(run){const json=JSON.stringify(run.review??null);return(this.reviewBinding?.id!==run.id||this.reviewBinding.json!==json)&&(this.reviewBinding={id:run.id,json,value:run.review??{}}),this.reviewBinding.value}renderReview(selected){const source=this.sourceMode,epoch=this.sourceEpoch,version=this.pairVersion,current=()=>!source&&!this.sourceMode||source&&this.isConnected&&this.sourceMode&&this.sourceEpoch===epoch&&this.pairVersion===version&&this.selectedRun===selected&&!this.pairFailure;let value;if(source)try{const keys=this.normalizedRubricKeys;if(this.sourceReviewMemo?.run!==selected||this.sourceReviewMemo.keys!==keys){const projected=projectEvalSourceReview(selected.review,keys,current);if(!current())return nothing;this.sourceReviewMemo={run:selected,keys,value:projected}}value=this.sourceReviewMemo.value}catch(error){return current()&&(this.pairFailure=error,this.sourceStateVersion++),nothing}else value=this.reviewValue(selected);return html`<lr-rubric-form
2
2
  part="review"
3
3
  .keys=${this.normalizedRubricKeys}
4
- .value=${this.reviewValue(selected)}
4
+ .value=${value}
5
5
  item-id=${selected.id}
6
6
  ?skippable=${this.reviewSkippable}
7
7
  ?disabled=${this.disabled}
@@ -10,10 +10,10 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
10
10
  @focus=${this.stopOwnedEvent}
11
11
  @blur=${this.stopOwnedEvent}
12
12
  @lr-invalid=${this.stopOwnedEvent}
13
- @lr-input=${e=>{e.stopPropagation(),this.emit("lr-review-input",{runId:selected.id,value:e.detail.value})}}
14
- @lr-validity-change=${e=>{e.stopPropagation(),this.emit("lr-review-validity-change",{runId:selected.id,valid:e.detail.valid,errors:e.detail.errors})}}
15
- @lr-submit=${e=>{e.stopPropagation(),this.emit("lr-review-submit",{runId:e.detail.itemId,value:e.detail.value})}}
16
- @lr-skip=${e=>{e.stopPropagation(),this.emit("lr-review-skip",{runId:e.detail.itemId})}}
13
+ @lr-input=${e=>{e.stopPropagation(),!(!current()||source&&this.disabled)&&this.emit("lr-review-input",{runId:selected.id,value:e.detail.value})}}
14
+ @lr-validity-change=${e=>{e.stopPropagation(),!(!current()||source&&this.disabled)&&this.emit("lr-review-validity-change",{runId:selected.id,valid:e.detail.valid,errors:e.detail.errors})}}
15
+ @lr-submit=${e=>{e.stopPropagation(),!(!current()||source&&this.disabled)&&this.emit("lr-review-submit",{runId:source?selected.id:e.detail.itemId,value:e.detail.value})}}
16
+ @lr-skip=${e=>{e.stopPropagation(),!(!current()||source&&this.disabled)&&this.emit("lr-review-skip",{runId:source?selected.id:e.detail.itemId})}}
17
17
  ></lr-rubric-form>`}renderDiff(selected,baseline){const comparing=!!(baseline&&baseline.id!==selected.id),selectedOutput=typeof selected.output=="string"?selected.output:"",baselineOutput=typeof baseline?.output=="string"?baseline.output:selectedOutput;return html`<div part="diff">
18
18
  ${comparing?html`<div part="diff-labels">
19
19
  <span part="diff-label-old">${baseline.label}</span>
@@ -28,11 +28,23 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
28
28
  @lr-error=${this.stopOwnedEvent}
29
29
  @lr-copy-error=${this.stopOwnedEvent}
30
30
  ></lr-diff-view>
31
- </div>`}render(){const runs=this.normalizedRuns;if(runs.length===0)return html`<div part="base"><p part="empty">${this.localize("noData")}</p></div>`;const selected=this.selectedRun;return html`
31
+ </div>`}render(){const source=this.sourceMode,runs=source?this.sourceRows:this.normalizedRuns,version=this.sourceVersion,pairVersion=this.pairVersion,state2=this.sourcePages.state,current=()=>this.isConnected&&this.sourceMode&&this.sourceVersion===version&&this.sourceRows===runs;if(source&&!state2.pending&&!this.sourcePriming&&(this.sourceResult||state2.error||this.sourceFailure)&&(this.sourceTableShown=!0),source&&!this.sourceTableShown)return html`<div part="base"><p part="source-status">${this.localize("loading")}</p></div>`;if(!source&&runs.length===0)return html`<div part="base"><p part="empty">${this.localize("noData")}</p></div>`;const selected=this.selectedRun,review=selected&&!this.pairFailure&&!state2.selectionPending?this.renderReview(selected):nothing,selectionFailed=source&&!!(this.pairFailure||state2.selectionError),selectionLoading=source&&(state2.selectionPending||(this.selectedRunId===null||this.baselineRunId===null)&&this.fallbackId===void 0);return html`
32
32
  <div part="base">
33
33
  <lr-table
34
34
  part="grid"
35
- .columns=${this.normalizedColumns}
35
+ .columns=${source?this.sourceColumns():this.normalizedColumns}
36
+ .paginationMode=${source?"server":"client"}
37
+ .sortMode=${source?"server":"client"}
38
+ .page=${source?finiteInteger(this.sourcePage,0,0,Number.MAX_SAFE_INTEGER-1)+1:1}
39
+ .pageSize=${source?finiteInteger(this.sourcePageSize,100,1,500):100}
40
+ .sortKey=${source?this.sourceSortKey??"":""}
41
+ .sortDir=${source?this.sourceSortDir:"asc"}
42
+ .totalItems=${source?this.sourceTotal??0:0}
43
+ .unknownTotal=${source&&this.sourceTotal===null}
44
+ .hasNext=${!1}
45
+ .loading=${source&&(state2.pending||this.sourcePriming)}
46
+ .error=${source&&!!(state2.error||this.sourceFailure)}
47
+ .strings=${this.strings}
36
48
  .rows=${runs}
37
49
  .rowKey=${rowKey}
38
50
  .selectionMode=${"single"}
@@ -42,20 +54,22 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
42
54
  @change=${this.stopOwnedEvent}
43
55
  @focus=${this.stopOwnedEvent}
44
56
  @blur=${this.stopOwnedEvent}
45
- @lr-sort-request=${this.stopOwnedEvent}
57
+ @lr-sort-request=${e=>{if(!source){e.stopPropagation();return}if(!current()){e.preventDefault(),e.stopPropagation();return}this.sortRequest={target:e.currentTarget,version,columns:this.columns,key:e.detail.sortKey,dir:e.detail.sortDir}}}
46
58
  @lr-priority-columns-visibility-change=${this.stopOwnedEvent}
47
- @lr-sort=${this.stopOwnedEvent}
59
+ @lr-sort=${e=>{if(!source){e.stopPropagation();return}const request=this.sortRequest;if(this.sortRequest=void 0,!current()||!request||request.target!==e.currentTarget||request.version!==version||request.columns!==this.columns||request.key!==e.detail.sortKey||request.dir!==e.detail.sortDir){e.stopPropagation();return}this.sourceSortKey=e.detail.sortKey,this.sourceSortDir=e.detail.sortDir,this.syncSource(),this.sourceStateVersion++}}
48
60
  @lr-row-expand-toggle=${this.stopOwnedEvent}
49
61
  @lr-load-more=${this.stopOwnedEvent}
50
62
  @lr-selection-change=${this.stopOwnedEvent}
51
63
  @lr-filter-change=${this.stopOwnedEvent}
52
- @lr-page-change=${this.stopOwnedEvent}
64
+ @lr-page-change=${e=>{e.stopPropagation(),source&&current()&&(this.sourcePage=e.detail.page-1)}}
65
+ @lr-retry-request=${e=>{e.stopPropagation(),source&&current()&&this.requestUpdate()}}
53
66
  @lr-cell-edit=${this.stopOwnedEvent}
54
67
  @lr-column-resize=${this.stopOwnedEvent}
55
- @lr-row-activate=${e=>{e.stopPropagation(),this.emit("lr-run-activate",{runId:e.detail.row.id,run:e.detail.row})}}
68
+ @lr-row-activate=${e=>{e.stopPropagation();const run=e.detail.row;if(source){if(!current()||!runs.includes(run))return;this.emit("lr-run-activate",Object.freeze({runId:run.id,run}))}else this.sourceMode||this.emit("lr-run-activate",snapshotEventDetail({runId:run.id,run},this.ownerDocument.defaultView))}}
56
69
  @lr-row-click=${this.stopOwnedEvent}
57
70
  ></lr-table>
58
- ${selected?this.renderReview(selected):nothing}
59
- ${selected?this.renderDiff(selected,this.baselineRun):nothing}
71
+ ${selectionLoading||selectionFailed?html`<div part="selection-status">${this.localize(selectionFailed?"sourceSelectionFailed":"sourceSelectionLoading")}${selectionFailed?html`<button part="selection-retry" data-agent-action type="button" @click=${()=>{current()&&this.pairVersion===pairVersion&&this.syncPair(!0)}}>${this.localize("retry")}</button>`:nothing}</div>`:nothing}
72
+ ${review}
73
+ ${selected&&!selectionFailed&&!selectionLoading?this.renderDiff(selected,this.baselineRun):nothing}
60
74
  </div>
61
- `}}__decorate([property({attribute:!1})],LyraEvalResult.prototype,"runs",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"columns",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"rubricKeys",void 0),__decorate([property()],LyraEvalResult.prototype,"label",void 0),__decorate([property({attribute:"selected-run-id"})],LyraEvalResult.prototype,"selectedRunId",void 0),__decorate([property({attribute:"baseline-run-id"})],LyraEvalResult.prototype,"baselineRunId",void 0),__decorate([property({type:Boolean,attribute:"review-skippable"})],LyraEvalResult.prototype,"reviewSkippable",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalResult.prototype,"disabled",void 0);export{LyraEvalResult};
75
+ `}}__decorate([state()],LyraEvalResult.prototype,"sourceStateVersion",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"dataSource",null),__decorate([property({type:Number,attribute:"source-page"})],LyraEvalResult.prototype,"sourcePage",void 0),__decorate([property({type:Number,attribute:"source-page-size"})],LyraEvalResult.prototype,"sourcePageSize",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"runs",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"columns",void 0),__decorate([property({attribute:!1})],LyraEvalResult.prototype,"rubricKeys",void 0),__decorate([property()],LyraEvalResult.prototype,"label",void 0),__decorate([property({attribute:"selected-run-id"})],LyraEvalResult.prototype,"selectedRunId",void 0),__decorate([property({attribute:"baseline-run-id"})],LyraEvalResult.prototype,"baselineRunId",void 0),__decorate([property({type:Boolean,attribute:"review-skippable"})],LyraEvalResult.prototype,"reviewSkippable",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraEvalResult.prototype,"disabled",void 0);export{LyraEvalResult};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-l);min-inline-size:0;color:var(--lr-color-text);flex-direction:column;display:flex}[part=empty]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);margin:0}[part=grid],[part=review],[part=diff],[part=diff-view]{min-inline-size:0}[part=diff]{gap:var(--lr-space-2xs);flex-direction:column;display:flex}[part=diff-labels]{justify-content:space-between;gap:var(--lr-space-s);font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);text-transform:uppercase;letter-spacing:var(--lr-size-0-02em);overflow-wrap:anywhere;flex-wrap:wrap;min-inline-size:0;display:flex}[part=diff-label-old],[part=diff-label-new]{overflow-wrap:anywhere;min-inline-size:0}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-l);min-inline-size:0;color:var(--lr-color-text);flex-direction:column;display:flex}[part=empty]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);margin:0}[part=selection-status]{align-items:center;gap:var(--lr-space-s);overflow-wrap:anywhere;color:var(--lr-color-text-quiet);flex-wrap:wrap;display:flex}[part=grid],[part=review],[part=diff],[part=diff-view]{min-inline-size:0}[part=diff]{gap:var(--lr-space-2xs);flex-direction:column;display:flex}[part=diff-labels]{justify-content:space-between;gap:var(--lr-space-s);font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);text-transform:uppercase;letter-spacing:var(--lr-size-0-02em);overflow-wrap:anywhere;flex-wrap:wrap;min-inline-size:0;display:flex}[part=diff-label-old],[part=diff-label-new]{overflow-wrap:anywhere;min-inline-size:0}`;export{styles};
@@ -0,0 +1,10 @@
1
+ import type{RubricValue}from'../../forms/rubric-form/rubric-form.class.js';
2
+ /**
3
+ * One model/prompt-version's output for a single evaluation example, plus whatever automated
4
+ * `scores` it already carries and whatever `review` a human has entered for it so far. `scores`
5
+ * and `review` are both keyed the same way as the `rubricKeys` passed to this component -- the
6
+ * same `RubricValue` shape `<lr-rubric-form>` itself reads and writes -- so a `TableColumn`'s
7
+ * `cell()` accessor and the rubric form's own `value` binding can both read a run's fields with
8
+ * no conversion.
9
+ */
10
+ export interface EvalRunResult{readonly id:string;readonly label:string;readonly model?:string;readonly promptVersion?:string;readonly output:string;readonly scores?:RubricValue;readonly review?:RubricValue;}
@@ -1,4 +1,4 @@
1
- import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraSpan}from'../trace-tree/span.js';export type{LyraSpan}from'../trace-tree/span.js';export interface LyraSpanWaterfallEventMap{'lr-span-select':CustomEvent<{spanId:string;}>;}
1
+ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraSpan}from'../trace-tree/span.js';import type{TraceTreeSource}from'../trace-tree/trace-tree.class.js';export type{LyraSpan}from'../trace-tree/span.js';export type{TraceTreeSource}from'../trace-tree/trace-tree.class.js';export interface LyraSpanWaterfallEventMap{'lr-span-select':CustomEvent<{spanId:string;}>;}
2
2
  /**
3
3
  * `<lr-span-waterfall>` — the horizontal-timeline projection of the same
4
4
  * `LyraSpan[]` `<lr-trace-tree>` consumes: a time axis, one row per span
@@ -13,6 +13,17 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
13
13
  * The time axis always scales to the whole trace, including spans the 500-row ceiling drops, so a
14
14
  * truncated tail never stretches the surviving bars across the track.
15
15
  *
16
+ * With treeSource defined, provider preorder and child metadata replace local sorting/topology.
17
+ * The required global summary supplies the default axis; explicit time-window overrides remain
18
+ * available. Source rows own focus/activation; their bars are presentation rather than a second
19
+ * button. Provider expansion does not introduce an additional public event.
20
+ *
21
+ * @csspart source-list - Bounded provider virtual viewport.
22
+ * @csspart source-row - Provider tree item, activation and focus owner.
23
+ * @csspart source-label - Provider row presentation.
24
+ * @csspart source-toggle - Provider expansion or retry control.
25
+ * @csspart source-status - Localized provider loading, count or empty state.
26
+ * @csspart source-error - Localized provider failure.
16
27
  * @customElement lr-span-waterfall
17
28
  * @event lr-span-select - `detail: { spanId }` — a bar/row was activated (click, Enter, Space).
18
29
  * @csspart base - The root wrapper.
@@ -22,14 +33,14 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
22
33
  * @csspart row - One span's row.
23
34
  * @csspart name - The span's name (the row's name gutter).
24
35
  * @csspart bar-track - The bar's positioning track.
25
- * @csspart bar - The interactive, focusable status-toned bar (`role` via `<button>`), with the
36
+ * @csspart bar - The status-toned bar; presentation only in provider mode. In legacy mode, the interactive, focusable bar (`role` via `<button>`), with the
26
37
  * shared `--lr-icon-button-size` minimum target in both axes even when its duration would paint
27
38
  * more narrowly.
28
39
  * @csspart meta - Secondary row info (status/duration), shown inline under 480px.
29
40
  * @csspart status-text - The visible status label.
30
41
  * @csspart duration - The formatted duration text.
31
42
  * @csspart empty - The empty-state message shown when `spans` is empty.
32
- * @csspart limit - Localized notice shown when the shared 500-span projection ceiling is reached.
43
+ * @csspart limit - Localized shown/source count when the 500-span projection or 10,000-input ceiling is reached.
33
44
  * @cssprop [--lr-span-waterfall-name-width=8rem] - Width of the name gutter column.
34
45
  * @cssprop [--lr-span-waterfall-stripe-speed=var(--lr-duration-ambient)] - Animation duration for a
35
46
  * `running` span's striped bar. The fallback is the bare-duration `--lr-duration-ambient`, not the
@@ -53,8 +64,18 @@ export declare class LyraSpanWaterfall extends LyraElement<LyraSpanWaterfallEven
53
64
  /** Span sources can carry opaque provider metadata; the shared normalizer copies only its closed
54
65
  * display schema once, so cloning each whole source record would both lose opaque identity and
55
66
  * create an unsafe second traversal. */
56
- protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
67
+ protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];private _treeSource;private sourceVersion;private sourcePaintVersion;private sourceWrapper?;private readonly sourceSummaries;private sourceAnnouncement?;private sourceReveal?;private readonly sourceControl;
68
+ /** Immutable provider preorder; defined sources win over spans, even when invalid.
69
+ * Four 100-row pages and one focused row are retained; at most 301 rows mount.
70
+ * Provider metadata owns topology and selection, and summary owns the complete timing extent.
71
+ * Reassign or requestUpdate() after changing revision. Unset restores legacy spans.
72
+ * @default undefined */
73
+ get treeSource():TraceTreeSource|undefined;set treeSource(value:TraceTreeSource|undefined);
74
+ /** Reveal and focus a full-source key; false when absent, disabled or superseded. */
75
+ revealSourceKey(key:string):Promise<boolean>;private syncSource;private wrapSource;private normalizeSourceSpan;requestUpdate(name?:PropertyKey,oldValue?:unknown):void;private sourceSummary;private updateSourceEffects;
57
76
  /** Identical contract to `<lr-trace-tree>.spans`; rows sort by `startMs` (ties keep array order).
77
+ * Retains the first 10,000 source entries by identity; the closed span projection avoids the
78
+ * shared 50,000-value deep-copy budget. The default rendered window remains 500 spans.
58
79
  * The controlled `activeSpanId` reserves a position inside the shared 500-row ceiling. Foreign
59
80
  * runtime `kind`/`status` values normalize to `'other'`/`'pending'` before rendering. */
60
81
  spans:readonly LyraSpan[];activeSpanId:string|null;
@@ -67,4 +88,4 @@ viewStartMs:number|null;viewEndMs:number|null;
67
88
  withoutAxis:boolean;
68
89
  /** Accessible name of the list. Omission localizes the default; any supplied string, including
69
90
  * `''`, is used verbatim. A host `aria-label` wins. */
70
- label?:string;private focusedId;private sortedSource?;private sortedActiveSpanId;private sortedCache;private sortedCacheTruncated;private sortedCacheExtentEndMs;private axisSignature;private axisObserver?;private observedAxis?;private readonly announcements;private limitAnnouncementInitialized;private previouslyTruncated;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private sortedSpans;private viewWindow;private barGeometry;private formatDuration;private projectionLimitText;private focusRow;private selectRow;private onKeyDown;protected willUpdate(changed:PropertyValues):void;private renderedBarById;protected updated(changed:PropertyValues):void;private observeAxis;private fitAxisLabels;private renderAxis;private renderRow;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-span-waterfall':LyraSpanWaterfall;}}
91
+ label?:string;private focusedId;private sortedSource?;private sortedActiveSpanId;private sortedProjection?;private sortedCache;private sortedCacheTruncated;private sortedCacheExtentEndMs;private axisSignature;private axisObserver?;private observedAxis?;private readonly announcements;private limitAnnouncementInitialized;private previouslyTruncated;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private sortedSpans;private viewWindow;private barGeometry;private formatDuration;private projectionLimitText;private focusRow;private selectRow;private onKeyDown;protected willUpdate(changed:PropertyValues):void;private renderedBarById;protected updated(changed:PropertyValues):void;private observeAxis;private fitAxisLabels;private renderAxis;private renderRow;private sourceSpanLabel;private renderSourceSpan;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-span-waterfall':LyraSpanWaterfall;}}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteNumber,finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{formatShortDuration}from"../../../internal/duration.js";import{styles}from"./span-waterfall.styles.js";import{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanProjectionLimit,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_statusUnknown,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings/shared.generated.js";const KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied",incomplete:"statusIncomplete",unknown:"statusUnknown"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral",incomplete:"neutral",unknown:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.withoutAxis=!1,this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.sortedCacheExtentEndMs=0,this.axisSignature="",this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,spanProjectionLimit:LYRA_DEFAULT_spanProjectionLimit,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,statusUnknown:LYRA_DEFAULT_statusUnknown,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated,this.hasUpdated&&(this.observeAxis(),this.fitAxisLabels())}disconnectedCallback(){this.axisObserver?.disconnect(),this.axisObserver=void 0,this.observedAxis=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=normalizeLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated,this.sortedCacheExtentEndMs=projection.extentEndMs,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache}viewWindow(){this.sortedSpans();const fallbackEnd=Math.max(finiteNumber(this.sortedCacheExtentEndMs,0),1),start=this.viewStartMs==null?0:finiteRange(this.viewStartMs,0,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){return ms==null||!Number.isFinite(ms)?"":formatShortDuration(this.localize.bind(this),this.effectiveLocale,ms)}projectionLimitText(){return this.localize("spanProjectionLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_LYRA_SPANS)})}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}selectRow(id){this.focusedId=id,this.emit("lr-span-select",{spanId:id})}willUpdate(changed){if(super.willUpdate(changed),(changed.has("spans")||changed.has("activeSpanId"))&&(this.sortedSource=void 0),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId")){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const reducedMotion=!bar.ownerDocument.defaultView||prefersReducedMotion(this);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated&&this.announcements.announcePolite(this.projectionLimitText()),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated,this.observeAxis();const view=this.viewWindow(),axisSignature=`${view.start}|${view.end}|${this.effectiveLocale}`;axisSignature!==this.axisSignature&&(this.axisSignature=axisSignature,this.fitAxisLabels())}observeAxis(){if(!this.isConnected)return;const axis=this.renderRoot.querySelector('[part="axis"]')??void 0;if(axis===this.observedAxis)return;this.axisObserver?.disconnect(),this.observedAxis=axis;const owner=this.ownerDocument.defaultView,ResizeObserverCtor=owner?.ResizeObserver;if(!axis||!ResizeObserverCtor)return;const observer=new ResizeObserverCtor(()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.axisObserver!==observer||this.fitAxisLabels()});this.axisObserver=observer,observer.observe(axis)}fitAxisLabels(){if(!this.isConnected)return;const axis=this.renderRoot.querySelector('[part="axis"]');if(!axis)return;const ticks=Array.from(axis.querySelectorAll('[part="tick"]')),labels=ticks.map(tick=>tick.querySelector('[part="tick-label"]'));for(const tick of ticks)tick.removeAttribute("data-fit");for(const label of labels)label.removeAttribute("data-collapsed");const axisRect=axis.getBoundingClientRect();if(axisRect.width<=0)return;const rtl=this.ownerDocument.defaultView?.getComputedStyle(axis).direction==="rtl",span=rect=>rtl?{start:-rect.right,end:-rect.left}:{start:rect.left,end:rect.right},axisSpan=span(axisRect),rects=labels.map(label=>label.getBoundingClientRect());ticks.forEach((tick,index)=>{span(rects[index]).end>axisSpan.end+.5&&tick.setAttribute("data-fit","end")});const placed=labels.map(label=>{const{start,end}=span(label.getBoundingClientRect());return{label,start,end}}).sort((a,b)=>a.start-b.start),kept=[];placed.forEach((entry,index)=>{const isTerminal=index===placed.length-1;for(;kept.length>1&&isTerminal&&entry.start<kept[kept.length-1].end;)kept.pop().label.setAttribute("data-collapsed","");const previous=kept[kept.length-1];previous&&entry.start<previous.end?entry.label.setAttribute("data-collapsed",""):kept.push(entry)})}renderAxis(view){const ticks=axisTicks(view.start,view.end);return html`
1
+ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteNumber,finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{formatShortDuration}from"../../../internal/duration.js";import{styles}from"./span-waterfall.styles.js";import{normalizeLyraSpanKind,normalizeLyraSpanStatus}from"../trace-tree/span.js";import{projectLyraSpans}from"../trace-tree/span-projection.js";import{HierarchySourceController,hierarchyField,hierarchyKey,hierarchyText}from"../../../internal/hierarchy-source-controller.js";import{hierarchySourceView}from"../../../internal/hierarchy-source-view.js";import{hierarchySourceStyles}from"../../../internal/hierarchy-source-view.styles.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall,LYRA_DEFAULT_spanWaterfallLimit}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_expand,LYRA_DEFAULT_item,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_statusUnknown,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut,LYRA_DEFAULT_treeSourceError,LYRA_DEFAULT_treeSourceSummary}from"../../../internal/default-strings/shared.generated.js";const SOURCE_QUERY=Object.freeze({search:"",hiddenKinds:Object.freeze([])}),KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied",incomplete:"statusIncomplete",unknown:"statusUnknown"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral",incomplete:"neutral",unknown:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this._treeSource=void 0,this.sourceVersion=0,this.sourcePaintVersion=0,this.sourceSummaries=new WeakMap,this.sourceControl=new HierarchySourceController(this,{normalize:(value,key)=>this.normalizeSourceSpan(value,key),payload:{maxUnits:2e6,maxRowUnits:65536,unitsOf:span=>span.id.length+span.name.length},onChange:()=>{const old=this.sourcePaintVersion++;this.requestUpdate("sourcePaintVersion",old)},accepted:(action,_row,_state,current)=>{!current()||this.treeSource===void 0||action.type==="select"&&this.emit("lr-span-select",{spanId:action.key})}}),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.withoutAxis=!1,this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.sortedCacheExtentEndMs=0,this.axisSignature="",this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{if(this.treeSource!==void 0||e.currentTarget!==this.renderRoot.querySelector("[role=list]"))return;const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,expand:LYRA_DEFAULT_expand,item:LYRA_DEFAULT_item,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,spanWaterfallLimit:LYRA_DEFAULT_spanWaterfallLimit,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,statusUnknown:LYRA_DEFAULT_statusUnknown,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut,treeSourceError:LYRA_DEFAULT_treeSourceError,treeSourceSummary:LYRA_DEFAULT_treeSourceSummary}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,hierarchySourceStyles,styles]}get treeSource(){return this._treeSource}set treeSource(value){const previous=this._treeSource;this._treeSource=value,this.sourceVersion++,this.sourceReveal=void 0,this.sourceWrapper=value===void 0?void 0:this.wrapSource(value),this.syncSource(!0),this.requestUpdate("treeSource",previous)}revealSourceKey(key){return this.treeSource===void 0?Promise.resolve(!1):this.sourceControl.reveal(key)}syncSource(force=!1){this.sourceControl?.update(this.sourceWrapper,this.effectiveLocale,force,SOURCE_QUERY)}wrapSource(source){const host=this;return{get revision(){return source.revision},async project(request){const version=host.sourceVersion,owner=host.ownerDocument,owned=()=>host._treeSource===source&&host.sourceVersion===version&&host.ownerDocument===owner&&host.isConnected&&!request.signal.aborted,current=()=>{if(!owned())return!1;const revision=source.revision;return owned()&&revision===request.revision},check=()=>{if(!current())throw new Error("Trace source changed")};check();const project=source.project;check();const result=await project.call(source,request);check();const summary=result.summary;check();const startMs=hierarchyField(summary,"startMs");check();const endMs=hierarchyField(summary,"endMs");if(check(),typeof startMs!="number"||typeof endMs!="number"||!Number.isFinite(startMs)||!Number.isFinite(endMs)||startMs<0||endMs<startMs||!Number.isFinite(endMs-startMs))throw new TypeError("Invalid trace extent");const view=result.rows;check();const count=view.count;check();const hasItemAt="itemAt"in view;check();const itemAt=hasItemAt?view.itemAt:void 0;check();let wrapped;if(typeof itemAt=="function"){const indexed=view;wrapped={count,itemAt(index){check();const method=indexed.itemAt;check();const value=method.call(indexed,index);return check(),value},keyAt(index){check();const method=indexed.keyAt;check();const value=method.call(indexed,index);return check(),value},indexOfKey(key){check();const method=indexed.indexOfKey;check();const value=method.call(indexed,key);return check(),value}}}else{const ranged=view;wrapped={count,async read(range){const active=()=>{if(check(),range.signal.aborted)throw new Error("Trace range changed")};active();const method=ranged.read;active();const value=await method.call(ranged,range);return active(),value},async indexOfKey(key,context){const active=()=>{if(check(),context.signal.aborted)throw new Error("Trace navigation changed")};active();const method=ranged.indexOfKey;active();const value=await method.call(ranged,key,context);return active(),value}}}const state=result.state;check();const total=result.total;check();const focusIndex=result.focusIndex;return check(),host.sourceSummaries.set(wrapped,Object.freeze({startMs,endMs,current})),{state,total,rows:wrapped,...focusIndex===void 0?{}:{focusIndex}}}}}normalizeSourceSpan(value,key){const source=this.treeSource,version=this.sourceVersion,owner=this.ownerDocument,control=this.sourceControl,epoch=control.epoch,projection=control.projection,owned=()=>this.isConnected&&this.ownerDocument===owner&&this.treeSource===source&&this.sourceVersion===version&&this.sourceControl===control&&control.epoch===epoch&&control.projection===projection&&!control.loading,accepted=projection?this.sourceSummaries.get(projection.rows):void 0,current=()=>owned()&&!!accepted?.current()&&owned(),field=name=>{if(!current())throw new Error("Trace source changed");const result=hierarchyField(value,name);if(!current())throw new Error("Trace source changed");return result},id=hierarchyKey(field("id"));if(id!==key)throw new TypeError("Trace key mismatch");const startMs=field("startMs"),endMs=field("endMs");if(typeof startMs!="number"||!Number.isFinite(startMs)||startMs<0||endMs!==void 0&&(typeof endMs!="number"||!Number.isFinite(endMs)||endMs<startMs))throw new TypeError("Invalid span timing");return Object.freeze({id,name:hierarchyText(field("name")),kind:normalizeLyraSpanKind(field("kind")),status:normalizeLyraSpanStatus(field("status")),startMs,...endMs===void 0?{}:{endMs}})}requestUpdate(name,oldValue){this._treeSource!==void 0&&name===void 0&&(this.sourceVersion++,this.sourceReveal=void 0,this.syncSource(!0)),super.requestUpdate(name,oldValue)}sourceSummary(){const projection=this.sourceControl.projection;return projection?this.localize("treeSourceSummary",void 0,{visible:getNumberFormat(this.effectiveLocale).format(projection.rows.count),total:getNumberFormat(this.effectiveLocale).format(projection.total)}):""}updateSourceEffects(){const source=this.treeSource,binding=this.sourceWrapper,version=this.sourceVersion,epoch=this.sourceControl.epoch,owner=this.ownerDocument,projection=this.sourceControl.projection,{error,loading,rowError,rowsObserved}=this.sourceControl,bound=()=>this.isConnected&&this.ownerDocument===owner&&this.treeSource===source&&this.sourceWrapper===binding&&this.sourceVersion===version&&this.sourceControl.epoch===epoch,current=()=>bound()&&this.sourceControl.projection===projection&&this.sourceControl.error===error&&this.sourceControl.loading===loading&&this.sourceControl.rowError===rowError&&this.sourceControl.rowsObserved===rowsObserved;if(!current())return;for(const row of this.renderRoot.querySelectorAll("[data-source-key]")){const active=row.dataset.sourceKey===this.activeSpanId;row.setAttribute("aria-current",String(active)),row.toggleAttribute("data-active",active)}const status=error?this.localize("treeSourceError"):loading?this.localize("loading"):this.sourceSummary();if(!current()||this.sourceAnnouncement!==void 0&&status!==this.sourceAnnouncement&&(this.announcements.announcePolite(status),!current()))return;if(rowsObserved){const message=rowError?this.localize("treeSourceError"):"";if(!current()||(this.announcements.transition("source-rows",rowError?"error":"ready",message),!current()))return}this.sourceAnnouncement=status;const key=this.activeSpanId;!key||this.sourceReveal?.[0]===epoch&&this.sourceReveal[1]===key||(this.sourceReveal=[epoch,key],this.sourceControl.whenReady().then(ready=>{ready&&bound()&&this.activeSpanId===key&&this.sourceControl.reveal(key)}))}connectedCallback(){super.connectedCallback(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated,this.hasUpdated&&(this.observeAxis(),this.fitAxisLabels())}disconnectedCallback(){this.sourceVersion++,this.sourceReveal=void 0,this.sourceAnnouncement=void 0,this.axisObserver?.disconnect(),this.axisObserver=void 0,this.observedAxis=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted(),this.sourceVersion++,this.sourceReveal=void 0,this.sourceAnnouncement=void 0,this.sourceControl.adopted(),this.syncSource(!0)}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=projectLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated||publicCollectionTruncation(this,"spans")!==void 0,this.sortedCacheExtentEndMs=projection.extentEndMs,this.sortedProjection===projection.spans?this.sortedCache:(this.sortedProjection=projection.spans,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache)}viewWindow(){const projection=this.sourceControl.projection,summary=this.treeSource!==void 0&&projection?this.sourceSummaries.get(projection.rows):void 0;this.treeSource===void 0&&this.sortedSpans();const fallbackStart=summary?.startMs??0,fallbackEnd=summary?.endMs??(this.treeSource===void 0?Math.max(finiteNumber(this.sortedCacheExtentEndMs,0),1):1),start=this.viewStartMs==null?fallbackStart:finiteRange(this.viewStartMs,fallbackStart,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){return ms==null||!Number.isFinite(ms)?"":formatShortDuration(this.localize.bind(this),this.effectiveLocale,ms)}projectionLimitText(){const number=getNumberFormat(this.effectiveLocale);return this.localize("spanWaterfallLimit",void 0,{shown:number.format(this.sortedCache.length),total:number.format(publicCollectionTruncation(this,"spans")?.source??this.spans.length)})}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}selectRow(id){this.treeSource!==void 0||!this.isConnected||(this.focusedId=id,this.emit("lr-span-select",{spanId:id}))}willUpdate(changed){if(super.willUpdate(changed),this.syncSource(),this.treeSource===void 0&&(changed.has("treeSource")&&(this.sourceAnnouncement=void 0,this.sourceReveal=void 0,changed.set("spans",void 0)),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId"))){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),this.treeSource!==void 0){const version2=this.sourceVersion;if(this.updateSourceEffects(),version2!==this.sourceVersion||this.treeSource===void 0||!this.isConnected)return;this.observeAxis(),this.fitAxisLabels();return}const version=this.sourceVersion,owner=this.ownerDocument,current=()=>this.isConnected&&this.ownerDocument===owner&&this.sourceVersion===version&&this.treeSource===void 0;if(changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const reducedMotion=!bar.ownerDocument.defaultView||prefersReducedMotion(this);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}if(this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated){const message=this.projectionLimitText();if(!current()||(this.announcements.announcePolite(message),!current()))return}this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated,this.observeAxis();const view=this.viewWindow(),axisSignature=`${view.start}|${view.end}|${this.effectiveLocale}`;axisSignature!==this.axisSignature&&(this.axisSignature=axisSignature,this.fitAxisLabels())}observeAxis(){if(!this.isConnected)return;const axis=this.renderRoot.querySelector('[part="axis"]')??void 0;if(axis===this.observedAxis)return;this.axisObserver?.disconnect(),this.observedAxis=axis;const owner=this.ownerDocument.defaultView,ResizeObserverCtor=owner?.ResizeObserver;if(!axis||!ResizeObserverCtor)return;const observer=new ResizeObserverCtor(()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.axisObserver!==observer||this.fitAxisLabels()});this.axisObserver=observer,observer.observe(axis)}fitAxisLabels(){if(!this.isConnected)return;const axis=this.renderRoot.querySelector('[part="axis"]');if(!axis)return;const ticks=Array.from(axis.querySelectorAll('[part="tick"]')),labels=ticks.map(tick=>tick.querySelector('[part="tick-label"]'));for(const tick of ticks)tick.removeAttribute("data-fit");for(const label of labels)label.removeAttribute("data-collapsed");const axisRect=axis.getBoundingClientRect();if(axisRect.width<=0)return;const rtl=this.ownerDocument.defaultView?.getComputedStyle(axis).direction==="rtl",span=rect=>rtl?{start:-rect.right,end:-rect.left}:{start:rect.left,end:rect.right},axisSpan=span(axisRect),rects=labels.map(label=>label.getBoundingClientRect());ticks.forEach((tick,index)=>{span(rects[index]).end>axisSpan.end+.5&&tick.setAttribute("data-fit","end")});const placed=labels.map(label=>{const{start,end}=span(label.getBoundingClientRect());return{label,start,end}}).sort((a,b)=>a.start-b.start),kept=[];placed.forEach((entry,index)=>{const isTerminal=index===placed.length-1;for(;kept.length>1&&isTerminal&&entry.start<kept[kept.length-1].end;)kept.pop().label.setAttribute("data-collapsed","");const previous=kept[kept.length-1];previous&&entry.start<previous.end?entry.label.setAttribute("data-collapsed",""):kept.push(entry)})}renderAxis(view){const ticks=axisTicks(view.start,view.end);return html`
2
2
  <div part="axis" aria-hidden="true">
3
3
  ${ticks.map(t=>{const pct=finiteRatio(t,view.start,view.end)*100;return pct<0||pct>100?nothing:html`<span
4
4
  part="tick"
@@ -7,7 +7,7 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
7
7
  ><span part="tick-label">${this.formatDuration(t)}</span></span
8
8
  >`})}
9
9
  </div>
10
- `}renderRow(span,view,posInSet,setSize,firstId){const{startPct,widthPct,visible}=this.barGeometry(span,view),isActive=this.activeSpanId===span.id,tabbable=visible&&(this.focusedId===span.id||this.focusedId==null&&firstId===span.id),durationLabel=span.endMs!=null?this.formatDuration(span.endMs-span.startMs):"",fragments=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})}),durationLabel].filter(Boolean);return html`
10
+ `}renderRow(span,view,posInSet,setSize,firstId){const version=this.sourceVersion,spans=this.spans,current=()=>this.isConnected&&this.treeSource===void 0&&this.sourceVersion===version&&this.spans===spans,{startPct,widthPct,visible}=this.barGeometry(span,view),isActive=this.activeSpanId===span.id,tabbable=visible&&(this.focusedId===span.id||this.focusedId==null&&firstId===span.id),durationLabel=span.endMs!=null?this.formatDuration(span.endMs-span.startMs):"",fragments=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})}),durationLabel].filter(Boolean);return html`
11
11
  <div part="row" role="listitem" aria-posinset=${posInSet} aria-setsize=${setSize} ?data-active=${isActive}>
12
12
  <span part="name">${span.name}</span>
13
13
  <span part="bar-track">
@@ -22,8 +22,8 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
22
22
  aria-current=${isActive?"true":"false"}
23
23
  aria-label=${fragments.join(this.localize("accessibleLabelSeparator"))}
24
24
  style=${`--_lr-span-waterfall-start:${startPct}%;--_lr-span-waterfall-width:${widthPct}%`}
25
- @click=${()=>this.selectRow(span.id)}
26
- @focus=${()=>{this.focusedId=span.id}}
25
+ @click=${()=>{current()&&this.selectRow(span.id)}}
26
+ @focus=${()=>{current()&&(this.focusedId=span.id)}}
27
27
  ></button>
28
28
  </span>
29
29
  <span part="meta">
@@ -31,7 +31,17 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
31
31
  ${durationLabel?html`<span part="duration">${durationLabel}</span>`:nothing}
32
32
  </span>
33
33
  </div>
34
- `}render(){const rows=this.sortedSpans(),view=this.viewWindow(),firstId=rows.find(span=>this.barGeometry(span,view).visible)?.id;return html`
34
+ `}sourceSpanLabel(span){return[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})}),span.endMs===void 0?"":this.formatDuration(span.endMs-span.startMs)].filter(Boolean).join(this.localize("accessibleLabelSeparator"))}renderSourceSpan(span,view){const{startPct,widthPct,visible}=this.barGeometry(span,view),duration=span.endMs===void 0?"":this.formatDuration(span.endMs-span.startMs);return html`<span class="source-span">
35
+ <span part="name">${span.name}</span>
36
+ <span part="bar-track"><span part="bar" aria-hidden="true" data-tone=${STATUS_TONE[span.status]}
37
+ data-status=${span.status} ?hidden=${!visible}
38
+ style=${`--_lr-span-waterfall-start:${startPct}%;--_lr-span-waterfall-width:${widthPct}%`}></span></span>
39
+ <span part="meta"><span part="status-text" data-status=${span.status}>${this.localize(STATUS_LABEL_KEY[span.status])}</span>
40
+ ${duration?html`<span part="duration">${duration}</span>`:nothing}</span>
41
+ </span>`}render(){if(this.treeSource!==void 0){const view2=this.viewWindow();return html`<div class="source-waterfall">
42
+ ${!this.withoutAxis&&this.sourceControl.projection?.rows.count?this.renderAxis(view2):nothing}
43
+ ${hierarchySourceView(this.sourceControl,{label:hostAriaLabel(this)??this.label??this.localize("spanWaterfall"),rtl:this.effectiveDirection==="rtl",multiple:!1,loading:this.localize("loading"),error:this.localize("treeSourceError"),empty:this.localize("noData"),retry:this.localize("retry"),expand:this.localize("expand"),collapse:this.localize("collapse"),summary:this.sourceSummary(),content:span=>this.renderSourceSpan(span,view2),name:span=>this.sourceSpanLabel(span),select:row=>{this.sourceControl.project({type:"select",key:row.key,selected:!0,scope:"item"},!0,row)}})}
44
+ </div>`}const rows=this.sortedSpans(),view=this.viewWindow(),firstId=rows.find(span=>this.barGeometry(span,view).visible)?.id;return html`
35
45
  <div
36
46
  part="base"
37
47
  role="list"
@@ -42,4 +52,4 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
42
52
  ${rows.length===0?html`<lr-empty part="empty" heading=${this.localize("noData")}></lr-empty>`:repeat(rows,span=>span.id,(span,index)=>this.renderRow(span,view,index+1,rows.length,firstId))}
43
53
  </div>
44
54
  ${this.sortedCacheTruncated?html`<p part="limit" role="note">${this.projectionLimitText()}</p>`:nothing}
45
- `}}__decorate([property({attribute:!1})],LyraSpanWaterfall.prototype,"spans",void 0),__decorate([property({attribute:"active-span-id"})],LyraSpanWaterfall.prototype,"activeSpanId",void 0),__decorate([property({type:Number,attribute:"view-start-ms"})],LyraSpanWaterfall.prototype,"viewStartMs",void 0),__decorate([property({type:Number,attribute:"view-end-ms"})],LyraSpanWaterfall.prototype,"viewEndMs",void 0),__decorate([property({type:Boolean,attribute:"without-axis"})],LyraSpanWaterfall.prototype,"withoutAxis",void 0),__decorate([property()],LyraSpanWaterfall.prototype,"label",void 0);export{LyraSpanWaterfall};
55
+ `}}__decorate([property({attribute:!1})],LyraSpanWaterfall.prototype,"treeSource",null),__decorate([property({attribute:!1})],LyraSpanWaterfall.prototype,"spans",void 0),__decorate([property({attribute:"active-span-id"})],LyraSpanWaterfall.prototype,"activeSpanId",void 0),__decorate([property({type:Number,attribute:"view-start-ms"})],LyraSpanWaterfall.prototype,"viewStartMs",void 0),__decorate([property({type:Number,attribute:"view-end-ms"})],LyraSpanWaterfall.prototype,"viewEndMs",void 0),__decorate([property({type:Boolean,attribute:"without-axis"})],LyraSpanWaterfall.prototype,"withoutAxis",void 0),__decorate([property()],LyraSpanWaterfall.prototype,"label",void 0);export{LyraSpanWaterfall};