@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,5 +1,6 @@
1
- import{__decorate}from"tslib";import{resolveListMove,isRovingTargetAvailable}from"../../../internal/list-navigation.js";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"./knowledge-base-admin.styles.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{LYRA_DEFAULT_knowledgeBaseAdminIngestionTab,LYRA_DEFAULT_knowledgeBaseAdminLabel,LYRA_DEFAULT_knowledgeBaseAdminSourcesTab}from"../../../internal/default-strings/retrieval.generated.js";class LyraKnowledgeBaseAdmin extends LyraElement{constructor(){super(...arguments),this.sources=[],this.ingestionItems=[],this.activeTab="sources",this.headingLevel="2",this.withoutIngestion=!1,this.idPrefix=nextId("knowledge-base-admin"),this.focusSourcesAfterUpdate=!1}static{this.defaultStrings={...super.defaultStrings,knowledgeBaseAdminIngestionTab:LYRA_DEFAULT_knowledgeBaseAdminIngestionTab,knowledgeBaseAdminLabel:LYRA_DEFAULT_knowledgeBaseAdminLabel,knowledgeBaseAdminSourcesTab:LYRA_DEFAULT_knowledgeBaseAdminSourcesTab}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["sources","ingestionItems"])}static{this.styles=[LyraElement.styles,styles]}tabId(tab){return`${this.idPrefix}-${tab}-tab`}panelId(tab){return`${this.idPrefix}-${tab}-panel`}setTab(tab){tab==="ingestion"&&this.withoutIngestion||(tab!==this.activeTab&&(this.activeTab=tab,this.emit("lr-tab-change",{activeTab:tab})),this.emit("lr-activate",{value:tab}))}willUpdate(changed){super.willUpdate(changed);const invalidTab=this.activeTab!=="sources"&&this.activeTab!=="ingestion",unavailableIngestion=this.withoutIngestion&&this.activeTab==="ingestion";!invalidTab&&!unavailableIngestion||(this.focusSourcesAfterUpdate=shadowFocusTarget(this)?.matches('[role="tab"]')??!1,this.activeTab="sources",this.emit("lr-tab-change",{activeTab:"sources"}))}updated(changed){super.updated(changed),this.focusSourcesAfterUpdate&&(this.focusSourcesAfterUpdate=!1,this.shadowRoot?.querySelector(`#${this.tabId("sources")}`)?.focus())}handleTabKeydown(event,current){const tabs=this.withoutIngestion?["sources"]:["sources","ingestion"],nextIndex=resolveListMove(event,{count:tabs.length,current:tabs.indexOf(current),orientation:"horizontal",direction:this.effectiveDirection,isAvailable:index=>{const target=this.shadowRoot?.getElementById(this.tabId(tabs[index]));return!!(target&&isRovingTargetAvailable(target))}});if(nextIndex===null)return;event.preventDefault();const next=tabs[nextIndex];this.setTab(next),this.updateComplete.then(()=>{this.shadowRoot?.querySelector(`#${this.tabId(next)}`)?.focus()})}forward(event,name,detail){event.stopPropagation(),this.emit(name,detail)}render(){const visibleLabel=this.label==null?this.localize("knowledgeBaseAdminLabel"):this.label,tablistLabel=hostAriaLabel(this)??(visibleLabel||this.localize("knowledgeBaseAdminLabel")),tab=this.activeTab==="ingestion"&&!this.withoutIngestion?"ingestion":"sources",level=resolveHeadingLevel(this.headingLevel),childLevel=level?String(Math.min(6,+level+1)):"none";return html`<section part="base">
1
+ import{__decorate}from"tslib";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveListMove,isRovingTargetAvailable}from"../../../internal/list-navigation.js";import{collectionSupport,publicCollectionTruncation,snapshotEventDetail}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{ref}from"lit/directives/ref.js";import{setSourcePageScope}from"../../../internal/source-page-scope.js";import{tag}from"../../../internal/prefix.js";import{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./knowledge-base-admin.styles.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{LYRA_DEFAULT_knowledgeBaseAdminIngestionTab,LYRA_DEFAULT_knowledgeBaseAdminInputLimit,LYRA_DEFAULT_knowledgeBaseAdminLabel,LYRA_DEFAULT_knowledgeBaseAdminSourcesTab}from"../../../internal/default-strings/retrieval.generated.js";const EMPTY_ROWS=Object.freeze([]);class LyraKnowledgeBaseAdmin extends LyraElement{constructor(){super(...arguments),this.forwardGeneration=0,this.bindSourcePageScope=child=>{child instanceof HTMLElement&&setSourcePageScope(child,this)},this.sources=[],this.ingestionItems=[],this.activeTab="sources",this.headingLevel="2",this.withoutIngestion=!1,this.idPrefix=nextId("knowledge-base-admin"),this.focusSourcesAfterUpdate=!1,this.lastInputNotice="",this.inputNoticeMounted=!1,this.inputAnnouncements=new AnnouncementSinkController(this)}static{this.defaultStrings={...super.defaultStrings,knowledgeBaseAdminIngestionTab:LYRA_DEFAULT_knowledgeBaseAdminIngestionTab,knowledgeBaseAdminInputLimit:LYRA_DEFAULT_knowledgeBaseAdminInputLimit,knowledgeBaseAdminLabel:LYRA_DEFAULT_knowledgeBaseAdminLabel,knowledgeBaseAdminSourcesTab:LYRA_DEFAULT_knowledgeBaseAdminSourcesTab}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["sources","ingestionItems"])}static{this.identityCollectionObjectProperties=Object.freeze(["dataSource","ingestionSource"])}static{this.styles=[LyraElement.styles,styles]}get dataSource(){return this._dataSource}set dataSource(value){const old=this._dataSource;if(this._dataSource=value,this.activeView==="sources"){this.forwardGeneration=(this.forwardGeneration??0)+1;const child=this.activeChild();child&&(child.dataSource=value)}this.requestUpdate("dataSource",old)}get ingestionSource(){return this._ingestionSource}set ingestionSource(value){const old=this._ingestionSource;if(this._ingestionSource=value,this.activeView==="ingestion"){this.forwardGeneration=(this.forwardGeneration??0)+1;const child=this.activeChild();child&&(child.dataSource=value)}this.requestUpdate("ingestionSource",old)}get activeView(){return this.activeTab==="ingestion"&&!this.withoutIngestion?"ingestion":"sources"}activeChild(){if(this.isConnected)return this.shadowRoot?.querySelector(tag(this.activeView==="sources"?"knowledge-base":"ingestion-queue"))??void 0}requestUpdate(...args){args[0]===void 0?(this.forwardGeneration=(this.forwardGeneration??0)+1,this.activeChild()?.requestUpdate()):(args[0]==="activeTab"&&this.activeTab!==args[1]||args[0]==="withoutIngestion"&&this.withoutIngestion!==args[1])&&(this.forwardGeneration=(this.forwardGeneration??0)+1),super.requestUpdate(...args)}tabId(tab){return`${this.idPrefix}-${tab}-tab`}panelId(tab){return`${this.idPrefix}-${tab}-panel`}setTab(tab){tab==="ingestion"&&this.withoutIngestion||(tab!==this.activeTab&&(this.activeTab=tab,this.emit("lr-tab-change",{activeTab:tab})),this.emit("lr-activate",{value:tab}))}willUpdate(changed){super.willUpdate(changed);const invalidTab=this.activeTab!=="sources"&&this.activeTab!=="ingestion",unavailableIngestion=this.withoutIngestion&&this.activeTab==="ingestion";!invalidTab&&!unavailableIngestion||(this.focusSourcesAfterUpdate=shadowFocusTarget(this)?.matches('[role="tab"]')??!1,this.activeTab="sources",this.emit("lr-tab-change",{activeTab:"sources"}))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&super.requestUpdate()}disconnectedCallback(){this.forwardGeneration++,super.disconnectedCallback(),this.inputNoticeMounted=!1}adoptedCallback(){this.forwardGeneration++,super.adoptedCallback(),this.inputAnnouncements.adopted()}inputLimitMessage(){const property2=this.activeView==="ingestion"?"ingestionItems":"sources";if(property2==="sources"?this.dataSource!==void 0:this.ingestionSource!==void 0)return"";const loss=publicCollectionTruncation(this,property2),format=getNumberFormat(this.effectiveLocale);return loss?this.localize("knowledgeBaseAdminInputLimit",void 0,{collection:this.localize(property2==="sources"?"knowledgeBaseAdminSourcesTab":"knowledgeBaseAdminIngestionTab"),count:format.format(loss.retained),total:format.format(loss.source)}):""}updated(changed){super.updated(changed);const notice=this.inputLimitMessage();this.inputNoticeMounted&&notice&&notice!==this.lastInputNotice&&this.inputAnnouncements.announcePolite(notice),this.lastInputNotice=notice,this.inputNoticeMounted=!0,this.focusSourcesAfterUpdate&&(this.focusSourcesAfterUpdate=!1,this.shadowRoot?.querySelector(`#${this.tabId("sources")}`)?.focus())}handleTabKeydown(event,current){const tabs=this.withoutIngestion?["sources"]:["sources","ingestion"],nextIndex=resolveListMove(event,{count:tabs.length,current:tabs.indexOf(current),orientation:"horizontal",direction:this.effectiveDirection,isAvailable:index=>{const target=this.shadowRoot?.getElementById(this.tabId(tabs[index]));return!!(target&&isRovingTargetAvailable(target))}});if(nextIndex===null)return;event.preventDefault();const next=tabs[nextIndex];this.setTab(next),this.updateComplete.then(()=>{this.shadowRoot?.querySelector(`#${this.tabId(next)}`)?.focus()})}forward(event,name,current,readDetail){if(event.stopPropagation(),!current())return;const detail=readDetail();if(!current())return;const snapshot=snapshotEventDetail(detail,this.ownerDocument.defaultView);current()&&this.emit(name,snapshot)}render(){const visibleLabel=this.label==null?this.localize("knowledgeBaseAdminLabel"):this.label,tablistLabel=hostAriaLabel(this)??(visibleLabel||this.localize("knowledgeBaseAdminLabel")),tab=this.activeTab==="ingestion"&&!this.withoutIngestion?"ingestion":"sources",generation=this.forwardGeneration,owner=this.ownerDocument,current=event=>()=>this.isConnected&&this.ownerDocument===owner&&this.forwardGeneration===generation&&this.activeView===tab&&event.currentTarget===this.activeChild(),notice=this.inputLimitMessage(),level=resolveHeadingLevel(this.headingLevel),childLevel=level?String(Math.min(6,+level+1)):"none";return html`<section part="base">
2
2
  <div part="heading" role=${level?"heading":nothing} aria-level=${level??nothing}>${visibleLabel}</div>
3
+ ${notice?html`<p part="input-limit" role="note">${notice}</p>`:nothing}
3
4
  <div part="tabs" role="tablist" aria-label=${tablistLabel}>
4
5
  <button
5
6
  part="tab"
@@ -36,12 +37,14 @@ import{__decorate}from"tslib";import{resolveListMove,isRovingTargetAvailable}fro
36
37
  ?hidden=${tab!=="sources"}
37
38
  >
38
39
  ${tab==="sources"?html`<lr-knowledge-base
39
- .sources=${this.sources}
40
+ ${ref(this.bindSourcePageScope)}
41
+ .dataSource=${live(this.dataSource)}
42
+ .sources=${this.dataSource===void 0?this.sources:EMPTY_ROWS}
40
43
  .headingLevel=${childLevel}
41
- @lr-source-create=${event=>this.forward(event,"lr-source-create",void 0)}
42
- @lr-source-sync=${event=>this.forward(event,"lr-source-sync",event.detail)}
43
- @lr-source-pause=${event=>this.forward(event,"lr-source-pause",event.detail)}
44
- @lr-source-delete=${event=>this.forward(event,"lr-source-delete",event.detail)}
44
+ @lr-source-create=${event=>this.forward(event,"lr-source-create",current(event),()=>{})}
45
+ @lr-source-sync=${event=>this.forward(event,"lr-source-sync",current(event),()=>event.detail)}
46
+ @lr-source-pause=${event=>this.forward(event,"lr-source-pause",current(event),()=>event.detail)}
47
+ @lr-source-delete=${event=>this.forward(event,"lr-source-delete",current(event),()=>event.detail)}
45
48
  ></lr-knowledge-base>`:nothing}
46
49
  </div>
47
50
  ${this.withoutIngestion?nothing:html`<div
@@ -52,10 +55,12 @@ import{__decorate}from"tslib";import{resolveListMove,isRovingTargetAvailable}fro
52
55
  ?hidden=${tab!=="ingestion"}
53
56
  >
54
57
  ${tab==="ingestion"?html`<lr-ingestion-queue
55
- .items=${this.ingestionItems}
56
- @lr-retry=${event=>this.forward(event,"lr-ingestion-retry",event.detail)}
57
- @lr-cancel=${event=>this.forward(event,"lr-ingestion-cancel",event.detail)}
58
+ ${ref(this.bindSourcePageScope)}
59
+ .dataSource=${live(this.ingestionSource)}
60
+ .items=${this.ingestionSource===void 0?this.ingestionItems:EMPTY_ROWS}
61
+ @lr-retry=${event=>this.forward(event,"lr-ingestion-retry",current(event),()=>event.detail)}
62
+ @lr-cancel=${event=>this.forward(event,"lr-ingestion-cancel",current(event),()=>event.detail)}
58
63
  ></lr-ingestion-queue>`:nothing}
59
64
  </div>`}
60
65
  <div part="settings"><slot name="settings"></slot></div>
61
- </section>`}}__decorate([property({attribute:!1})],LyraKnowledgeBaseAdmin.prototype,"sources",void 0),__decorate([property({attribute:!1})],LyraKnowledgeBaseAdmin.prototype,"ingestionItems",void 0),__decorate([property({attribute:"active-tab",reflect:!0})],LyraKnowledgeBaseAdmin.prototype,"activeTab",void 0),__decorate([property()],LyraKnowledgeBaseAdmin.prototype,"label",void 0),__decorate([property({attribute:"heading-level"})],LyraKnowledgeBaseAdmin.prototype,"headingLevel",void 0),__decorate([property({type:Boolean,attribute:"without-ingestion"})],LyraKnowledgeBaseAdmin.prototype,"withoutIngestion",void 0);export{LyraKnowledgeBaseAdmin};
66
+ </section>`}}__decorate([property({attribute:!1,hasChanged:()=>!0})],LyraKnowledgeBaseAdmin.prototype,"dataSource",null),__decorate([property({attribute:!1,hasChanged:()=>!0})],LyraKnowledgeBaseAdmin.prototype,"ingestionSource",null),__decorate([property({attribute:!1})],LyraKnowledgeBaseAdmin.prototype,"sources",void 0),__decorate([property({attribute:!1})],LyraKnowledgeBaseAdmin.prototype,"ingestionItems",void 0),__decorate([property({attribute:"active-tab",reflect:!0})],LyraKnowledgeBaseAdmin.prototype,"activeTab",void 0),__decorate([property()],LyraKnowledgeBaseAdmin.prototype,"label",void 0),__decorate([property({attribute:"heading-level"})],LyraKnowledgeBaseAdmin.prototype,"headingLevel",void 0),__decorate([property({type:Boolean,attribute:"without-ingestion"})],LyraKnowledgeBaseAdmin.prototype,"withoutIngestion",void 0);export{LyraKnowledgeBaseAdmin};
@@ -1 +1 @@
1
- import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-m); } [part='heading'] { margin: 0; font-size: var(--lr-font-size-lg); font-weight: var(--lr-font-weight-semibold); } [part='tabs'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-2xs); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); } [part='tab'] { box-sizing: border-box; ${iconHitTarget} padding: var(--lr-space-xs) var(--lr-space-s); border: none; border-block-end: var(--lr-border-width-medium) solid transparent; background: transparent; color: var(--lr-color-text-quiet); font: inherit; cursor: pointer; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='tab']:hover { color: var(--lr-color-text); } [part='tab']:active { color: var(--lr-color-text); background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='tab']:focus-visible { ${focusRing} } [part='tab']:where([aria-selected='true']) { border-block-end-color: var(--lr-knowledge-base-admin-tab-selected-border, var(--lr-color-brand)); color: var(--lr-knowledge-base-admin-tab-selected-color, var(--lr-color-text)); font-weight: var(--lr-font-weight-semibold); } [part='panel'] { min-inline-size: 0; } `;export{styles};
1
+ import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` [part='input-limit'], [part='slices-limit'] { margin: 0; font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); overflow-wrap: anywhere; } :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-m); } [part='heading'] { margin: 0; font-size: var(--lr-font-size-lg); font-weight: var(--lr-font-weight-semibold); } [part='tabs'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-2xs); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); } [part='tab'] { box-sizing: border-box; ${iconHitTarget} padding: var(--lr-space-xs) var(--lr-space-s); border: none; border-block-end: var(--lr-border-width-medium) solid transparent; background: transparent; color: var(--lr-color-text-quiet); font: inherit; cursor: pointer; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='tab']:hover { color: var(--lr-color-text); } [part='tab']:active { color: var(--lr-color-text); background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='tab']:focus-visible { ${focusRing} } [part='tab']:where([aria-selected='true']) { border-block-end-color: var(--lr-knowledge-base-admin-tab-selected-border, var(--lr-color-brand)); color: var(--lr-knowledge-base-admin-tab-selected-color, var(--lr-color-text)); font-weight: var(--lr-font-weight-semibold); } [part='panel'] { min-inline-size: 0; } `;export{styles};
@@ -1,4 +1,4 @@
1
- import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraNodeTypeStyle}from'../../../internal/node-type-style.js';export type{LyraNodeTypeStyle}from'../../../internal/node-type-style.js';import type{LyraGraphCamera,LyraGraphView,LyraGraphCommunity,LyraGraphFit,LyraGraphNodeLabelsMode,LyraGraphRenderer,LyraGraphEdge,LyraGraphNode}from'../graph/graph.class.js';import type{LyraEntity}from'../entity-card/entity-card.class.js';import type{LyraPathElement}from'../path-strip/path-strip.class.js';export type{LyraPathElement}from'../path-strip/path-strip.class.js';import'../graph/graph.class.js';import'../graph-legend/graph-legend.class.js';import'../entity-card/entity-card.class.js';import'../neighbor-list/neighbor-list.class.js';import'../path-strip/path-strip.class.js';import'../../overlays/overlay/popover.class.js';import'../../forms/input/input.class.js';import'../../overlays/chip/chip.class.js';import'../../forms/button/button.class.js';
1
+ import type{GraphSource}from'../graph/graph.class.js';export type KnowledgeGraphExplorerSource=GraphSource;import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraNodeTypeStyle}from'../../../internal/node-type-style.js';export type{LyraNodeTypeStyle}from'../../../internal/node-type-style.js';import type{LyraGraphCamera,LyraGraphView,LyraGraphCommunity,LyraGraphFit,LyraGraphNodeLabelsMode,LyraGraphRenderer,LyraGraphEdge,LyraGraphNode}from'../graph/graph.class.js';import type{LyraEntity}from'../entity-card/entity-card.class.js';import type{LyraPathElement}from'../path-strip/path-strip.class.js';export type{LyraPathElement}from'../path-strip/path-strip.class.js';import'../graph/graph.class.js';import'../graph-legend/graph-legend.class.js';import'../entity-card/entity-card.class.js';import'../neighbor-list/neighbor-list.class.js';import'../../overlays/overlay/popover.class.js';import'../../forms/input/input.class.js';import'../../forms/button/button.class.js';
2
2
  /** Extra `LyraEntity` fields a plain `LyraGraphNode` doesn't carry -- merged in by node id to build
3
3
  * the entity shown in the details popover and neighbor rows. A node with no entry here still
4
4
  * renders fine: `degree` falls back to a live count derived from `edges`, `description`/
@@ -142,11 +142,16 @@ export type KnowledgeGraphHighlight='selection'|'hover'|'none';export interface
142
142
  * 50 rows sharing one tab stop (ArrowUp/ArrowDown/Home/End); the announced count covers every match.
143
143
  * @csspart search-result - One search-match row (`role="listitem"`, wrapping a `<button>`).
144
144
  * @csspart search-empty - The "no matches" message, shown when `query` is non-empty but no node matches.
145
+ * @csspart input-limit - Localized retained/source counts for nodes and links omitted at assignment.
145
146
  * @csspart details-limit - Localized shown/total notice when `entityDetails` holds more entries than the shared boundary keeps.
146
147
  * @csspart search-limit - Localized shown/total notice when search matches exceed the 50-row list.
147
148
  * @csspart pinned - The pinned-nodes row, only rendered while `pinnedNodeIds` is non-empty.
148
149
  * @csspart pinned-heading - The pinned-nodes row's leading label.
149
- * @csspart path - The composed `lr-path-strip`, only rendered while `path` is non-empty.
150
+ * @csspart path - The composed `lr-path-strip`, or its loading/error status, while `path` is non-empty.
151
+ * Path registration loads on first use; `updateComplete` waits for registration and rendering.
152
+ * @csspart source-status - Source filter error or all-types-hidden status.
153
+ * @csspart source-clear - Restores unfiltered source navigation.
154
+ * @csspart detail-neighbors - The details neighborhood, source-bound only while details are open.
150
155
  * @csspart graph - The composed `lr-graph`.
151
156
  * @csspart detail-popover - The composed `lr-popover` hosting the details overlay.
152
157
  * @csspart detail-card - The default-content `lr-entity-card`, only present while `selectedNodeId` resolves to a node.
@@ -158,7 +163,21 @@ export type KnowledgeGraphHighlight='selection'|'hover'|'none';export interface
158
163
  * @status stable
159
164
  * @since 4.1.0
160
165
  */
161
- export declare class LyraKnowledgeGraphExplorer extends LyraElement<LyraKnowledgeGraphExplorerEventMap>{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[];
166
+ export declare class LyraKnowledgeGraphExplorer extends LyraElement<LyraKnowledgeGraphExplorerEventMap>{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[];private _graphSource?;private sourceEpoch;private sourceSearchVersion;private sourceSearchIntent?;private sourceAssigned;private sourceClosing;private sourceChildBinding?;private sourceChild?;private sourceInspect?;private sourceEntity?;private sourceDetailsOpen;private sourcePaint;
167
+ /** Full graph provider, passed unchanged to the child graph. Same-source assignment and
168
+ * requestUpdate() refresh it. Unset restores legacy arrays. Controlled source selection is
169
+ * resolved without moving the page or opening details; user activation opens details.
170
+ * When hiddenTypes is used, at most500 nodeTypes (2,000,000 total ID units) must declare the provider's complete type catalog.
171
+ * Unfiltered navigation includes provider types outside that catalog. */
172
+ get graphSource():KnowledgeGraphExplorerSource|undefined;set graphSource(value:KnowledgeGraphExplorerSource|undefined);private _sourcePage;
173
+ /** Zero-based page of the sole child-owned global record navigator. */
174
+ get sourcePage():number;set sourcePage(value:number);private _sourcePageSize;
175
+ /** Records per page, default 100 and normalized 1–500 by the child. */
176
+ get sourcePageSize():number;set sourcePageSize(value:number);
177
+ /** Exact active filtered node/edge total, distinct from full-source graph totals. */
178
+ get sourceTotal():number|null;private get sourceFilter();private sourceCurrent;private readonly sourceAccepted;private readonly bindSourceChild;private inspectSourceSelection;
179
+ /** Reveals and focuses a global node or edge without activation. Clears toolbar filters. */
180
+ revealSourceKey(key:string):Promise<boolean>;private closeSourceDetails;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;private activateSourceEntity;
162
181
  /** Nodes forwarded to the composed graph and search experience. */
163
182
  nodes:readonly LyraGraphNode[];
164
183
  /** Edges forwarded to the composed graph and path interactions. */
@@ -229,7 +248,7 @@ highlight:KnowledgeGraphHighlight;
229
248
  * `''` (the default) renders no search-result list at all and applies no search dimming.
230
249
  * Removing the attribute uses this empty-filter behavior while retaining null property
231
250
  * readback. */
232
- query:string;private pinLiveText;private hoveredNodeId;private activeResult;private graphEl?;private popoverEl?;private pendingNodeId?;private activationGeneration;private internalSelectionAssignment?;private trackedNodeEl?;private nodeById;private linksByNodeId;private degreeByNodeId;private communityLabelById;private matchesMemo?;private normalizedGraphModel?;private normalizedGraphSources?;private readonly announcements;private activationFrameId?;private activationFrameOwner?;private activationFrameDocument?;private activationFrameResolve?;private activationFramePageHide?;private get graphModel();private get canonicalPinnedNodeIds();private get canonicalHiddenTypes();connectedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private reanchorAfterCameraUpdate;private activatePresetWhenGraphReady;private waitForActivationFrame;private clearActivationFrameRecord;private cancelActivationFrame;private invalidateActivation;private resumePresetActivation;private setInternalSelectedNodeId;disconnectedCallback():void;adoptedCallback():void;private rebuildDerivedCollections;private isVisibleGraphNode;private isVisibleNode;private canActivateNode;private nodeLabel;private degreeOf;private entityFor;private communityLabelFor;private neighborRowsFor;private searchableNamesOf;private matchingNodes;private searchResultAnnouncement;private neighborIdsOf;private linkKey;private get computedDimmedNodeIds();private get computedDimmedLinkIds();private togglePin;private requestPath;private onVisibilityChange;private onVisibilityChangeProposal;private onSearchInput;private onEntityActivate;
251
+ query:string;private pinLiveText;private hoveredNodeId;private activeResult;private graphEl?;private popoverEl?;private pendingNodeId?;private activationGeneration;private internalSelectionAssignment?;private trackedNodeEl?;private nodeById;private linksByNodeId;private degreeByNodeId;private communityLabelById;private matchesMemo?;private normalizedGraphModel?;private normalizedGraphSources?;private readonly announcements;private activationFrameId?;private activationFrameOwner?;private activationFrameDocument?;private activationFrameResolve?;private activationFramePageHide?;private get graphModel();private get canonicalPinnedNodeIds();private get canonicalHiddenTypes();private optionalRequest;private optionalGeneration;private optionalPending?;private pathReady;private optionalFailed;private loadOptionalPath;private ensureOptionalChildren;protected getUpdateComplete():Promise<boolean>;connectedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private reanchorAfterCameraUpdate;private activatePresetWhenGraphReady;private waitForActivationFrame;private clearActivationFrameRecord;private cancelActivationFrame;private invalidateActivation;private resumePresetActivation;private setInternalSelectedNodeId;disconnectedCallback():void;adoptedCallback():void;private rebuildDerivedCollections;private isVisibleGraphNode;private isVisibleNode;private canActivateNode;private nodeLabel;private degreeOf;private entityFor;private communityLabelFor;private neighborRowsFor;private searchableNamesOf;private matchingNodes;private searchResultAnnouncement;private neighborIdsOf;private linkKey;private dimmingMemo?;private dimmingProjection;private get computedDimmedNodeIds();private get computedDimmedLinkIds();private togglePin;private requestPath;private onVisibilityChange;private onVisibilityChangeProposal;private onSearchInput;private onEntityActivate;
233
252
  /** Frames every visible node in the composed graph's viewport, forwarding to `lr-graph.fit()`.
234
253
  * No-op before the graph has rendered or with no visible nodes. Selection is unaffected. */
235
254
  fit(options?:{padding?:number;}):void;
@@ -239,4 +258,4 @@ resetView():void;
239
258
  /** Centers the camera on node `id` through the composed graph's `focusNode()`, without selecting
240
259
  * it or opening its details popover. Resolves `false` for an unknown or filtered-out node, or
241
260
  * before the graph has rendered. */
242
- focusNode(id:string,options?:{zoom?:number;}):Promise<boolean>;private activateEntity;private openDetailAt;private resolveDirectClickAnchor;private onGraphNodeClick;private onGraphNativeClick;private onGraphViewportChange;private onGraphNodeEnter;private onGraphNodeLeave;private onResultKeyDown;private onPopoverHide;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-knowledge-graph-explorer':LyraKnowledgeGraphExplorer;}}
261
+ focusNode(id:string,options?:{zoom?:number;}):Promise<boolean>;private activateEntity;private openDetailAt;private resolveDirectClickAnchor;private onGraphNodeClick;private onGraphNativeClick;private onGraphViewportChange;private onGraphNodeEnter;private onGraphNodeLeave;private onResultKeyDown;private onPopoverHide;private inputLimitMessages;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-knowledge-graph-explorer':LyraKnowledgeGraphExplorer;}}
@@ -1,4 +1,4 @@
1
- import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{srOnly}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./knowledge-graph-explorer.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{graphLengthConverter,graphLinkIdentity,normalizeGraphModel}from"../graph/graph-model.js";import{canonicalIdentityList,isNonBlankIdentity}from"../retrieval-identity.js";import"../graph/graph.class.js";import"../graph-legend/graph-legend.class.js";import"../entity-card/entity-card.class.js";import"../neighbor-list/neighbor-list.class.js";import"../path-strip/path-strip.class.js";import"../../overlays/overlay/popover.class.js";import"../../forms/input/input.class.js";import"../../overlays/chip/chip.class.js";import"../../forms/button/button.class.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_graphDataListLimit,LYRA_DEFAULT_graphExplorerFindPath,LYRA_DEFAULT_graphExplorerLabel,LYRA_DEFAULT_graphExplorerPin,LYRA_DEFAULT_graphExplorerPinned,LYRA_DEFAULT_graphExplorerPinnedHeading,LYRA_DEFAULT_graphExplorerSearchLimit,LYRA_DEFAULT_graphExplorerSearchPlaceholder,LYRA_DEFAULT_graphExplorerSearchResultsLabel,LYRA_DEFAULT_graphExplorerUnpin,LYRA_DEFAULT_graphExplorerUnpinned}from"../../../internal/default-strings/retrieval.generated.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";const SEARCH_RESULT_LIMIT=50;function isElementNode(value){if(typeof value!="object"||value===null)return!1;const candidate=value;return candidate.nodeType===1&&typeof candidate.matches=="function"&&typeof candidate.getBoundingClientRect=="function"}class LyraKnowledgeGraphExplorer extends LyraElement{constructor(){super(...arguments),this.nodes=[],this.edges=[],this.nodeTypes=[],this.communities=[],this.entityDetails={},this.pinnedNodeIds=[],this.path=[],this.hiddenTypes=[],this.selectedNodeId=null,this.renderer="svg",this.view="2d",this.fitTo="none",this.width=800,this.height=600,this.highlight="selection",this.query="",this.pinLiveText="",this.hoveredNodeId=null,this.activeResult=0,this.activationGeneration=0,this.nodeById=new Map,this.linksByNodeId=new Map,this.degreeByNodeId=new Map,this.communityLabelById=new Map,this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.onVisibilityChange=event=>{event.stopPropagation(),this.hiddenTypes=event.detail.hiddenTypes,this.emit("lr-hidden-types-change",{hiddenTypes:this.hiddenTypes})},this.onVisibilityChangeProposal=event=>{event.stopPropagation()},this.onSearchInput=event=>{event.stopPropagation();const value=event.detail.value;this.query!==value&&(this.query=value,this.emit("lr-search-change",{query:value,matchCount:this.matchingNodes()?.length??0,matchCountExact:!0,activeIndex:-1}))},this.onEntityActivate=event=>{event.stopPropagation(),this.activateEntity(event.detail.entityId)},this.onGraphNodeClick=event=>{const id=event.detail.nodeId;if(!this.canActivateNode(id))return;const generation=this.invalidateActivation();if(this.setInternalSelectedNodeId(id),this.view==="3d"){const graph=this.graphEl,point=graph?.getNodeScreenPosition(id),bounds=graph?.getBoundingClientRect();if(point&&bounds){this.trackedNodeEl=void 0,this.openDetailAt(id,{x:bounds.left+point.x,y:bounds.top+point.y,width:0,height:0});return}}this.pendingNodeId=id;const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;ownerWindow&&ownerWindow.queueMicrotask(()=>{generation===this.activationGeneration&&this.isConnected&&this.ownerDocument===ownerDocument&&this.pendingNodeId===id&&(this.pendingNodeId=void 0,this.selectedNodeId===id&&this.isVisibleNode(id)&&this.activateEntity(id))})},this.onGraphNativeClick=event=>{const id=this.pendingNodeId;id&&(this.pendingNodeId=void 0,this.openDetailAt(id,this.resolveDirectClickAnchor(event)))},this.onGraphViewportChange=()=>{const graph=this.graphEl;if(graph?.view==="3d"&&this.selectedNodeId&&this.popoverEl?.open){const point=graph.getNodeScreenPosition(this.selectedNodeId);if(point){const rect2=graph.getBoundingClientRect();this.popoverEl.showAt({x:rect2.left+point.x,y:rect2.top+point.y,width:0,height:0})}return}const el=this.trackedNodeEl,popover=this.popoverEl;if(!el?.isConnected||!popover?.open)return;const rect=el.getBoundingClientRect();popover.showAt({x:rect.left+rect.width/2,y:rect.top,width:rect.width,height:rect.height})},this.onGraphNodeEnter=event=>{this.highlight==="hover"&&(this.hoveredNodeId=event.detail.nodeId)},this.onGraphNodeLeave=event=>{this.highlight==="hover"&&this.hoveredNodeId===event.detail.nodeId&&(this.hoveredNodeId=null)},this.onResultKeyDown=event=>{const buttons=[...this.renderRoot.querySelectorAll('[part="search-result"] button')],index=buttons.indexOf(event.target),next={ArrowDown:index+1,ArrowUp:index-1,Home:0,End:buttons.length-1}[event.key];index<0||next===void 0||(event.preventDefault(),this.activeResult=Math.max(0,Math.min(buttons.length-1,next)),buttons[this.activeResult].focus())},this.onPopoverHide=()=>{this.invalidateActivation(),this.trackedNodeEl=void 0,this.setInternalSelectedNodeId(null)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,graphDataListLimit:LYRA_DEFAULT_graphDataListLimit,graphExplorerFindPath:LYRA_DEFAULT_graphExplorerFindPath,graphExplorerLabel:LYRA_DEFAULT_graphExplorerLabel,graphExplorerPin:LYRA_DEFAULT_graphExplorerPin,graphExplorerPinned:LYRA_DEFAULT_graphExplorerPinned,graphExplorerPinnedHeading:LYRA_DEFAULT_graphExplorerPinnedHeading,graphExplorerSearchLimit:LYRA_DEFAULT_graphExplorerSearchLimit,graphExplorerSearchPlaceholder:LYRA_DEFAULT_graphExplorerSearchPlaceholder,graphExplorerSearchResultsLabel:LYRA_DEFAULT_graphExplorerSearchResultsLabel,graphExplorerUnpin:LYRA_DEFAULT_graphExplorerUnpin,graphExplorerUnpinned:LYRA_DEFAULT_graphExplorerUnpinned,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["nodes","edges","nodeTypes","communities","entityDetails","pinnedNodeIds","path","hiddenTypes"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-selection-change","lr-pin-change","lr-hidden-types-change"])}get graphModel(){const sources=this.normalizedGraphSources;return(!sources||sources[0]!==this.nodes||sources[1]!==this.edges||sources[2]!==this.nodeTypes||sources[3]!==this.communities)&&(this.normalizedGraphSources=[this.nodes,this.edges,this.nodeTypes,this.communities],this.normalizedGraphModel=normalizeGraphModel(this.nodes,this.edges,this.nodeTypes,this.communities)),this.normalizedGraphModel}get canonicalPinnedNodeIds(){return canonicalIdentityList(this.pinnedNodeIds)}get canonicalHiddenTypes(){return canonicalIdentityList(this.hiddenTypes)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.resumePresetActivation()}willUpdate(changed){super.willUpdate(changed),(changed.has("nodes")||changed.has("edges")||changed.has("communities"))&&this.rebuildDerivedCollections(),this.hoveredNodeId&&!this.isVisibleNode(this.hoveredNodeId)&&(this.hoveredNodeId=null),(changed.has("nodes")||changed.has("hiddenTypes"))&&this.selectedNodeId&&!this.isVisibleNode(this.selectedNodeId)&&(this.invalidateActivation(),this.setInternalSelectedNodeId(null),this.popoverEl&&(this.popoverEl.open=!1)),this.hasUpdated&&(this.query??"").trim()&&(changed.has("query")||changed.has("nodes")||changed.has("hiddenTypes")||changed.has("locale")||changed.has("strings"))&&this.announcements.announcePolite(this.searchResultAnnouncement())}updated(changed){if(super.updated(changed),changed.has("camera")&&this.view==="3d"&&this.graphEl&&this.reanchorAfterCameraUpdate(this.graphEl,this.camera),!changed.has("selectedNodeId"))return;const internallyAssigned=this.internalSelectionAssignment!==void 0&&Object.is(this.internalSelectionAssignment.value,this.selectedNodeId);if(this.internalSelectionAssignment=void 0,internallyAssigned)return;const generation=this.invalidateActivation(),id=this.selectedNodeId;if(!isNonBlankIdentity(id)){id!==null&&(this.selectedNodeId=null),this.popoverEl&&(this.popoverEl.open=!1);return}const graph=this.graphEl;graph&&this.isVisibleNode(id)&&this.activatePresetWhenGraphReady(id,graph,generation)}async reanchorAfterCameraUpdate(graph,camera){await graph.updateComplete,this.isConnected&&this.graphEl===graph&&this.camera===camera&&this.view==="3d"&&this.onGraphViewportChange()}async activatePresetWhenGraphReady(id,graph,generation){for(await graph.updateComplete;generation===this.activationGeneration&&this.isConnected&&graph.isConnected&&this.selectedNodeId===id&&graph.shadowRoot?.querySelector(tag("skeleton"));)if(!await this.waitForActivationFrame(generation))return;generation===this.activationGeneration&&this.isConnected&&this.selectedNodeId===id&&this.isVisibleNode(id)&&await this.activateEntity(id)}waitForActivationFrame(generation){this.cancelActivationFrame();const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;return!ownerWindow||!this.isConnected||generation!==this.activationGeneration?Promise.resolve(!1):new Promise(resolve=>{let settled=!1;const settle=ready=>{settled||(settled=!0,resolve(ready))};let handle;const onPageHide=()=>{this.activationFrameOwner===ownerWindow&&this.activationFrameDocument===ownerDocument&&this.activationFrameResolve===settle&&this.cancelActivationFrame()};try{handle=ownerWindow.requestAnimationFrame(()=>{const current=this.activationFrameId===handle&&this.activationFrameOwner===ownerWindow&&this.activationFrameDocument===ownerDocument&&this.activationFrameResolve===settle&&generation===this.activationGeneration&&this.isConnected&&this.ownerDocument===ownerDocument;current&&this.clearActivationFrameRecord(),settle(current)})}catch{settle(!1);return}this.activationFrameId=handle,this.activationFrameOwner=ownerWindow,this.activationFrameDocument=ownerDocument,this.activationFrameResolve=settle,this.activationFramePageHide=onPageHide,ownerWindow.addEventListener("pagehide",onPageHide,{once:!0})})}clearActivationFrameRecord(){this.activationFramePageHide&&this.activationFrameOwner?.removeEventListener("pagehide",this.activationFramePageHide),this.activationFrameId=void 0,this.activationFrameOwner=void 0,this.activationFrameDocument=void 0,this.activationFrameResolve=void 0,this.activationFramePageHide=void 0}cancelActivationFrame(){const handle=this.activationFrameId,ownerWindow=this.activationFrameOwner,settle=this.activationFrameResolve;this.clearActivationFrameRecord();try{handle!==void 0&&ownerWindow?.cancelAnimationFrame(handle)}finally{settle?.(!1)}}invalidateActivation(){return this.activationGeneration+=1,this.cancelActivationFrame(),this.activationGeneration}resumePresetActivation(){const id=this.selectedNodeId,graph=this.graphEl;if(!id||!graph||!this.isVisibleNode(id))return;const generation=this.invalidateActivation();this.activatePresetWhenGraphReady(id,graph,generation)}setInternalSelectedNodeId(value){Object.is(this.selectedNodeId,value)||(this.internalSelectionAssignment={value},this.selectedNodeId=value,this.emit("lr-selection-change",{selectedNodeId:value,selectedNodeIds:value?[value]:[],selectedEdgeIds:[]}))}disconnectedCallback(){this.invalidateActivation(),this.pendingNodeId=void 0,this.trackedNodeEl=void 0,this.hoveredNodeId=null,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.invalidateActivation(),this.announcements.adopted(),this.isConnected&&this.resumePresetActivation()}rebuildDerivedCollections(){const model=this.graphModel;this.nodeById=new Map(model.nodes.map(node=>[node.id,node])),this.communityLabelById=new Map(model.communities.map(community=>[community.id,community.label]));const linksByNodeId=new Map,degrees=new Map;for(const link of model.links)for(const id of new Set([link.source,link.target])){const adjacent=linksByNodeId.get(id);adjacent?adjacent.push(link):linksByNodeId.set(id,[link]),degrees.set(id,(degrees.get(id)??0)+1)}this.linksByNodeId=linksByNodeId,this.degreeByNodeId=degrees}isVisibleGraphNode(node){return node.type==null||!this.canonicalHiddenTypes.includes(node.type)}isVisibleNode(id){const node=this.nodeById.get(id);return!!node&&this.isVisibleGraphNode(node)}canActivateNode(id){const node=this.nodeById.get(id);return node?this.isVisibleGraphNode(node):!this.hasUpdated&&this.graphModel.nodes.length===0}nodeLabel(id){const node=this.nodeById.get(id);return node?.label||node?.accessibleLabel||id}degreeOf(id){return this.degreeByNodeId.get(id)??0}entityFor(id){const node=this.nodeById.get(id);if(!node)return;const details=this.entityDetails[id];return{id:node.id,label:node.label||node.accessibleLabel||node.id,type:node.type,communityId:node.communityId,description:details?.description,properties:details?.properties,degree:details?.degree??this.degreeOf(node.id)}}communityLabelFor(communityId){return communityId?this.communityLabelById.get(communityId)??communityId:""}neighborRowsFor(id){const rows=[];for(const link of this.linksByNodeId.get(id)??[])if(link.source===id){const node=this.entityFor(link.target);node&&this.isVisibleNode(link.target)&&rows.push({relation:link.label??"",direction:"out",node})}else if(link.target===id){const node=this.entityFor(link.source);node&&this.isVisibleNode(link.source)&&rows.push({relation:link.label??"",direction:"in",node})}return rows}searchableNamesOf(node){return[node.label,node.accessibleLabel,node.id].filter(name=>typeof name=="string"&&name!=="")}matchingNodes(){const query2=this.query??"",locale=this.effectiveLocale,model=this.graphModel,hidden=this.canonicalHiddenTypes,memo=this.matchesMemo;if(memo?.[0]===query2&&memo[1]===locale&&memo[2]===model&&memo[3]===hidden)return memo[4];const q=query2.trim().toLocaleLowerCase(locale);let matches;if(q){const hiddenTypes=new Set(hidden);matches=model.nodes.filter(node=>(node.type==null||!hiddenTypes.has(node.type))&&this.searchableNamesOf(node).some(name=>name.toLocaleLowerCase(locale).includes(q)))}return this.matchesMemo=[query2,locale,model,hidden,matches],matches}searchResultAnnouncement(matches=this.matchingNodes()){return matches?matches.length===0?this.localize("viewerSearchNoMatches"):this.localize("viewerSearchMatchCount",void 0,{count:getNumberFormat(this.effectiveLocale).format(matches.length),pluralCount:matches.length}):""}neighborIdsOf(id){const ids=new Set;for(const link of this.linksByNodeId.get(id)??[])link.source===id?ids.add(link.target):link.target===id&&ids.add(link.source);return ids}linkKey(link){return graphLinkIdentity(link)}get computedDimmedNodeIds(){if(this.highlight==="none")return[];const matches=this.matchingNodes();if(matches){const matchIds=new Set(matches.map(n=>n.id));return this.graphModel.nodes.filter(n=>!matchIds.has(n.id)).map(n=>n.id)}const focusNodeId=this.selectedNodeId??(this.highlight==="hover"?this.hoveredNodeId:null);if(focusNodeId){const keep=this.neighborIdsOf(focusNodeId);return keep.add(focusNodeId),this.graphModel.nodes.filter(n=>!keep.has(n.id)).map(n=>n.id)}return[]}get computedDimmedLinkIds(){const dimmedNodes=new Set(this.computedDimmedNodeIds);return dimmedNodes.size===0?[]:this.graphModel.links.filter(l=>dimmedNodes.has(l.source)||dimmedNodes.has(l.target)).map(l=>this.linkKey(l))}togglePin(id){if(!isNonBlankIdentity(id))return;const pinnedNodeIds=this.canonicalPinnedNodeIds,wasPinned=pinnedNodeIds.includes(id),next=wasPinned?pinnedNodeIds.filter(existing=>existing!==id):[...pinnedNodeIds,id];this.pinnedNodeIds=next,this.pinLiveText=this.localize(wasPinned?"graphExplorerUnpinned":"graphExplorerPinned",void 0,{label:this.nodeLabel(id)}),this.announcements.announcePolite(this.pinLiveText),this.emit("lr-pin-change",{pinnedNodeIds:next})}requestPath(){const pinnedNodeIds=this.canonicalPinnedNodeIds;if(pinnedNodeIds.length!==2)return;const[sourceNodeId,targetNodeId]=pinnedNodeIds;this.emit("lr-path-request",{sourceNodeId,targetNodeId})}fit(options){this.graphEl?.fit(options)}resetView(){this.graphEl?.fit()}async focusNode(id,options){return this.isVisibleNode(id)?await this.graphEl?.focusNode(id,options)??!1:!1}async activateEntity(id){if(!this.canActivateNode(id))return;const generation=this.invalidateActivation();this.setInternalSelectedNodeId(id),this.trackedNodeEl=void 0;const graph=this.graphEl,focused=graph?await graph.focusNode(id):!1;if(generation!==this.activationGeneration||!this.isConnected||this.selectedNodeId!==id||!this.isVisibleNode(id)||!focused)return;const rect=graph?.getBoundingClientRect();if(!rect)return;const projected=graph?.view==="3d"?graph.getNodeScreenPosition(id):void 0;this.openDetailAt(id,{x:rect.left+(projected?.x??rect.width/2),y:rect.top+(projected?.y??rect.height/2),width:0,height:0})}openDetailAt(id,rect){const popover=this.popoverEl;popover&&(popover.accessibleLabel=this.entityFor(id)?.label||"",popover.showAt(rect))}resolveDirectClickAnchor(event){if(this.view==="3d"){this.trackedNodeEl=void 0;const graph=this.graphEl,position=this.selectedNodeId?graph?.getNodeScreenPosition(this.selectedNodeId):void 0,rect2=graph?.getBoundingClientRect();if(position&&rect2)return{x:rect2.left+position.x,y:rect2.top+position.y,width:0,height:0}}if(this.renderer==="canvas")return this.trackedNodeEl=void 0,{x:event.clientX,y:event.clientY,width:0,height:0};const nodeEl=event.composedPath().find(el=>isElementNode(el)&&el.matches('[part="node"]'));if(!nodeEl)return this.trackedNodeEl=void 0,{x:event.clientX,y:event.clientY,width:0,height:0};this.trackedNodeEl=nodeEl;const rect=nodeEl.getBoundingClientRect();return{x:rect.left+rect.width/2,y:rect.top,width:rect.width,height:rect.height}}render(){const groupLabel=retrievalSemanticLabel(this,this.label==null?this.localize("graphExplorerLabel"):this.label),groupRole=retrievalSemanticRole(this,"group"),matches=this.matchingNodes(),detailsLimit=publicCollectionTruncation(this,"entityDetails"),model=this.graphModel,pinnedNodeIds=this.canonicalPinnedNodeIds,hiddenTypes=this.canonicalHiddenTypes,selectedEntity=this.selectedNodeId?this.entityFor(this.selectedNodeId)??null:null,isPinned=this.selectedNodeId!=null&&pinnedNodeIds.includes(this.selectedNodeId),dimmedDeps=[this.highlight,matches,this.selectedNodeId,this.hoveredNodeId,model],detailDeps=[this.selectedNodeId,model,hiddenTypes,this.entityDetails];return html`
1
+ import{__decorate}from"tslib";import{ref}from"lit/directives/ref.js";import{setGraphSourceComposition,resolveGraphSourceComposition,focusGraphSourceComposition}from"../graph/graph-source-composition.js";const EMPTY_SOURCE_NODES=Object.freeze([]),EMPTY_SOURCE_EDGES=Object.freeze([]);import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteInteger,finiteRange}from"../../../internal/numbers.js";import{srOnly}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./knowledge-graph-explorer.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{graphLengthConverter,graphLinkIdentity,normalizeGraphModel}from"../graph/graph-model.js";import{canonicalIdentityList,isNonBlankIdentity}from"../retrieval-identity.js";import"../graph/graph.class.js";import"../graph-legend/graph-legend.class.js";import"../entity-card/entity-card.class.js";import"../neighbor-list/neighbor-list.class.js";import"../../overlays/overlay/popover.class.js";import"../../forms/input/input.class.js";import"../../forms/button/button.class.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_graphDataListLimit,LYRA_DEFAULT_graphEdgeLimit,LYRA_DEFAULT_graphExplorerAllTypesHidden,LYRA_DEFAULT_graphExplorerClearTypes,LYRA_DEFAULT_graphExplorerFindPath,LYRA_DEFAULT_graphExplorerLabel,LYRA_DEFAULT_graphExplorerPin,LYRA_DEFAULT_graphExplorerPinned,LYRA_DEFAULT_graphExplorerPinnedHeading,LYRA_DEFAULT_graphExplorerSearchLimit,LYRA_DEFAULT_graphExplorerSearchPlaceholder,LYRA_DEFAULT_graphExplorerSearchResultsLabel,LYRA_DEFAULT_graphExplorerUnpin,LYRA_DEFAULT_graphExplorerUnpinned,LYRA_DEFAULT_graphNodeLimit}from"../../../internal/default-strings/retrieval.generated.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loading,LYRA_DEFAULT_statusError,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.generated.js";const SEARCH_RESULT_LIMIT=50;function isElementNode(value){if(typeof value!="object"||value===null)return!1;const candidate=value;return candidate.nodeType===1&&typeof candidate.matches=="function"&&typeof candidate.getBoundingClientRect=="function"}class LyraKnowledgeGraphExplorer extends LyraElement{constructor(){super(...arguments),this.sourceEpoch=0,this.sourceSearchVersion=0,this.sourceAssigned=!1,this.sourceClosing=!1,this.sourceDetailsOpen=!1,this.sourcePaint=0,this._sourcePage=0,this._sourcePageSize=100,this.sourceAccepted=snapshot=>{if(!snapshot.current()||this.graphSource===void 0||this.sourceChild?.graphSource!==this.graphSource)return;this.sourcePage!==snapshot.page&&(this.sourcePage=snapshot.page),this.sourcePaint++;const intent=this.sourceSearchIntent;if(!this.sourceFilter.invalid&&intent&&intent.epoch===this.sourceEpoch&&intent.version===this.sourceSearchVersion&&intent.query===this.query&&snapshot.query.kind==="nodes"&&snapshot.query.centerKey===null&&snapshot.query.search===intent.query&&snapshot.total!==null&&snapshot.current()){this.sourceSearchIntent=void 0;const detail={query:intent.query,matchCount:intent.query.trim()?snapshot.total:0,matchCountExact:!0,activeIndex:-1};snapshot.current()&&this.emit("lr-search-change",detail)}snapshot.current()&&this.inspectSourceSelection()},this.bindSourceChild=element=>{const graph=element;if(!graph){this.sourceChild&&setGraphSourceComposition(this.sourceChild,void 0),this.sourceChild=void 0,this.sourceChildBinding=void 0;return}this.sourceChild=graph;const size=finiteInteger(this.sourcePageSize,100,1,500),page=finiteInteger(this.sourcePage,0,0,Math.floor(Number.MAX_SAFE_INTEGER/size));if(graph.sourcePageSize!==size&&(graph.sourcePageSize=size),graph.sourcePage!==page&&(graph.sourcePage=page),this.graphSource===void 0){setGraphSourceComposition(graph,void 0),graph.graphSource!==void 0&&(graph.graphSource=void 0),this.sourceChildBinding=void 0;return}const filter=this.sourceFilter;setGraphSourceComposition(graph,{search:(this.query??"").slice(0,65536),nodeTypes:filter.nodeTypes,empty:filter.empty,accepted:this.sourceAccepted});const binding=[graph,this.graphSource,this.sourceEpoch];(!this.sourceChildBinding||binding.some((value,index)=>value!==this.sourceChildBinding[index]))&&(this.sourceChildBinding=binding,graph.graphSource=this.graphSource),this.inspectSourceSelection()},this.nodes=[],this.edges=[],this.nodeTypes=[],this.communities=[],this.entityDetails={},this.pinnedNodeIds=[],this.path=[],this.hiddenTypes=[],this.selectedNodeId=null,this.renderer="svg",this.view="2d",this.fitTo="none",this.width=800,this.height=600,this.highlight="selection",this.query="",this.pinLiveText="",this.hoveredNodeId=null,this.activeResult=0,this.activationGeneration=0,this.nodeById=new Map,this.linksByNodeId=new Map,this.degreeByNodeId=new Map,this.communityLabelById=new Map,this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.optionalRequest=!1,this.optionalGeneration=0,this.pathReady=!1,this.optionalFailed=!1,this.onVisibilityChange=event=>{event.stopPropagation(),this.hiddenTypes=event.detail.hiddenTypes,this.emit("lr-hidden-types-change",{hiddenTypes:this.hiddenTypes})},this.onVisibilityChangeProposal=event=>{event.stopPropagation()},this.onSearchInput=event=>{event.stopPropagation();const value=event.detail.value;if(this.query!==value){if(this.query=value,this.graphSource!==void 0){this.sourceSearchIntent={query:value,version:this.sourceSearchVersion,epoch:this.sourceEpoch};return}this.emit("lr-search-change",{query:value,matchCount:this.matchingNodes()?.length??0,matchCountExact:!0,activeIndex:-1})}},this.onEntityActivate=event=>{event.stopPropagation(),this.activateEntity(event.detail.entityId)},this.onGraphNodeClick=event=>{const id=event.detail.nodeId;if(this.graphSource!==void 0){this.activateSourceEntity(id);return}if(!this.canActivateNode(id))return;const generation=this.invalidateActivation();if(this.setInternalSelectedNodeId(id),this.view==="3d"){const graph=this.graphEl,point=graph?.getNodeScreenPosition(id),bounds=graph?.getBoundingClientRect();if(point&&bounds){this.trackedNodeEl=void 0,this.openDetailAt(id,{x:bounds.left+point.x,y:bounds.top+point.y,width:0,height:0});return}}this.pendingNodeId=id;const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;ownerWindow&&ownerWindow.queueMicrotask(()=>{generation===this.activationGeneration&&this.isConnected&&this.ownerDocument===ownerDocument&&this.pendingNodeId===id&&(this.pendingNodeId=void 0,this.selectedNodeId===id&&this.isVisibleNode(id)&&this.activateEntity(id))})},this.onGraphNativeClick=event=>{const id=this.pendingNodeId;id&&(this.pendingNodeId=void 0,this.openDetailAt(id,this.resolveDirectClickAnchor(event)))},this.onGraphViewportChange=()=>{const graph=this.graphEl;if(graph?.view==="3d"&&this.selectedNodeId&&this.popoverEl?.open){const point=graph.getNodeScreenPosition(this.selectedNodeId);if(point){const rect2=graph.getBoundingClientRect();this.popoverEl.showAt({x:rect2.left+point.x,y:rect2.top+point.y,width:0,height:0})}return}const el=this.trackedNodeEl,popover=this.popoverEl;if(!el?.isConnected||!popover?.open)return;const rect=el.getBoundingClientRect();popover.showAt({x:rect.left+rect.width/2,y:rect.top,width:rect.width,height:rect.height})},this.onGraphNodeEnter=event=>{this.highlight==="hover"&&(this.hoveredNodeId=event.detail.nodeId)},this.onGraphNodeLeave=event=>{this.highlight==="hover"&&this.hoveredNodeId===event.detail.nodeId&&(this.hoveredNodeId=null)},this.onResultKeyDown=event=>{const buttons=[...this.renderRoot.querySelectorAll('[part="search-result"] button')],index=buttons.indexOf(event.target),next={ArrowDown:index+1,ArrowUp:index-1,Home:0,End:buttons.length-1}[event.key];index<0||next===void 0||(event.preventDefault(),this.activeResult=Math.max(0,Math.min(buttons.length-1,next)),buttons[this.activeResult].focus())},this.onPopoverHide=()=>{if(this.graphSource!==void 0?this.closeSourceDetails(!1):this.sourceDetailsOpen=!1,this.sourceClosing){this.sourceClosing=!1;return}this.invalidateActivation(),this.trackedNodeEl=void 0,this.setInternalSelectedNodeId(null)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,graphDataListLimit:LYRA_DEFAULT_graphDataListLimit,graphEdgeLimit:LYRA_DEFAULT_graphEdgeLimit,graphExplorerAllTypesHidden:LYRA_DEFAULT_graphExplorerAllTypesHidden,graphExplorerClearTypes:LYRA_DEFAULT_graphExplorerClearTypes,graphExplorerFindPath:LYRA_DEFAULT_graphExplorerFindPath,graphExplorerLabel:LYRA_DEFAULT_graphExplorerLabel,graphExplorerPin:LYRA_DEFAULT_graphExplorerPin,graphExplorerPinned:LYRA_DEFAULT_graphExplorerPinned,graphExplorerPinnedHeading:LYRA_DEFAULT_graphExplorerPinnedHeading,graphExplorerSearchLimit:LYRA_DEFAULT_graphExplorerSearchLimit,graphExplorerSearchPlaceholder:LYRA_DEFAULT_graphExplorerSearchPlaceholder,graphExplorerSearchResultsLabel:LYRA_DEFAULT_graphExplorerSearchResultsLabel,graphExplorerUnpin:LYRA_DEFAULT_graphExplorerUnpin,graphExplorerUnpinned:LYRA_DEFAULT_graphExplorerUnpinned,graphNodeLimit:LYRA_DEFAULT_graphNodeLimit,loading:LYRA_DEFAULT_loading,statusError:LYRA_DEFAULT_statusError,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["nodes","edges","nodeTypes","communities","entityDetails","pinnedNodeIds","path","hiddenTypes"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-selection-change","lr-pin-change","lr-hidden-types-change"])}get graphSource(){return this._graphSource}set graphSource(value){const previous=this._graphSource;this._graphSource=value,this.requestUpdate("graphSource",previous)}get sourcePage(){return this._sourcePage}set sourcePage(value){const old=this._sourcePage;this._sourcePage=value;const size=finiteInteger(this.sourcePageSize,100,1,500),page=finiteInteger(value,0,0,Math.floor(Number.MAX_SAFE_INTEGER/size));this.sourceChild&&this.sourceChild.sourcePage!==page&&(this.sourceChild.sourcePage=page),this.requestUpdate("sourcePage",old)}get sourcePageSize(){return this._sourcePageSize}set sourcePageSize(value){const old=this._sourcePageSize;this._sourcePageSize=value,Object.is(old,value)||(this.sourcePage=0);const size=finiteInteger(value,100,1,500);this.sourceChild&&this.sourceChild.sourcePageSize!==size&&(this.sourceChild.sourcePageSize=size),this.requestUpdate("sourcePageSize",old)}get sourceTotal(){return this.graphSource===void 0||this.sourceFilter.invalid?null:this.sourceFilter.empty?0:this.sourceChild?.graphSource===this.graphSource?this.sourceChild.sourceTotal:null}get sourceFilter(){const hidden=this.canonicalHiddenTypes;if(!hidden.length)return{nodeTypes:[],empty:!1,invalid:!1};const catalog=canonicalIdentityList(this.nodeTypes.map(type=>type.id));let units=0;if(catalog.length>500||catalog.some(type=>type.length>65536||(units+=type.length)>2e6))return{nodeTypes:[],empty:!0,invalid:!0};const types=catalog.filter(type=>!hidden.includes(type));return{nodeTypes:types,empty:types.length===0,invalid:!1}}sourceCurrent(){const source=this.graphSource,epoch=this.sourceEpoch,generation=this.activationGeneration,owner=this.ownerDocument;let revision;try{revision=source?.revision}catch{return()=>!1}return()=>{try{return source?.revision===revision&&this.graphSource===source&&this.sourceEpoch===epoch&&this.activationGeneration===generation&&this.isConnected&&this.ownerDocument===owner}catch{return!1}}}inspectSourceSelection(){const graph=this.sourceChild,id=this.selectedNodeId;if(!graph||this.graphSource===void 0||this.sourceFilter.empty||!id)return;const signature=[graph,this.graphSource,this.sourceEpoch,id];if(this.sourceInspect&&signature.every((value,index)=>value===this.sourceInspect[index]))return;this.sourceInspect=signature;const current=this.sourceCurrent();resolveGraphSourceComposition(graph,[`node:${id}`]).then(result=>{if(!result||!result.current()||!current()||this.selectedNodeId!==id){this.sourceInspect===signature&&(this.sourceInspect=void 0);return}const record=result.records.find(row=>row.key===`node:${id}`);if(!record||record.value.kind!=="node"){this.selectedNodeId=null;return}this.sourceEntity=record.value.value})}async revealSourceKey(key){if(this.graphSource===void 0)return!1;this.query="",this.hiddenTypes=[];const current=this.sourceCurrent();if(await this.updateComplete,!current())return!1;const revealed=await this.sourceChild?.revealSourceKey(key);return current()&&revealed===!0}closeSourceDetails(closePopover=!0){this.sourceDetailsOpen=!1;const neighbors=this.renderRoot?.querySelector('[part="detail-neighbors"]');neighbors?.graphSource!==void 0&&(neighbors.graphSource=void 0),closePopover&&this.popoverEl?.open&&(this.sourceClosing=!0,this.popoverEl.open=!1)}requestUpdate(...args){const name=args[0];this.sourceEpoch!==void 0&&(name==="graphSource"||name===void 0)&&(this.sourceEpoch++,this.sourceInspect=void 0,this.sourceEntity=void 0,this.closeSourceDetails(),this.sourceSearchIntent=void 0,this.internalSelectionAssignment=void 0,this.invalidateActivation(),this.sourceChild?.graphSource!==void 0&&(this.sourceChild.graphSource=void 0)),name==="query"&&(this.sourceSearchVersion=(this.sourceSearchVersion??0)+1,this.sourceSearchIntent=void 0),this.graphSource!==void 0&&(name==="hiddenTypes"||name==="nodeTypes"||name==="selectedNodeId"&&!this.sourceAssigned)&&(this.invalidateActivation(),this.sourceInspect=void 0,this.closeSourceDetails(),name==="selectedNodeId"&&(this.sourceEntity=void 0,this.internalSelectionAssignment=void 0)),this.graphSource!==void 0&&this.sourceChild&&["query","hiddenTypes","nodeTypes"].includes(String(name))&&this.bindSourceChild(this.sourceChild),super.requestUpdate(...args)}async activateSourceEntity(id){if(!isNonBlankIdentity(id)||id.length+5>65536||this.sourceFilter.empty)return;const graph=this.sourceChild;if(!graph)return;const mounted=graph.view==="list"&&[...graph.renderRoot.querySelectorAll("[data-source-key]")].some(row=>row.dataset.sourceKey===`node:${id}`);graph.view==="list"&&!mounted&&(this.query="",this.hiddenTypes=[]),this.invalidateActivation();const current=this.sourceCurrent();if(await this.updateComplete,!current()||this.sourceChild!==graph)return;const result=await resolveGraphSourceComposition(graph,[`node:${id}`]);if(!current()||!result?.current())return;const record=result.records.find(row=>row.key===`node:${id}`);if(!record||record.value.kind!=="node"||(this.sourceEntity=record.value.value,this.sourceInspect=[graph,this.graphSource,this.sourceEpoch,id],this.setInternalSelectedNodeId(id),!current()||this.selectedNodeId!==id))return;const focused=await focusGraphSourceComposition(graph,`node:${id}`);if(await graph.updateComplete,!current()||!focused?.()||this.selectedNodeId!==id)return;const target=graph.view==="list"?[...graph.renderRoot.querySelectorAll("[data-source-key]")].find(row=>row.dataset.sourceKey===`node:${id}`):void 0,position=graph.view!=="list"?graph.getNodeScreenPosition(id):void 0,bounds=target?.getBoundingClientRect()??graph.getBoundingClientRect();!current()||!focused()||(graph.view==="list"?!target:!position)||(this.openDetailAt(id,{x:bounds.left+(position?.x??bounds.width/2),y:bounds.top+(position?.y??bounds.height/2),width:0,height:0}),current()&&focused()&&this.popoverEl?.open&&(this.sourceDetailsOpen=!0))}get graphModel(){const nodes=this.graphSource===void 0?this.nodes:EMPTY_SOURCE_NODES,edges=this.graphSource===void 0?this.edges:EMPTY_SOURCE_EDGES,sources=this.normalizedGraphSources;return(!sources||sources[0]!==nodes||sources[1]!==edges||sources[2]!==this.nodeTypes||sources[3]!==this.communities)&&(this.normalizedGraphSources=[nodes,edges,this.nodeTypes,this.communities],this.normalizedGraphModel=normalizeGraphModel(nodes,edges,this.nodeTypes,this.communities)),this.normalizedGraphModel}get canonicalPinnedNodeIds(){return canonicalIdentityList(this.pinnedNodeIds)}get canonicalHiddenTypes(){return canonicalIdentityList(this.hiddenTypes)}async loadOptionalPath(){await import("../path-strip/path-strip.js")}ensureOptionalChildren(){const path=this.path.length>0,request=path;if(request===this.optionalRequest)return;this.optionalRequest=request;const generation=++this.optionalGeneration;if(this.optionalPending=void 0,this.optionalFailed=!1,!path||this.pathReady)return;this.hasUpdated&&this.announcements.announcePolite(this.localize("loading"));const pending=this.loadOptionalPath().then(()=>{!this.isConnected||generation!==this.optionalGeneration||(this.pathReady||=path)},()=>{!this.isConnected||generation!==this.optionalGeneration||(this.optionalFailed=!0,this.announcements.announcePolite(this.localize("statusError")))}).then(()=>{!this.isConnected||generation!==this.optionalGeneration||(this.optionalPending=void 0,this.requestUpdate())});this.optionalPending=pending}async getUpdateComplete(){const complete=await super.getUpdateComplete(),pending=this.optionalPending;return pending?(await pending,this.getUpdateComplete()):complete}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.resumePresetActivation(),this.requestUpdate())}willUpdate(changed){if(super.willUpdate(changed),this.hasUpdated&&(changed.has("nodes")||changed.has("edges"))){const messages=this.inputLimitMessages(["nodes","edges"].filter(property2=>changed.has(property2)));messages.length&&this.announcements.announcePolite(messages.join(" "))}this.ensureOptionalChildren(),this.graphSource===void 0&&((changed.has("nodes")||changed.has("edges")||changed.has("communities")||changed.has("graphSource"))&&this.rebuildDerivedCollections(),this.hoveredNodeId&&!this.isVisibleNode(this.hoveredNodeId)&&(this.hoveredNodeId=null),(changed.has("nodes")||changed.has("hiddenTypes")||changed.has("graphSource"))&&this.selectedNodeId&&!this.isVisibleNode(this.selectedNodeId)&&(this.invalidateActivation(),this.setInternalSelectedNodeId(null),this.popoverEl&&(this.popoverEl.open=!1)),this.hasUpdated&&(this.query??"").trim()&&(changed.has("query")||changed.has("nodes")||changed.has("hiddenTypes")||changed.has("locale")||changed.has("strings"))&&this.announcements.announcePolite(this.searchResultAnnouncement()))}updated(changed){if(super.updated(changed),this.graphSource!==void 0){this.bindSourceChild(this.graphEl);return}if(changed.has("camera")&&this.view==="3d"&&this.graphEl&&this.reanchorAfterCameraUpdate(this.graphEl,this.camera),!changed.has("selectedNodeId"))return;const internallyAssigned=this.internalSelectionAssignment!==void 0&&Object.is(this.internalSelectionAssignment.value,this.selectedNodeId);if(this.internalSelectionAssignment=void 0,internallyAssigned)return;const generation=this.invalidateActivation(),id=this.selectedNodeId;if(!isNonBlankIdentity(id)){id!==null&&(this.selectedNodeId=null),this.popoverEl&&(this.popoverEl.open=!1);return}const graph=this.graphEl;graph&&this.isVisibleNode(id)&&this.activatePresetWhenGraphReady(id,graph,generation)}async reanchorAfterCameraUpdate(graph,camera){await graph.updateComplete,this.isConnected&&this.graphEl===graph&&this.camera===camera&&this.view==="3d"&&this.onGraphViewportChange()}async activatePresetWhenGraphReady(id,graph,generation){for(await graph.updateComplete;generation===this.activationGeneration&&this.isConnected&&graph.isConnected&&this.selectedNodeId===id&&graph.shadowRoot?.querySelector(tag("skeleton"));)if(!await this.waitForActivationFrame(generation))return;generation===this.activationGeneration&&this.isConnected&&this.selectedNodeId===id&&this.isVisibleNode(id)&&await this.activateEntity(id)}waitForActivationFrame(generation){this.cancelActivationFrame();const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;return!ownerWindow||!this.isConnected||generation!==this.activationGeneration?Promise.resolve(!1):new Promise(resolve=>{let settled=!1;const settle=ready=>{settled||(settled=!0,resolve(ready))};let handle;const onPageHide=()=>{this.activationFrameOwner===ownerWindow&&this.activationFrameDocument===ownerDocument&&this.activationFrameResolve===settle&&this.cancelActivationFrame()};try{handle=ownerWindow.requestAnimationFrame(()=>{const current=this.activationFrameId===handle&&this.activationFrameOwner===ownerWindow&&this.activationFrameDocument===ownerDocument&&this.activationFrameResolve===settle&&generation===this.activationGeneration&&this.isConnected&&this.ownerDocument===ownerDocument;current&&this.clearActivationFrameRecord(),settle(current)})}catch{settle(!1);return}this.activationFrameId=handle,this.activationFrameOwner=ownerWindow,this.activationFrameDocument=ownerDocument,this.activationFrameResolve=settle,this.activationFramePageHide=onPageHide,ownerWindow.addEventListener("pagehide",onPageHide,{once:!0})})}clearActivationFrameRecord(){this.activationFramePageHide&&this.activationFrameOwner?.removeEventListener("pagehide",this.activationFramePageHide),this.activationFrameId=void 0,this.activationFrameOwner=void 0,this.activationFrameDocument=void 0,this.activationFrameResolve=void 0,this.activationFramePageHide=void 0}cancelActivationFrame(){const handle=this.activationFrameId,ownerWindow=this.activationFrameOwner,settle=this.activationFrameResolve;this.clearActivationFrameRecord();try{handle!==void 0&&ownerWindow?.cancelAnimationFrame(handle)}finally{settle?.(!1)}}invalidateActivation(){return this.activationGeneration+=1,this.cancelActivationFrame(),this.activationGeneration}resumePresetActivation(){if(this.graphSource!==void 0){this.sourceInspect=void 0;return}const id=this.selectedNodeId,graph=this.graphEl;if(!id||!graph||!this.isVisibleNode(id))return;const generation=this.invalidateActivation();this.activatePresetWhenGraphReady(id,graph,generation)}setInternalSelectedNodeId(value){Object.is(this.selectedNodeId,value)||(this.internalSelectionAssignment={value},this.sourceAssigned=!0,this.selectedNodeId=value,this.sourceAssigned=!1,this.emit("lr-selection-change",{selectedNodeId:value,selectedNodeIds:value?[value]:[],selectedEdgeIds:[]}))}disconnectedCallback(){this.sourceEpoch++,this.sourceInspect=void 0,this.sourceDetailsOpen=!1,this.sourceSearchIntent=void 0,this.internalSelectionAssignment=void 0,this.sourceChild&&setGraphSourceComposition(this.sourceChild,void 0),this.sourceChildBinding=void 0,++this.optionalGeneration,this.optionalRequest=!1,this.optionalPending=void 0,this.invalidateActivation(),this.pendingNodeId=void 0,this.trackedNodeEl=void 0,this.hoveredNodeId=null,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),++this.optionalGeneration,this.optionalRequest=!1,this.optionalPending=void 0,this.invalidateActivation(),this.announcements.adopted(),this.sourceEpoch++,this.sourceInspect=void 0,this.sourceDetailsOpen=!1,this.sourceChildBinding=void 0,this.isConnected&&this.resumePresetActivation()}rebuildDerivedCollections(){const model=this.graphModel;this.nodeById=new Map(model.nodes.map(node=>[node.id,node])),this.communityLabelById=new Map(model.communities.map(community=>[community.id,community.label]));const linksByNodeId=new Map,degrees=new Map;for(const link of model.links)for(const id of new Set([link.source,link.target])){const adjacent=linksByNodeId.get(id);adjacent?adjacent.push(link):linksByNodeId.set(id,[link]),degrees.set(id,(degrees.get(id)??0)+1)}this.linksByNodeId=linksByNodeId,this.degreeByNodeId=degrees}isVisibleGraphNode(node){return node.type==null||!this.canonicalHiddenTypes.includes(node.type)}isVisibleNode(id){const node=this.nodeById.get(id);return!!node&&this.isVisibleGraphNode(node)}canActivateNode(id){const node=this.nodeById.get(id);return node?this.isVisibleGraphNode(node):!this.hasUpdated&&this.graphModel.nodes.length===0}nodeLabel(id){const node=this.graphSource!==void 0?this.sourceEntity?.id===id?this.sourceEntity:void 0:this.nodeById.get(id);return node?.label||node?.accessibleLabel||id}degreeOf(id){return this.degreeByNodeId.get(id)??0}entityFor(id){const node=this.graphSource!==void 0?this.sourceEntity?.id===id?this.sourceEntity:void 0:this.nodeById.get(id);if(!node)return;const details=this.entityDetails[id];return{id:node.id,label:node.label||node.accessibleLabel||node.id,type:node.type,communityId:node.communityId,description:details?.description,properties:details?.properties,degree:details?.degree??(this.graphSource===void 0?this.degreeOf(node.id):void 0)}}communityLabelFor(communityId){return communityId?this.communityLabelById.get(communityId)??communityId:""}neighborRowsFor(id){const rows=[];for(const link of this.linksByNodeId.get(id)??[])if(link.source===id){const node=this.entityFor(link.target);node&&this.isVisibleNode(link.target)&&rows.push({relation:link.label??"",direction:"out",node})}else if(link.target===id){const node=this.entityFor(link.source);node&&this.isVisibleNode(link.source)&&rows.push({relation:link.label??"",direction:"in",node})}return rows}searchableNamesOf(node){return[node.label,node.accessibleLabel,node.id].filter(name=>typeof name=="string"&&name!=="")}matchingNodes(){if(this.graphSource!==void 0)return;const query2=this.query??"",locale=this.effectiveLocale,model=this.graphModel,hidden=this.canonicalHiddenTypes,memo=this.matchesMemo;if(memo?.[0]===query2&&memo[1]===locale&&memo[2]===model&&memo[3]===hidden)return memo[4];const q=query2.trim().toLocaleLowerCase(locale);let matches;if(q){const hiddenTypes=new Set(hidden);matches=model.nodes.filter(node=>(node.type==null||!hiddenTypes.has(node.type))&&this.searchableNamesOf(node).some(name=>name.toLocaleLowerCase(locale).includes(q)))}return this.matchesMemo=[query2,locale,model,hidden,matches],matches}searchResultAnnouncement(matches=this.matchingNodes()){return matches?matches.length===0?this.localize("viewerSearchNoMatches"):this.localize("viewerSearchMatchCount",void 0,{count:getNumberFormat(this.effectiveLocale).format(matches.length),pluralCount:matches.length}):""}neighborIdsOf(id){const ids=new Set;for(const link of this.linksByNodeId.get(id)??[])link.source===id?ids.add(link.target):link.target===id&&ids.add(link.source);return ids}linkKey(link){return graphLinkIdentity(link)}dimmingProjection(){if(this.graphSource!==void 0)return{nodes:[],links:[]};const model=this.graphModel,matches=this.matchingNodes(),focus=matches?null:this.selectedNodeId??(this.highlight==="hover"?this.hoveredNodeId:null),key=[model,this.highlight,matches,focus];if(this.dimmingMemo&&key.every((value,index)=>value===this.dimmingMemo.key[index]))return this.dimmingMemo;let nodes=[];if(this.highlight!=="none"){const keep=matches?new Set(matches.map(node=>node.id)):focus?this.neighborIdsOf(focus):void 0;focus&&keep.add(focus),keep&&(nodes=model.nodes.filter(node=>!keep.has(node.id)).map(node=>node.id))}const dimmed=new Set(nodes),links=dimmed.size?model.links.filter(link=>dimmed.has(link.source)||dimmed.has(link.target)).map(link=>this.linkKey(link)):[];return this.dimmingMemo={key,nodes,links},this.dimmingMemo}get computedDimmedNodeIds(){return this.dimmingProjection().nodes}get computedDimmedLinkIds(){return this.dimmingProjection().links}togglePin(id){if(!isNonBlankIdentity(id))return;const pinnedNodeIds=this.canonicalPinnedNodeIds,wasPinned=pinnedNodeIds.includes(id),next=wasPinned?pinnedNodeIds.filter(existing=>existing!==id):[...pinnedNodeIds,id];this.pinnedNodeIds=next,this.pinLiveText=this.localize(wasPinned?"graphExplorerUnpinned":"graphExplorerPinned",void 0,{label:this.nodeLabel(id)}),this.announcements.announcePolite(this.pinLiveText),this.emit("lr-pin-change",{pinnedNodeIds:next})}requestPath(){const pinnedNodeIds=this.canonicalPinnedNodeIds;if(pinnedNodeIds.length!==2)return;const[sourceNodeId,targetNodeId]=pinnedNodeIds;this.emit("lr-path-request",{sourceNodeId,targetNodeId})}fit(options){this.graphEl?.fit(options)}resetView(){this.graphEl?.fit()}async focusNode(id,options){return this.graphSource===void 0&&!this.isVisibleNode(id)?!1:await this.graphEl?.focusNode(id,options)??!1}async activateEntity(id){if(this.graphSource!==void 0)return this.activateSourceEntity(id);if(!this.canActivateNode(id))return;const generation=this.invalidateActivation();this.setInternalSelectedNodeId(id),this.trackedNodeEl=void 0;const graph=this.graphEl,focused=graph?await graph.focusNode(id):!1;if(generation!==this.activationGeneration||!this.isConnected||this.selectedNodeId!==id||!this.isVisibleNode(id)||!focused)return;const rect=graph?.getBoundingClientRect();if(!rect)return;const projected=graph?.view==="3d"?graph.getNodeScreenPosition(id):void 0;this.openDetailAt(id,{x:rect.left+(projected?.x??rect.width/2),y:rect.top+(projected?.y??rect.height/2),width:0,height:0})}openDetailAt(id,rect){const popover=this.popoverEl;popover&&(popover.accessibleLabel=this.entityFor(id)?.label||"",popover.showAt(rect))}resolveDirectClickAnchor(event){if(this.view==="3d"){this.trackedNodeEl=void 0;const graph=this.graphEl,position=this.selectedNodeId?graph?.getNodeScreenPosition(this.selectedNodeId):void 0,rect2=graph?.getBoundingClientRect();if(position&&rect2)return{x:rect2.left+position.x,y:rect2.top+position.y,width:0,height:0}}if(this.renderer==="canvas")return this.trackedNodeEl=void 0,{x:event.clientX,y:event.clientY,width:0,height:0};const nodeEl=event.composedPath().find(el=>isElementNode(el)&&el.matches('[part="node"]'));if(!nodeEl)return this.trackedNodeEl=void 0,{x:event.clientX,y:event.clientY,width:0,height:0};this.trackedNodeEl=nodeEl;const rect=nodeEl.getBoundingClientRect();return{x:rect.left+rect.width/2,y:rect.top,width:rect.width,height:rect.height}}inputLimitMessages(properties=["nodes","edges"]){const messages=[],format=getNumberFormat(this.effectiveLocale);for(const property2 of properties){const loss=publicCollectionTruncation(this,property2);loss&&messages.push(this.localize(property2==="nodes"?"graphNodeLimit":"graphEdgeLimit",void 0,{shown:format.format(loss.retained),total:format.format(loss.source)}))}return messages}render(){const groupLabel=retrievalSemanticLabel(this,this.label==null?this.localize("graphExplorerLabel"):this.label),groupRole=retrievalSemanticRole(this,"group"),matches=this.matchingNodes(),detailsLimit=publicCollectionTruncation(this,"entityDetails"),model=this.graphModel,pinnedNodeIds=this.canonicalPinnedNodeIds,hiddenTypes=this.canonicalHiddenTypes,selectedEntity=this.graphSource!==void 0?this.sourceEntity:this.selectedNodeId?this.nodeById.get(this.selectedNodeId):void 0,isPinned=this.selectedNodeId!=null&&pinnedNodeIds.includes(this.selectedNodeId),dimmedDeps=[this.highlight,matches,this.selectedNodeId,this.hoveredNodeId,model],detailDeps=[this.selectedNodeId,model,hiddenTypes,this.entityDetails,this.sourceEntity],sourceFilter=this.sourceFilter,sourceCurrent=this.sourceCurrent(),renderedSource=this.graphSource,renderedEpoch=this.sourceEpoch,renderedOwner=this.ownerDocument,actionCurrent=renderedSource!==void 0?sourceCurrent:()=>this.graphSource===void 0&&this.sourceEpoch===renderedEpoch&&this.isConnected&&this.ownerDocument===renderedOwner;return html`
2
2
  <div
3
3
  part="base"
4
4
  role=${groupRole??nothing}
@@ -21,6 +21,8 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
21
21
  @lr-visibility-change=${this.onVisibilityChange}
22
22
  ></lr-graph-legend>
23
23
  </div>
24
+ ${this.graphSource!==void 0&&sourceFilter.empty?html`<p part="source-status">${this.localize(sourceFilter.invalid?"statusError":"graphExplorerAllTypesHidden")}</p><button type="button" part="source-clear" data-source-clear-types @click=${()=>{sourceCurrent()&&(this.hiddenTypes=[],this.emit("lr-hidden-types-change",{hiddenTypes:this.hiddenTypes}))}}>${this.localize("graphExplorerClearTypes")}</button>`:nothing}
25
+ ${this.inputLimitMessages().map(message=>html`<p part="input-limit" role="note">${message}</p>`)}
24
26
  ${detailsLimit?html`<p part="details-limit" role="note">${this.localize("graphDataListLimit",void 0,{shown:getNumberFormat(this.effectiveLocale).format(detailsLimit.retained),total:getNumberFormat(this.effectiveLocale).format(detailsLimit.source)})}</p>`:nothing}
25
27
  ${matches?html`
26
28
  <div
@@ -55,20 +57,20 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
55
57
  >
56
58
  ${pinnedNodeIds.map(id=>html`<lr-chip
57
59
  removable
58
- @lr-remove=${event=>{event.stopPropagation(),this.togglePin(id)}}
60
+ @lr-remove=${event=>{event.stopPropagation(),actionCurrent()&&this.togglePin(id)}}
59
61
  >${this.nodeLabel(id)}</lr-chip
60
62
  >`)}
61
- ${pinnedNodeIds.length===2?html`<lr-button size="s" @click=${()=>this.requestPath()}
63
+ ${pinnedNodeIds.length===2?html`<lr-button size="s" @click=${()=>{actionCurrent()&&this.requestPath()}}
62
64
  >${this.localize("graphExplorerFindPath")}</lr-button
63
65
  >`:nothing}
64
66
  </div>
65
67
  `:nothing}
66
68
  <div class="sr-only" aria-hidden="true">${this.pinLiveText}</div>
67
- ${this.path.length?html`<lr-path-strip
69
+ ${this.path.length?this.pathReady?html`<lr-path-strip
68
70
  part="path"
69
71
  .path=${this.path}
70
72
  @lr-entity-activate=${event=>event.stopPropagation()}
71
- ></lr-path-strip>`:nothing}
73
+ ></lr-path-strip>`:html`<p part="path">${this.localize(this.optionalFailed?"statusError":"loading")}</p>`:nothing}
72
74
  <lr-graph
73
75
  part="graph"
74
76
  .nodes=${model.nodes}
@@ -93,6 +95,7 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
93
95
  @lr-viewport-change=${this.onGraphViewportChange}
94
96
  @lr-camera-change=${this.onGraphViewportChange}
95
97
  @lr-view-change=${event=>{this.view=event.detail.view}}
98
+ ${ref(this.bindSourceChild)}
96
99
  ></lr-graph>
97
100
  <lr-popover
98
101
  part="detail-popover"
@@ -100,15 +103,19 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
100
103
  @lr-hide=${this.onPopoverHide}
101
104
  >
102
105
  <slot name="details">
103
- ${selectedEntity?html`
106
+ ${selectedEntity&&(this.graphSource===void 0||this.sourceDetailsOpen)?html`
104
107
  <lr-entity-card
105
108
  part="detail-card"
106
- .entity=${guard(detailDeps,()=>selectedEntity)}
109
+ .entity=${guard(detailDeps,()=>this.selectedNodeId?this.entityFor(this.selectedNodeId)??null:null)}
107
110
  .types=${model.nodeTypes}
108
111
  community-label=${this.communityLabelFor(selectedEntity.communityId)}
109
112
  >
110
113
  <lr-neighbor-list
111
- .rows=${guard(detailDeps,()=>this.neighborRowsFor(this.selectedNodeId))}
114
+ part="detail-neighbors"
115
+ .graphSource=${this.graphSource}
116
+ .centerKey=${this.graphSource!==void 0&&this.selectedNodeId?`node:${this.selectedNodeId}`:null}
117
+ .sourceNodeTypes=${sourceFilter.nodeTypes}
118
+ .rows=${guard(detailDeps,()=>this.graphSource===void 0?this.neighborRowsFor(this.selectedNodeId):[])}
112
119
  .types=${model.nodeTypes}
113
120
  expandable
114
121
  ></lr-neighbor-list>
@@ -116,7 +123,7 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
116
123
  <lr-button
117
124
  slot="actions"
118
125
  size="s"
119
- @click=${()=>this.selectedNodeId&&this.togglePin(this.selectedNodeId)}
126
+ @click=${()=>actionCurrent()&&this.selectedNodeId&&this.togglePin(this.selectedNodeId)}
120
127
  >
121
128
  ${this.localize(isPinned?"graphExplorerUnpin":"graphExplorerPin")}
122
129
  </lr-button>
@@ -126,4 +133,4 @@ import{__decorate}from"tslib";import{collectionSupport,publicCollectionTruncatio
126
133
  </slot>
127
134
  </lr-popover>
128
135
  </div>
129
- `}}__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"nodes",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"edges",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"nodeTypes",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"communities",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"entityDetails",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"pinnedNodeIds",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"path",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"hiddenTypes",void 0),__decorate([property({attribute:"selected-node-id"})],LyraKnowledgeGraphExplorer.prototype,"selectedNodeId",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"renderer",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"view",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"camera",void 0),__decorate([property({attribute:"node-labels"})],LyraKnowledgeGraphExplorer.prototype,"nodeLabels",void 0),__decorate([property({attribute:"fit-to"})],LyraKnowledgeGraphExplorer.prototype,"fitTo",void 0),__decorate([property({converter:graphLengthConverter})],LyraKnowledgeGraphExplorer.prototype,"width",void 0),__decorate([property({converter:graphLengthConverter})],LyraKnowledgeGraphExplorer.prototype,"height",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"label",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"highlight",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"query",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"pinLiveText",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"hoveredNodeId",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"activeResult",void 0),__decorate([query('[part="graph"]')],LyraKnowledgeGraphExplorer.prototype,"graphEl",void 0),__decorate([query('[part="detail-popover"]')],LyraKnowledgeGraphExplorer.prototype,"popoverEl",void 0);export{LyraKnowledgeGraphExplorer};
136
+ `}}__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"sourceEntity",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"sourceDetailsOpen",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"sourcePaint",void 0),__decorate([property({attribute:!1,noAccessor:!0,hasChanged:()=>!0})],LyraKnowledgeGraphExplorer.prototype,"graphSource",null),__decorate([property({type:Number,attribute:"source-page",noAccessor:!0})],LyraKnowledgeGraphExplorer.prototype,"sourcePage",null),__decorate([property({type:Number,attribute:"source-page-size",noAccessor:!0})],LyraKnowledgeGraphExplorer.prototype,"sourcePageSize",null),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"nodes",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"edges",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"nodeTypes",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"communities",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"entityDetails",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"pinnedNodeIds",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"path",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"hiddenTypes",void 0),__decorate([property({attribute:"selected-node-id"})],LyraKnowledgeGraphExplorer.prototype,"selectedNodeId",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"renderer",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"view",void 0),__decorate([property({attribute:!1})],LyraKnowledgeGraphExplorer.prototype,"camera",void 0),__decorate([property({attribute:"node-labels"})],LyraKnowledgeGraphExplorer.prototype,"nodeLabels",void 0),__decorate([property({attribute:"fit-to"})],LyraKnowledgeGraphExplorer.prototype,"fitTo",void 0),__decorate([property({converter:graphLengthConverter})],LyraKnowledgeGraphExplorer.prototype,"width",void 0),__decorate([property({converter:graphLengthConverter})],LyraKnowledgeGraphExplorer.prototype,"height",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"label",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"highlight",void 0),__decorate([property()],LyraKnowledgeGraphExplorer.prototype,"query",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"pinLiveText",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"hoveredNodeId",void 0),__decorate([state()],LyraKnowledgeGraphExplorer.prototype,"activeResult",void 0),__decorate([query('[part="graph"]')],LyraKnowledgeGraphExplorer.prototype,"graphEl",void 0),__decorate([query('[part="detail-popover"]')],LyraKnowledgeGraphExplorer.prototype,"popoverEl",void 0);export{LyraKnowledgeGraphExplorer};
@@ -1,2 +1,2 @@
1
1
  /** @deprecated Import @aceshooting/lyra-ui/components/lr-knowledge-graph-explorer.js to register this component. */
2
- export*from'./knowledge-graph-explorer.class.js';import'../graph/graph.js';import'../graph-legend/graph-legend.js';import'../entity-card/entity-card.js';import'../neighbor-list/neighbor-list.js';import'../path-strip/path-strip.js';import'../../overlays/overlay/popover.js';import'../../forms/input/input.js';import'../../overlays/chip/chip.js';import'../../forms/button/button.js';
2
+ export*from'./knowledge-graph-explorer.class.js';import'../graph/graph.js';import'../graph-legend/graph-legend.js';import'../entity-card/entity-card.js';import'../neighbor-list/neighbor-list.js';import'../../overlays/overlay/popover.js';import'../../forms/input/input.js';import'../../forms/button/button.js';
@@ -1 +1 @@
1
- export*from"./knowledge-graph-explorer.class.js";import{LyraKnowledgeGraphExplorer}from"./knowledge-graph-explorer.class.js";import{defineElement}from"../../../internal/prefix.js";import"../graph/graph.js";import"../graph-legend/graph-legend.js";import"../entity-card/entity-card.js";import"../neighbor-list/neighbor-list.js";import"../path-strip/path-strip.js";import"../../overlays/overlay/popover.js";import"../../forms/input/input.js";import"../../overlays/chip/chip.js";import"../../forms/button/button.js";defineElement("knowledge-graph-explorer",LyraKnowledgeGraphExplorer);
1
+ export*from"./knowledge-graph-explorer.class.js";import{LyraKnowledgeGraphExplorer}from"./knowledge-graph-explorer.class.js";import{defineElement}from"../../../internal/prefix.js";import"../graph/graph.js";import"../graph-legend/graph-legend.js";import"../entity-card/entity-card.js";import"../neighbor-list/neighbor-list.js";import"../../overlays/overlay/popover.js";import"../../forms/input/input.js";import"../../forms/button/button.js";defineElement("knowledge-graph-explorer",LyraKnowledgeGraphExplorer);
@@ -1 +1 @@
1
- import{iconHitTarget}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` :host { display: block; block-size: var(--lr-canvas-reserved-height, var(--lr-size-24rem)); --_lr-knowledge-graph-explorer-detail-clamp: var( --lr-popover-viewport-clamp ); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-s); min-inline-size: 0; block-size: 100%; min-block-size: 0; } [part='toolbar'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-s); } [part='search'] { flex: 1 1 var(--lr-size-12rem); min-inline-size: 0; } [part='search-results'] { display: flex; flex-direction: column; gap: var(--lr-size-2px); max-block-size: var(--lr-size-12rem); overflow-y: auto; overflow-x: clip; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='search-result'] { display: block; } [part='search-result'] button { display: block; inline-size: 100%; box-sizing: border-box; ${iconHitTarget} text-align: start; padding: var(--lr-space-xs) var(--lr-space-s); border: none; background: transparent; color: var(--lr-color-text); font: inherit; overflow-wrap: anywhere; cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='search-result'] button:hover { background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-hover)); } [part='search-result'] button:active { background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='search-result'] button:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='search-empty'] { padding: var(--lr-space-xs) var(--lr-space-s); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='pinned'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-xs); } [part='pinned-heading'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='legend'] { flex: 0 1 auto; max-block-size: var(--lr-size-12rem); overflow-y: auto; overflow-x: clip; } [part='graph'] { display: block; inline-size: 100%; flex: 0 1 auto; min-block-size: 0; block-size: var( --lr-canvas-reserved-height, var(--_lr-graph-requested-height, var(--lr-size-24rem)) ); } [part='detail-card'] { max-inline-size: min( var(--_lr-knowledge-graph-explorer-detail-clamp), var(--lr-size-24rem) ); } `;export{styles};
1
+ import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` :host { display: block; block-size: var(--lr-canvas-reserved-height, var(--lr-size-24rem)); --_lr-knowledge-graph-explorer-detail-clamp: var( --lr-popover-viewport-clamp ); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-s); min-inline-size: 0; block-size: 100%; min-block-size: 0; } [part='toolbar'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-s); } [part='search'] { flex: 1 1 var(--lr-size-12rem); min-inline-size: 0; } [part='source-clear'] { ${iconHitTarget} font: inherit; color: var(--lr-color-text); background: var(--lr-color-surface-raised); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius-xs); cursor: pointer; transition: var(--lr-transition-interactive); } [part='source-clear']:hover { background: var(--lr-color-brand-quiet); } [part='source-clear']:active { background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='source-clear']:focus-visible { ${focusRing} } [part='source-status'] { overflow-wrap: anywhere; margin-block: var(--lr-space-xs); } [part='search-results'] { display: flex; flex-direction: column; gap: var(--lr-size-2px); max-block-size: var(--lr-size-12rem); overflow-y: auto; overflow-x: clip; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='search-result'] { display: block; } [part='search-result'] button { display: block; inline-size: 100%; box-sizing: border-box; ${iconHitTarget} text-align: start; padding: var(--lr-space-xs) var(--lr-space-s); border: none; background: transparent; color: var(--lr-color-text); font: inherit; overflow-wrap: anywhere; cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='search-result'] button:hover { background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-hover)); } [part='search-result'] button:active { background: color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='search-result'] button:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='search-empty'] { padding: var(--lr-space-xs) var(--lr-space-s); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='pinned'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-xs); } [part='pinned-heading'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } [part='legend'] { flex: 0 1 auto; max-block-size: var(--lr-size-12rem); overflow-y: auto; overflow-x: clip; } [part='graph'] { display: block; inline-size: 100%; flex: 0 1 auto; min-block-size: 0; block-size: var( --lr-canvas-reserved-height, var(--_lr-graph-requested-height, var(--lr-size-24rem)) ); } [part='detail-card'] { max-inline-size: min( var(--_lr-knowledge-graph-explorer-detail-clamp), var(--lr-size-24rem) ); } [part='input-limit'] { margin-block: var(--lr-space-xs); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); } `;export{styles};
@@ -1 +1 @@
1
- import{minMax}from"../../../internal/numbers.js";import{isNonBlankIdentity}from"../retrieval-identity.js";function normalizeMindMapTopics(topics){const seen=new Set,normalize=values=>{const source=Array.isArray(values)?values:[],retained=[];for(const topic of source){if(topic===null||typeof topic!="object"||!isNonBlankIdentity(topic.id)||seen.has(topic.id))continue;seen.add(topic.id);const children=normalize(topic.children??[]);retained.push(Object.freeze({...topic,...topic.children===void 0?{}:{children}}))}return Object.freeze(retained)};return normalize(topics)}const LAYOUT_PADDING=60;function syntheticHubIdentity(topics){const ids=new Set,collect=values=>{for(const topic of values)ids.add(topic.id),collect(topic.children??[])};collect(topics);let identity="__hub__";for(;ids.has(identity);)identity=`_${identity}`;return identity}const leafCounts=new WeakMap;function visibleLeafCount(node,depth,opts){let count=leafCounts.get(node);if(count===void 0){const children=node.children??[];count=children.length===0||!opts.isExpanded(node.id,depth)?1:Math.max(1,children.reduce((sum,c)=>sum+visibleLeafCount(c,depth+1,opts),0)),leafCounts.set(node,count)}return count}function place(node,depth,angleStart,angleEnd,parentId,cx,cy,opts,out,links){const angle=(angleStart+angleEnd)/2,r=depth*opts.ringGap,dir=opts.rtl?-1:1,x=cx+dir*r*Math.sin(angle),y=cy-r*Math.cos(angle),hasChildren=node.children.length>0,expanded=hasChildren&&opts.isExpanded(node.id,depth);if(out.push({id:node.id,label:node.label,depth,x,y,angle,parentId,hasChildren,expanded}),parentId&&links.push({fromId:parentId,toId:node.id}),!hasChildren||!expanded)return;const counts=node.children.map(c=>visibleLeafCount(c,depth+1,opts)),total=counts.reduce((a,b)=>a+b,0)||1,span=angleEnd-angleStart;let cursor=angleStart;node.children.forEach((child,i)=>{const childSpan=counts[i]/total*span;place({id:child.id,label:child.label,children:child.children??[]},depth+1,cursor,cursor+childSpan,node.id,cx,cy,opts,out,links),cursor+=childSpan})}function layoutMindMap(topics,hubLabel,opts){const normalizedTopics=normalizeMindMapTopics(topics);if(normalizedTopics.length===0)return{placed:[],links:[],width:0,height:0,centerX:0,centerY:0};const root=normalizedTopics.length===1?{id:normalizedTopics[0].id,label:normalizedTopics[0].label,children:normalizedTopics[0].children??[]}:{id:syntheticHubIdentity(normalizedTopics),label:hubLabel,children:normalizedTopics},placed=[],links=[];place(root,0,0,2*Math.PI,null,0,0,opts,placed,links);const[xLo,xHi]=minMax(placed.map(p=>p.x))??[0,0],[yLo,yHi]=minMax(placed.map(p=>p.y))??[0,0],minX=xLo-LAYOUT_PADDING,maxX=xHi+LAYOUT_PADDING,minY=yLo-LAYOUT_PADDING,maxY=yHi+LAYOUT_PADDING;return{placed:placed.map(p=>({...p,x:p.x-minX,y:p.y-minY})),links,width:maxX-minX,height:maxY-minY,centerX:-minX,centerY:-minY}}function apportionByWeight(weights,budget){const shares=weights.map(()=>0),total=weights.reduce((sum,weight)=>sum+weight,0);if(total<=0||budget<=0||weights.length===0)return shares;const sampleCount=Math.min(budget,total),step=total/sampleCount;let childIndex=0,boundary=weights[0];for(let sample=0;sample<sampleCount;sample++){const target=(sample+.5)*step;for(;target>=boundary&&childIndex<weights.length-1;)childIndex+=1,boundary+=weights[childIndex];shares[childIndex]=shares[childIndex]+1}return shares}function decimateMindMapLayout(placed,links,maxNodes){const totalCount=placed.length;if(totalCount<=maxNodes||maxNodes<=0)return{placed:[...placed],links:[...links],totalCount,truncated:!1};const childrenByParent=new Map;for(const node of placed){const siblings=childrenByParent.get(node.parentId);siblings?siblings.push(node):childrenByParent.set(node.parentId,[node])}const subtreeSizeCache=new Map,subtreeSize=id=>{const cached=subtreeSizeCache.get(id);if(cached!==void 0)return cached;subtreeSizeCache.set(id,1);const children=childrenByParent.get(id)??[];let total=1;for(const child of children)total+=subtreeSize(child.id);return subtreeSizeCache.set(id,total),total},kept=new Set,visit=(node,budget)=>{if(budget<=0)return;kept.add(node.id);const children=childrenByParent.get(node.id)??[];if(children.length===0||budget<=1)return;const shares=apportionByWeight(children.map(child=>subtreeSize(child.id)),budget-1);children.forEach((child,index)=>visit(child,shares[index]))},roots=childrenByParent.get(null)??[],rootShares=apportionByWeight(roots.map(root=>subtreeSize(root.id)),maxNodes);return roots.forEach((root,index)=>visit(root,rootShares[index])),{placed:placed.filter(node=>kept.has(node.id)),links:links.filter(link=>kept.has(link.fromId)&&kept.has(link.toId)),totalCount,truncated:!0}}export{decimateMindMapLayout,layoutMindMap};
1
+ import{minMax}from"../../../internal/numbers.js";import{isNonBlankIdentity}from"../retrieval-identity.js";function normalizeMindMapTopics(topics){const seen=new Set,normalize=values=>{const source=Array.isArray(values)?values:[],retained=[];for(const topic of source){if(topic===null||typeof topic!="object"||!isNonBlankIdentity(topic.id)||seen.has(topic.id))continue;seen.add(topic.id);const children=normalize(topic.children??[]);retained.push(Object.freeze({...topic,...topic.children===void 0?{}:{children}}))}return Object.freeze(retained)};return normalize(topics)}const LAYOUT_PADDING=60;function syntheticHubIdentity(topics){const ids=new Set,collect=values=>{for(const topic of values)ids.add(topic.id),collect(topic.children??[])};collect(topics);let identity="__hub__";for(;ids.has(identity);)identity=`_${identity}`;return identity}function visibleLeafCount(node,depth,opts,leafCounts){let count=leafCounts.get(node);if(count===void 0){const children=node.children??[];count=children.length===0||!opts.isExpanded(node.id,depth)?1:Math.max(1,children.reduce((sum,c)=>sum+visibleLeafCount(c,depth+1,opts,leafCounts),0)),leafCounts.set(node,count)}return count}function place(node,depth,angleStart,angleEnd,parentId,cx,cy,opts,leafCounts,out,links){const angle=(angleStart+angleEnd)/2,r=depth*opts.ringGap,dir=opts.rtl?-1:1,x=cx+dir*r*Math.sin(angle),y=cy-r*Math.cos(angle),hasChildren=node.children.length>0,expanded=hasChildren&&opts.isExpanded(node.id,depth);if(out.push({id:node.id,label:node.label,depth,x,y,angle,parentId,hasChildren,expanded}),parentId&&links.push({fromId:parentId,toId:node.id}),!hasChildren||!expanded)return;const counts=node.children.map(c=>visibleLeafCount(c,depth+1,opts,leafCounts)),total=counts.reduce((a,b)=>a+b,0)||1,span=angleEnd-angleStart;let cursor=angleStart;node.children.forEach((child,i)=>{const childSpan=counts[i]/total*span;place({id:child.id,label:child.label,children:child.children??[]},depth+1,cursor,cursor+childSpan,node.id,cx,cy,opts,leafCounts,out,links),cursor+=childSpan})}function layoutMindMap(topics,hubLabel,opts){return createMindMapLayout(topics)(hubLabel,opts)}function createMindMapLayout(topics){const normalizedTopics=normalizeMindMapTopics(topics);return(hubLabel,opts)=>layoutNormalizedMindMap(normalizedTopics,hubLabel,opts)}function layoutNormalizedMindMap(normalizedTopics,hubLabel,opts){if(normalizedTopics.length===0)return{placed:[],links:[],width:0,height:0,centerX:0,centerY:0};const root=normalizedTopics.length===1?{id:normalizedTopics[0].id,label:normalizedTopics[0].label,children:normalizedTopics[0].children??[]}:{id:syntheticHubIdentity(normalizedTopics),label:hubLabel,children:normalizedTopics},placed=[],links=[];place(root,0,0,2*Math.PI,null,0,0,opts,new WeakMap,placed,links);const[xLo,xHi]=minMax(placed.map(p=>p.x))??[0,0],[yLo,yHi]=minMax(placed.map(p=>p.y))??[0,0],minX=xLo-LAYOUT_PADDING,maxX=xHi+LAYOUT_PADDING,minY=yLo-LAYOUT_PADDING,maxY=yHi+LAYOUT_PADDING;return{placed:placed.map(p=>({...p,x:p.x-minX,y:p.y-minY})),links,width:maxX-minX,height:maxY-minY,centerX:-minX,centerY:-minY}}function apportionByWeight(weights,budget){const shares=weights.map(()=>0),total=weights.reduce((sum,weight)=>sum+weight,0);if(total<=0||budget<=0||weights.length===0)return shares;const sampleCount=Math.min(budget,total),step=total/sampleCount;let childIndex=0,boundary=weights[0];for(let sample=0;sample<sampleCount;sample++){const target=(sample+.5)*step;for(;target>=boundary&&childIndex<weights.length-1;)childIndex+=1,boundary+=weights[childIndex];shares[childIndex]=shares[childIndex]+1}return shares}function decimateMindMapLayout(placed,links,maxNodes){const totalCount=placed.length;if(totalCount<=maxNodes||maxNodes<=0)return{placed:[...placed],links:[...links],totalCount,truncated:!1};const childrenByParent=new Map;for(const node of placed){const siblings=childrenByParent.get(node.parentId);siblings?siblings.push(node):childrenByParent.set(node.parentId,[node])}const subtreeSizeCache=new Map,subtreeSize=id=>{const cached=subtreeSizeCache.get(id);if(cached!==void 0)return cached;subtreeSizeCache.set(id,1);const children=childrenByParent.get(id)??[];let total=1;for(const child of children)total+=subtreeSize(child.id);return subtreeSizeCache.set(id,total),total},kept=new Set,visit=(node,budget)=>{if(budget<=0)return;kept.add(node.id);const children=childrenByParent.get(node.id)??[];if(children.length===0||budget<=1)return;const shares=apportionByWeight(children.map(child=>subtreeSize(child.id)),budget-1);children.forEach((child,index)=>visit(child,shares[index]))},roots=childrenByParent.get(null)??[],rootShares=apportionByWeight(roots.map(root=>subtreeSize(root.id)),maxNodes);return roots.forEach((root,index)=>visit(root,rootShares[index])),{placed:placed.filter(node=>kept.has(node.id)),links:links.filter(link=>kept.has(link.fromId)&&kept.has(link.toId)),totalCount,truncated:!0}}export{createMindMapLayout,decimateMindMapLayout,layoutMindMap};
@@ -0,0 +1 @@
1
+ import{readOwnArrayLength,readOwnDataValue}from"../../../internal/data-descriptors.js";const TOPIC_COPY_LIMIT=5e4,TOPIC_DEPTH_LIMIT=64;function arrayLength(value){try{return Array.isArray(value)?readOwnArrayLength(value):void 0}catch{return}}function snapshotMindMapTopics(value){const topics=[],owned=[],queue=[],length=arrayLength(value);length!==void 0&&queue.push({source:value,target:topics,depth:0,length});let inspected=0,truncated=!1;for(let frameIndex=0;frameIndex<queue.length;frameIndex++){const frame=queue[frameIndex];if(inspected>=TOPIC_COPY_LIMIT){truncated=!0;break}for(let index=0;index<frame.length;index++){if(inspected>=TOPIC_COPY_LIMIT){truncated=!0;break}inspected++;const topic=readOwnDataValue(frame.source,String(index));if(topic===null||typeof topic!="object")continue;let cyclic=!1;for(let ancestor=frame.parent;ancestor;ancestor=ancestor.parent)if(ancestor.source===topic){cyclic=!0;break}if(cyclic)continue;const id=readOwnDataValue(topic,"id"),label=readOwnDataValue(topic,"label");if(typeof id!="string"||!id.trim()||typeof label!="string")continue;const children=readOwnDataValue(topic,"children"),childCount=arrayLength(children),copy={id,label,...childCount===void 0?{}:{children:[]}};frame.target.push(copy),owned.push(copy),childCount&&(frame.depth>=TOPIC_DEPTH_LIMIT?truncated=!0:queue.push({source:children,target:copy.children,depth:frame.depth+1,length:childCount,parent:{source:topic,parent:frame.parent}}))}}for(const copy of owned)copy.children&&Object.freeze(copy.children),Object.freeze(copy);return{topics:Object.freeze(topics),truncated}}export{snapshotMindMapTopics};
@@ -1,4 +1,4 @@
1
- import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraTopic}from'./mind-map-layout.js';export type{LyraTopic};export interface LyraMindMapEventMap{'lr-topic-select':CustomEvent<{topicId:string;}>;'lr-topic-toggle':CustomEvent<{topicId:string;expanded:boolean;}>;}
1
+ import type{LyraHierarchySource,LyraHierarchyQuery}from'../../../data-sources.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import{type LyraTopic}from'./mind-map-layout.js';export type{LyraTopic};export type MindMapSource=LyraHierarchySource<LyraTopic,LyraHierarchyQuery>;export interface LyraMindMapEventMap{'lr-topic-select':CustomEvent<{topicId:string;}>;'lr-topic-toggle':CustomEvent<{topicId:string;expanded:boolean;}>;}
2
2
  /**
3
3
  * `<lr-mind-map>` — a radial expandable topic tree (NotebookLM Mind Maps): a spatial overview of
4
4
  * a topic hierarchy where activating a topic drills in or hands the topic to the chat. Hierarchy,
@@ -17,6 +17,18 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
17
17
  * @event lr-topic-select - A *leaf* topic was activated. `detail: { topicId }`.
18
18
  * @event lr-topic-toggle - A parent topic was activated (or auto-expanded by keyboard descent).
19
19
  * `detail: { topicId, expanded }`.
20
+ * Provider treeSource is authoritative for topology, expansion and selection. Its complete
21
+ * preorder navigator reaches every key. The diagram is one connected subtree of currently
22
+ * mounted rows (at most301), and its notice discloses clipping; it never implies a clipped parent
23
+ * is a leaf. expandDepth and local expansion overrides apply only to legacy topics.
24
+ *
25
+ * @csspart source-diagram - The bounded connected subtree diagram in provider mode.
26
+ * @csspart source-list - The complete virtualized source navigator.
27
+ * @csspart source-row - An exact hierarchy row with global positional metadata.
28
+ * @csspart source-toggle - A source expand, collapse or retry action.
29
+ * @csspart source-label - A source topic label.
30
+ * @csspart source-status - Source loading, empty and global-count status.
31
+ * @csspart source-error - Source failure and retry status.
20
32
  * @csspart base - The wrapper.
21
33
  * @csspart svg - The single-tab-stop SVG focus target.
22
34
  * @csspart node - A topic node group.
@@ -25,6 +37,7 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
25
37
  * @csspart focus-ring - The keyboard focus ring, drawn from the moment the svg takes focus (the
26
38
  * first placed topic is seeded as the keyboard cursor) rather than only after the first arrow key.
27
39
  * @csspart live-region - The visually hidden announcement region.
40
+ * @csspart input-limit - A localized notice when the input safety boundary omits topics.
28
41
  * @csspart empty - The empty-state message, shown when `topics` is empty.
29
42
  * @csspart limit - The "showing N of M" notice, present only once the currently-visible topic
30
43
  * count exceeds the render cap. The rendered subset is a deterministic, connectivity-preserving,
@@ -37,14 +50,24 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
37
50
  * @status stable
38
51
  * @since 4.0.0
39
52
  */
40
- export declare class LyraMindMap extends LyraElement<LyraMindMapEventMap>{static styles:import("lit").CSSResultGroup[];static get observedAttributes():string[];private _topics;private topicsSource;
53
+ export declare class LyraMindMap extends LyraElement<LyraMindMapEventMap>{static styles:import("lit").CSSResultGroup[];static get observedAttributes():string[];private _treeSource?;private sourceVersion;private sourceWrapper?;private readonly sourceViewAuthority;private sourcePaint;private sourceDiagramScheduled;private sourceDiagramRows;private sourceDiagramCurrent;private readonly sourceControl;
54
+ /** Complete immutable provider preorder. Four 100-row pages and one focused row are retained;
55
+ * at most 301 navigator rows mount. The diagram shows one connected subtree from those rows,
56
+ * with provider child counts and expansion metadata. Nested value.children is never read.
57
+ * Reassign even the same source or call requestUpdate() to refresh. Unset restores topics.
58
+ * @default undefined */
59
+ get treeSource():MindMapSource|undefined;set treeSource(value:MindMapSource|undefined);
60
+ /** Reveal and focus any full-source key without emitting a topic event. */
61
+ revealSourceKey(key:string):Promise<boolean>;private sourceAuthority;private wrapSource;private clearSourceDiagram;requestUpdate(name?:PropertyKey,oldValue?:unknown):void;private selectSourceRow;private scheduleSourceDiagram;private _topics;private topicsSource;private inputTruncated;
41
62
  /** A single root sits at the center; multiple roots hang off an implicit center hub whose
42
63
  * visible text is `label`. A tree too large for one collection snapshot keeps its first
43
- * 50,000 topics, shallowest first, as `{ id, label, children }`. */
64
+ * 50,000 inspected positions, shallowest first, with at most 64 descendant levels, as
65
+ * descriptor-safe `{ id, label, children }` records. A separate input notice reports omitted
66
+ * branches without counting descendants beyond the boundary. */
44
67
  get topics():readonly LyraTopic[];set topics(value:readonly LyraTopic[]);
45
68
  /** Accessible name for the SVG group *and* the implicit hub's text; falls back to the localized
46
69
  * `mindMapLabel` when omitted. An explicitly empty override stays empty. */
47
70
  label?:string;
48
71
  /** Initial expansion depth (root + first ring). Expansion state is component-managed
49
72
  * afterward, keyed by topic id, and survives `topics` reassignment. */
50
- expandDepth:number;private svgEl?;private expandedOverrides;private focusedId;private liveText;private cachedLayout;private totalTopicCount;private topicsTruncated;private resizeObserver?;private resizeObserverDocument?;private resizeRafId?;private resizeRafOwner?;private resizeRafDocument?;private ownerRealmGeneration;private observedSize;private layoutInvalidated;private layoutContext;private announcementSink?;connectedCallback():void;private armResizeObserver;disconnectedCallback():void;adoptedCallback():void;private resetResizeWork;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void;private get effectiveExpandDepth();private isExpanded;private ringGapPx;private relayout;protected willUpdate(changed:PropertyValues):void;private setAnnouncement;private toggle;private activate;private siblingsOf;private childrenOf;private announce;private focusNodeById;private onKeyDown;private onFocusIn;private onNodeClick;private connectorControlPoint;private renderSemanticNode;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-mind-map':LyraMindMap;}}
73
+ expandDepth:number;private svgEl?;private expandedOverrides;private focusedId;private liveText;private cachedLayout;private totalTopicCount;private topicsTruncated;private resizeObserver?;private resizeObserverDocument?;private resizeRafId?;private resizeRafOwner?;private resizeRafDocument?;private ownerRealmGeneration;private observedSize;private layoutInvalidated;private layoutContext;private announcementSink?;connectedCallback():void;private armResizeObserver;disconnectedCallback():void;adoptedCallback():void;private resetResizeWork;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void;private get effectiveExpandDepth();private isExpanded;private ringGapPx;private laidOutInputs?;private layoutInputs;private topicLayout?;private relayout;protected willUpdate(changed:PropertyValues):void;private setAnnouncement;private toggle;private activate;private siblingsOf;private childrenOf;private announce;private focusNodeById;private onKeyDown;private onFocusIn;private onNodeClick;private connectorControlPoint;private renderSemanticNode;private renderInputLimit;render():TemplateResult;private renderDiagram;}declare global{interface HTMLElementTagNameMap{'lr-mind-map':LyraMindMap;}}