@aceshooting/lyra-ui 13.0.1 → 14.0.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 (421) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +18 -13
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity}from"../retrieval-identity.js";import{finiteCount}from"../../../internal/numbers.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{playIcon,pauseIcon}from"../../../internal/icons.js";import{styles}from"./knowledge-base.styles.js";import{LYRA_DEFAULT_knowledgeBaseActionsColumn,LYRA_DEFAULT_knowledgeBaseCreateSource,LYRA_DEFAULT_knowledgeBaseDeleteAction,LYRA_DEFAULT_knowledgeBaseDocumentCount,LYRA_DEFAULT_knowledgeBaseEmptyDescription,LYRA_DEFAULT_knowledgeBaseEmptyHeading,LYRA_DEFAULT_knowledgeBaseHeading,LYRA_DEFAULT_knowledgeBaseHealthColumn,LYRA_DEFAULT_knowledgeBaseHealthDegraded,LYRA_DEFAULT_knowledgeBaseHealthFailed,LYRA_DEFAULT_knowledgeBaseHealthHealthy,LYRA_DEFAULT_knowledgeBaseHealthUnknown,LYRA_DEFAULT_knowledgeBaseNameColumn,LYRA_DEFAULT_knowledgeBaseNeedsAttention,LYRA_DEFAULT_knowledgeBaseNeverSynced,LYRA_DEFAULT_knowledgeBasePauseAction,LYRA_DEFAULT_knowledgeBasePermissionColumn,LYRA_DEFAULT_knowledgeBasePermissionEditor,LYRA_DEFAULT_knowledgeBasePermissionOwner,LYRA_DEFAULT_knowledgeBasePermissionRestricted,LYRA_DEFAULT_knowledgeBasePermissionViewer,LYRA_DEFAULT_knowledgeBaseRowActionsLabel,LYRA_DEFAULT_knowledgeBaseSyncAction,LYRA_DEFAULT_knowledgeBaseSyncColumn,LYRA_DEFAULT_knowledgeBaseSyncError,LYRA_DEFAULT_knowledgeBaseSyncIdle,LYRA_DEFAULT_knowledgeBaseSyncPaused,LYRA_DEFAULT_knowledgeBaseSyncSynced,LYRA_DEFAULT_knowledgeBaseSyncSyncing,LYRA_DEFAULT_knowledgeBaseSyncedSources,LYRA_DEFAULT_knowledgeBaseSyncingSources,LYRA_DEFAULT_knowledgeBaseTotalSources,LYRA_DEFAULT_untitledSource}from"../../../internal/default-strings.generated.js";const SYNC_STATUS_VARIANT={idle:"neutral",syncing:"brand",paused:"warning",synced:"success",error:"danger"},HEALTH_VARIANT={healthy:"success",degraded:"warning",failed:"danger",unknown:"neutral"},PERMISSION_VARIANT={owner:"brand",editor:"neutral",viewer:"neutral",restricted:"warning"},ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function trashIcon(){return svg`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity}from"../retrieval-identity.js";import{finiteCount}from"../../../internal/numbers.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{playIcon,pauseIcon}from"../../../internal/icons.js";import{styles}from"./knowledge-base.styles.js";import{LYRA_DEFAULT_knowledgeBaseActionsColumn,LYRA_DEFAULT_knowledgeBaseCreateSource,LYRA_DEFAULT_knowledgeBaseDeleteAction,LYRA_DEFAULT_knowledgeBaseDocumentCount,LYRA_DEFAULT_knowledgeBaseEmptyDescription,LYRA_DEFAULT_knowledgeBaseEmptyHeading,LYRA_DEFAULT_knowledgeBaseHeading,LYRA_DEFAULT_knowledgeBaseHealthColumn,LYRA_DEFAULT_knowledgeBaseHealthDegraded,LYRA_DEFAULT_knowledgeBaseHealthFailed,LYRA_DEFAULT_knowledgeBaseHealthHealthy,LYRA_DEFAULT_knowledgeBaseHealthUnknown,LYRA_DEFAULT_knowledgeBaseNameColumn,LYRA_DEFAULT_knowledgeBaseNeedsAttention,LYRA_DEFAULT_knowledgeBaseNeverSynced,LYRA_DEFAULT_knowledgeBasePauseAction,LYRA_DEFAULT_knowledgeBasePermissionColumn,LYRA_DEFAULT_knowledgeBasePermissionEditor,LYRA_DEFAULT_knowledgeBasePermissionOwner,LYRA_DEFAULT_knowledgeBasePermissionRestricted,LYRA_DEFAULT_knowledgeBasePermissionViewer,LYRA_DEFAULT_knowledgeBaseRowActionsLabel,LYRA_DEFAULT_knowledgeBaseSyncAction,LYRA_DEFAULT_knowledgeBaseSyncColumn,LYRA_DEFAULT_knowledgeBaseSyncError,LYRA_DEFAULT_knowledgeBaseSyncIdle,LYRA_DEFAULT_knowledgeBaseSyncPaused,LYRA_DEFAULT_knowledgeBaseSyncSynced,LYRA_DEFAULT_knowledgeBaseSyncSyncing,LYRA_DEFAULT_knowledgeBaseSyncedSources,LYRA_DEFAULT_knowledgeBaseSyncingSources,LYRA_DEFAULT_knowledgeBaseTotalSources,LYRA_DEFAULT_untitledSource}from"../../../internal/default-strings.generated.js";const SYNC_STATUS_VARIANT={idle:"neutral",syncing:"brand",paused:"warning",synced:"success",error:"danger"},HEALTH_VARIANT={healthy:"success",degraded:"warning",failed:"danger",unknown:"neutral"},PERMISSION_VARIANT={owner:"brand",editor:"neutral",viewer:"neutral",restricted:"warning"},TABLE_EXPORT_PARTS=["name-cell:name-cell","source-name:source-name","source-type:source-type","sync-cell:sync-cell","sync-badge:sync-badge","sync-timestamp:sync-timestamp","sync-error:sync-error","health-cell:health-cell","health-badge:health-badge","document-count:document-count","permission-badge:permission-badge","actions-menu:actions-menu","actions-trigger:actions-trigger"].join(", "),ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function trashIcon(){return svg`
2
2
  <svg width="1em" height="1em" viewBox=${ICON_VIEW_BOX} fill="none" stroke="currentColor" stroke-width=${ICON_STROKE_WIDTH} stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
3
3
  <path d="M4 7h16"></path>
4
4
  <path d="M10 11v6"></path>
@@ -94,7 +94,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
94
94
  value=${numberFormat.format(attention)}
95
95
  ></lr-stat>
96
96
  </div>
97
- `}render(){const sources=this.normalizedSources,heading=this.label==null?this.localize("knowledgeBaseHeading"):this.label;return html`
97
+ `}render(){const sources=this.normalizedSources,heading=this.label==null?this.localize("knowledgeBaseHeading"):this.label,tableLabel=heading.trim()===""?this.localize("knowledgeBaseHeading"):heading;return html`
98
98
  <div part="base">
99
99
  <div part="toolbar">
100
100
  <h3 part="heading">${heading}</h3>
@@ -110,10 +110,11 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
110
110
  ${!this.hideSummary&&sources.length>0?this.renderSummary(sources):nothing}
111
111
  <lr-table
112
112
  part="table"
113
+ exportparts=${TABLE_EXPORT_PARTS}
113
114
  .columns=${this.tableColumns()}
114
115
  .rows=${sources}
115
116
  .rowKey=${row=>row.id}
116
- .accessibleLabel=${heading}
117
+ .accessibleLabel=${tableLabel}
117
118
  empty-heading=${this.localize("knowledgeBaseEmptyHeading")}
118
119
  empty-description=${this.localize("knowledgeBaseEmptyDescription",void 0)}
119
120
  @lr-row-click=${e=>e.stopPropagation()}
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{display:block}[part=base]{gap:var(--lr-space-m);flex-direction:column;display:flex}[part=toolbar]{justify-content:space-between;align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=heading]{font-size:var(--lr-font-size-lg);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);margin:0}[part=create-button]{flex:none}[part=summary]{gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=summary-stat]{flex:1 1 var(--lr-size-8rem);min-inline-size:0}[part=table]{inline-size:100%}[part=name-cell],[part=sync-cell],[part=health-cell]{gap:var(--lr-size-0-125rem);flex-direction:column;display:flex}[part=source-name]{font-weight:var(--lr-font-weight-medium);color:var(--lr-color-text)}[part=source-type],[part=sync-timestamp],[part=document-count]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet)}[part=sync-error]{font-size:var(--lr-font-size-sm);color:var(--lr-color-danger)}[part=sync-cell] lr-badge,[part=health-cell] lr-badge{align-self:flex-start}[part=actions-menu]{justify-content:flex-end;display:flex}[part=actions-trigger]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=actions-trigger]:hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent);color:var(--lr-color-text)}[part=actions-trigger]:active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=actions-trigger]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=actions-trigger] svg{display:block}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{display:block}[part=base]{gap:var(--lr-space-m);flex-direction:column;display:flex}[part=toolbar]{justify-content:space-between;align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=heading]{font-size:var(--lr-font-size-lg);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);margin:0}[part=create-button]{flex:none}[part=summary]{gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=summary-stat]{flex:1 1 var(--lr-size-8rem);min-inline-size:0}[part=table]{inline-size:100%;font:inherit}[part=table]::part(name-cell),[part=table]::part(sync-cell),[part=table]::part(health-cell){gap:var(--lr-size-0-125rem);flex-direction:column;display:flex}[part=table]::part(source-name){font-weight:var(--lr-font-weight-medium);color:var(--lr-color-text)}[part=table]::part(source-type),[part=table]::part(sync-timestamp),[part=table]::part(document-count){font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet)}[part=table]::part(sync-error){font-size:var(--lr-font-size-sm);color:var(--lr-color-danger)}[part=table]::part(sync-badge),[part=table]::part(health-badge){align-self:flex-start}[part=table]::part(actions-menu){font:inherit;justify-content:flex-end;display:flex}[part=table]::part(actions-trigger){box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;font:inherit;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=table]::part(actions-trigger):hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent);color:var(--lr-color-text)}[part=table]::part(actions-trigger):active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=table]::part(actions-trigger):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
@@ -205,7 +205,10 @@ private linkKey;
205
205
  private get computedDimmedNodeIds();
206
206
  /** The link-side mirror of `computedDimmedNodeIds` -- a link is dimmed whenever either endpoint
207
207
  * is, so unrelated edges dim along with unrelated nodes with no extra host wiring. */
208
- private get computedDimmedLinkIds();private togglePin;private requestPath;private onVisibilityChange;private onSearchInput;
208
+ private get computedDimmedLinkIds();private togglePin;private requestPath;private onVisibilityChange;
209
+ /** The composed legend owns this cancellable proposal. Contain it without changing whether its
210
+ * listeners accepted it, so the child can still assign, announce, and send its existing post event. */
211
+ private onBeforeVisibilityChange;private onSearchInput;
209
212
  /** Bound to `lr-entity-select` on the composed `lr-entity-card`/`lr-neighbor-list`. */
210
213
  private onEntityActivate;
211
214
  /** Selects `id` and opens its details popover without a click event to read a rect from --
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.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{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{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_graphExplorerFindPath,LYRA_DEFAULT_graphExplorerLabel,LYRA_DEFAULT_graphExplorerPin,LYRA_DEFAULT_graphExplorerPinned,LYRA_DEFAULT_graphExplorerPinnedHeading,LYRA_DEFAULT_graphExplorerSearchPlaceholder,LYRA_DEFAULT_graphExplorerSearchResultsLabel,LYRA_DEFAULT_graphExplorerUnpin,LYRA_DEFAULT_graphExplorerUnpinned,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings.generated.js";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.links=[],this.nodeTypes=[],this.communities=[],this.entityDetails={},this.pinnedNodeIds=[],this.path=[],this.hiddenTypes=[],this.selectedNodeId=null,this.renderer="svg",this.width=800,this.height=600,this.highlight="selection",this.searchQuery="",this.pinLiveText="",this.hoveredNodeId=null,this.activationGeneration=0,this.nodeById=new Map,this.linksByNodeId=new Map,this.degreeByNodeId=new Map,this.communityLabelById=new Map,this.onVisibilityChange=event=>{event.stopPropagation(),this.hiddenTypes=event.detail.hiddenTypes,this.emit("lr-hidden-types-change",{hiddenTypes:this.hiddenTypes})},this.onSearchInput=event=>{event.stopPropagation();const value=event.detail.value;this.searchQuery!==value&&(this.searchQuery=value,this.emit("lr-search-change",{query:value,matchCount:this.matchingNodes()?.length??0,matchCountExact:!0}))},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();this.setInternalSelectedNodeId(id),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 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.onPopoverHide=()=>{this.invalidateActivation(),this.trackedNodeEl=void 0,this.setInternalSelectedNodeId(null)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,graphExplorerFindPath:LYRA_DEFAULT_graphExplorerFindPath,graphExplorerLabel:LYRA_DEFAULT_graphExplorerLabel,graphExplorerPin:LYRA_DEFAULT_graphExplorerPin,graphExplorerPinned:LYRA_DEFAULT_graphExplorerPinned,graphExplorerPinnedHeading:LYRA_DEFAULT_graphExplorerPinnedHeading,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.ownedCollectionProperties=Object.freeze(["nodes","links","nodeTypes","communities","entityDetails","pinnedNodeIds","path","hiddenTypes"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-pin-change","lr-hidden-types-change"])}get graphModel(){const sources=this.normalizedGraphSources;return(!sources||sources[0]!==this.nodes||sources[1]!==this.links||sources[2]!==this.nodeTypes||sources[3]!==this.communities)&&(this.normalizedGraphSources=[this.nodes,this.links,this.nodeTypes,this.communities],this.normalizedGraphModel=normalizeGraphModel(this.nodes,this.links,this.nodeTypes,this.communities)),this.normalizedGraphModel}get canonicalPinnedNodeIds(){return canonicalIdentityList(this.pinnedNodeIds)}get canonicalHiddenTypes(){return canonicalIdentityList(this.hiddenTypes)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&this.resumePresetActivation()}syncAnnouncementSink(){!this.isConnected||this.announcementSink?.element.ownerDocument===this.ownerDocument||(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}willUpdate(changed){super.willUpdate(changed),(changed.has("nodes")||changed.has("links")||changed.has("communities"))&&this.rebuildDerivedCollections(),(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.searchQuery.trim()&&(changed.has("searchQuery")||changed.has("nodes")||changed.has("hiddenTypes")||changed.has("locale")||changed.has("strings"))&&this.announcementSink?.announce(this.searchResultAnnouncement())}updated(changed){if(super.updated(changed),!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 activatePresetWhenGraphReady(id,graph,generation){for(await graph.updateComplete;generation===this.activationGeneration&&this.isConnected&&graph.isConnected&&this.selectedNodeId===id&&graph.shadowRoot?.querySelector("lr-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}))}disconnectedCallback(){this.invalidateActivation(),this.pendingNodeId=void 0,this.trackedNodeEl=void 0,this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.invalidateActivation(),this.announcementSink?.release(),this.announcementSink=void 0,this.isConnected&&(this.syncAnnouncementSink(),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}isVisibleNode(id){const node=this.nodeById.get(id);return!!node&&(node.type==null||!this.canonicalHiddenTypes.includes(node.type))}canActivateNode(id){const node=this.graphModel.nodes.find(candidate=>candidate.id===id);return node?node.type==null||!this.canonicalHiddenTypes.includes(node.type):!this.hasUpdated&&this.graphModel.nodes.length===0}nodeLabel(id){return this.nodeById.get(id)?.label||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.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}matchingNodes(){const q=this.searchQuery.trim().toLocaleLowerCase(this.effectiveLocale);if(q)return this.graphModel.nodes.filter(node=>{const label=typeof node.label=="string"?node.label:"";return this.isVisibleNode(node.id)&&(node.id.toLocaleLowerCase(this.effectiveLocale).includes(q)||label.toLocaleLowerCase(this.effectiveLocale).includes(q))})}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.announcementSink?.announce(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})}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();rect&&this.openDetailAt(id,{x:rect.left+rect.width/2,y:rect.top+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.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(),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);return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state,query}from"lit/decorators.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{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{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_graphExplorerFindPath,LYRA_DEFAULT_graphExplorerLabel,LYRA_DEFAULT_graphExplorerPin,LYRA_DEFAULT_graphExplorerPinned,LYRA_DEFAULT_graphExplorerPinnedHeading,LYRA_DEFAULT_graphExplorerSearchPlaceholder,LYRA_DEFAULT_graphExplorerSearchResultsLabel,LYRA_DEFAULT_graphExplorerUnpin,LYRA_DEFAULT_graphExplorerUnpinned,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings.generated.js";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.links=[],this.nodeTypes=[],this.communities=[],this.entityDetails={},this.pinnedNodeIds=[],this.path=[],this.hiddenTypes=[],this.selectedNodeId=null,this.renderer="svg",this.width=800,this.height=600,this.highlight="selection",this.searchQuery="",this.pinLiveText="",this.hoveredNodeId=null,this.activationGeneration=0,this.nodeById=new Map,this.linksByNodeId=new Map,this.degreeByNodeId=new Map,this.communityLabelById=new Map,this.onVisibilityChange=event=>{event.stopPropagation(),this.hiddenTypes=event.detail.hiddenTypes,this.emit("lr-hidden-types-change",{hiddenTypes:this.hiddenTypes})},this.onBeforeVisibilityChange=event=>{event.stopPropagation()},this.onSearchInput=event=>{event.stopPropagation();const value=event.detail.value;this.searchQuery!==value&&(this.searchQuery=value,this.emit("lr-search-change",{query:value,matchCount:this.matchingNodes()?.length??0,matchCountExact:!0}))},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();this.setInternalSelectedNodeId(id),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 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.onPopoverHide=()=>{this.invalidateActivation(),this.trackedNodeEl=void 0,this.setInternalSelectedNodeId(null)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,graphExplorerFindPath:LYRA_DEFAULT_graphExplorerFindPath,graphExplorerLabel:LYRA_DEFAULT_graphExplorerLabel,graphExplorerPin:LYRA_DEFAULT_graphExplorerPin,graphExplorerPinned:LYRA_DEFAULT_graphExplorerPinned,graphExplorerPinnedHeading:LYRA_DEFAULT_graphExplorerPinnedHeading,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.ownedCollectionProperties=Object.freeze(["nodes","links","nodeTypes","communities","entityDetails","pinnedNodeIds","path","hiddenTypes"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-pin-change","lr-hidden-types-change"])}get graphModel(){const sources=this.normalizedGraphSources;return(!sources||sources[0]!==this.nodes||sources[1]!==this.links||sources[2]!==this.nodeTypes||sources[3]!==this.communities)&&(this.normalizedGraphSources=[this.nodes,this.links,this.nodeTypes,this.communities],this.normalizedGraphModel=normalizeGraphModel(this.nodes,this.links,this.nodeTypes,this.communities)),this.normalizedGraphModel}get canonicalPinnedNodeIds(){return canonicalIdentityList(this.pinnedNodeIds)}get canonicalHiddenTypes(){return canonicalIdentityList(this.hiddenTypes)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&this.resumePresetActivation()}syncAnnouncementSink(){!this.isConnected||this.announcementSink?.element.ownerDocument===this.ownerDocument||(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}willUpdate(changed){super.willUpdate(changed),(changed.has("nodes")||changed.has("links")||changed.has("communities"))&&this.rebuildDerivedCollections(),(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.searchQuery.trim()&&(changed.has("searchQuery")||changed.has("nodes")||changed.has("hiddenTypes")||changed.has("locale")||changed.has("strings"))&&this.announcementSink?.announce(this.searchResultAnnouncement())}updated(changed){if(super.updated(changed),!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 activatePresetWhenGraphReady(id,graph,generation){for(await graph.updateComplete;generation===this.activationGeneration&&this.isConnected&&graph.isConnected&&this.selectedNodeId===id&&graph.shadowRoot?.querySelector("lr-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}))}disconnectedCallback(){this.invalidateActivation(),this.pendingNodeId=void 0,this.trackedNodeEl=void 0,this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.invalidateActivation(),this.announcementSink?.release(),this.announcementSink=void 0,this.isConnected&&(this.syncAnnouncementSink(),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}isVisibleNode(id){const node=this.nodeById.get(id);return!!node&&(node.type==null||!this.canonicalHiddenTypes.includes(node.type))}canActivateNode(id){const node=this.graphModel.nodes.find(candidate=>candidate.id===id);return node?node.type==null||!this.canonicalHiddenTypes.includes(node.type):!this.hasUpdated&&this.graphModel.nodes.length===0}nodeLabel(id){return this.nodeById.get(id)?.label||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.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}matchingNodes(){const q=this.searchQuery.trim().toLocaleLowerCase(this.effectiveLocale);if(q)return this.graphModel.nodes.filter(node=>{const label=typeof node.label=="string"?node.label:"";return this.isVisibleNode(node.id)&&(node.id.toLocaleLowerCase(this.effectiveLocale).includes(q)||label.toLocaleLowerCase(this.effectiveLocale).includes(q))})}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.announcementSink?.announce(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})}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();rect&&this.openDetailAt(id,{x:rect.left+rect.width/2,y:rect.top+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.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(),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);return html`
2
2
  <div
3
3
  part="base"
4
4
  role=${groupRole??nothing}
@@ -17,6 +17,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
17
17
  part="legend"
18
18
  .types=${model.nodeTypes}
19
19
  .hiddenTypes=${hiddenTypes}
20
+ @lr-before-visibility-change=${this.onBeforeVisibilityChange}
20
21
  @lr-visibility-change=${this.onVisibilityChange}
21
22
  ></lr-graph-legend>
22
23
  </div>
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{block-size:var(--lr-canvas-reserved-height,var(--lr-size-24rem));display:block}[part=base]{gap:var(--lr-space-s);flex-direction:column;block-size:100%;min-block-size:0;min-inline-size:0;display:flex}[part=toolbar]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=search]{flex:1 1 var(--lr-size-12rem);min-inline-size:0}[part=search-results]{gap:var(--lr-size-2px);max-block-size:var(--lr-size-12rem);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex;overflow:clip auto}[part=search-result]{display:block}[part=search-result] button{box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);text-align:start;padding:var(--lr-space-xs) var(--lr-space-s);color:var(--lr-color-text);font:inherit;overflow-wrap:anywhere;cursor:pointer;background:0 0;border:none;display:block}[part=search-result] button:hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent)}[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]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=pinned-heading]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}[part=legend]{max-block-size:var(--lr-size-12rem);flex:0 auto;overflow:clip auto}[part=graph]{flex:auto;min-block-size:0;inline-size:100%;display:block}[part=detail-card]{max-inline-size:min(var(--lr-popover-viewport-clamp), var(--lr-size-24rem))}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{block-size:var(--lr-canvas-reserved-height,var(--lr-size-24rem));--_lr-knowledge-graph-explorer-detail-clamp:var(--lr-popover-viewport-clamp);display:block}[part=base]{gap:var(--lr-space-s);flex-direction:column;block-size:100%;min-block-size:0;min-inline-size:0;display:flex}[part=toolbar]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=search]{flex:1 1 var(--lr-size-12rem);min-inline-size:0}[part=search-results]{gap:var(--lr-size-2px);max-block-size:var(--lr-size-12rem);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex;overflow:clip auto}[part=search-result]{display:block}[part=search-result] button{box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);text-align:start;padding:var(--lr-space-xs) var(--lr-space-s);color:var(--lr-color-text);font:inherit;overflow-wrap:anywhere;cursor:pointer;background:0 0;border:none;display:block}[part=search-result] button:hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent)}[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]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=pinned-heading]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}[part=legend]{max-block-size:var(--lr-size-12rem);flex:0 auto;overflow:clip auto}[part=graph]{flex:auto;min-block-size:0;inline-size:100%;display:block}[part=detail-card]{max-inline-size:min(var(--_lr-knowledge-graph-explorer-detail-clamp), var(--lr-size-24rem))}`;export{styles};
@@ -51,10 +51,13 @@ provenance?:LyraProvenance;}type MemoryScope='short-term'|'long-term';export int
51
51
  * header, only rendered while `longTerm` is non-empty) -- a bulk, more consequential action kept
52
52
  * distinct from the per-item `remove`.
53
53
  *
54
- * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
55
- * collection and reassign it after changes; mutating the assigned array does not update the view.
56
- * Blank memory ids and later duplicates within each scope are ignored before rendering, counts,
57
- * focus recovery, confirmation state, or actions. The first item for an id wins in that scope.
54
+ * Public collection sequences are bounded, frozen snapshots. Admitted memory source identities
55
+ * and provenance remain opaque while descriptor-safe projections copy display and action fields
56
+ * once; later rendering, event emission, and controlled-focus recovery never reread a source row.
57
+ * Create a new collection and reassign it after changes; mutating the assigned array does not
58
+ * update the view. Blank memory ids and later duplicates within each scope are ignored before
59
+ * rendering, counts, focus recovery, confirmation state, or actions. The first item for an id
60
+ * wins in that scope.
58
61
  *
59
62
  * @customElement lr-memory-panel
60
63
  * @event lr-add - A pending "add to long-term memory" action was approved. `detail: { memory }` --
@@ -96,7 +99,11 @@ provenance?:LyraProvenance;}type MemoryScope='short-term'|'long-term';export int
96
99
  * @status stable
97
100
  * @since 4.1.0
98
101
  */
99
- export declare class LyraMemoryPanel extends LyraElement<LyraMemoryPanelEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
102
+ export declare class LyraMemoryPanel extends LyraElement<LyraMemoryPanelEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
103
+ /** Memory source records can contain opaque provenance retained for the public add event. */
104
+ protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
105
+ /** The admitted memory is opaque caller state inside the otherwise frozen add envelope. */
106
+ protected static readonly identityEventDetailProperties:Readonly<{'lr-add':readonly string[];}>;
100
107
  /** Ephemeral, working-context items. Controlled and never mutated by this component. */
101
108
  shortTerm:readonly LyraMemoryItem[];
102
109
  /** Persisted memories. Controlled and never mutated by this component. */
@@ -108,7 +115,9 @@ thresholds:LyraScoreThresholds;
108
115
  /** Fallback overall group name. A non-empty host `aria-label` makes the host the sole owner; an
109
116
  * explicitly empty host label stays empty on the group, and so does an explicitly empty
110
117
  * `label`. */
111
- label?:string;private expandedIds;private pending;private readonly idBase;private pendingControlledFocus;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private captureControlledFocus;private normalizeMemories;private get normalizedShortTerm();private get normalizedLongTerm();private memoriesForScope;private itemKey;private itemBodyId;private tier;private toggleExpand;private startItemPending;private startForgetAllPending;
118
+ label?:string;private expandedIds;private pending;private readonly idBase;private readonly canonicalMemoriesBySource;private pendingControlledFocus;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private captureControlledFocus;private canonicalMemoriesFor;
119
+ /** Never reproject a prior retained collection during controlled focus recovery. */
120
+ private cachedCanonicalMemoriesFor;private get normalizedShortTerm();private get normalizedLongTerm();private memoriesForScope;private itemKey;private itemBodyId;private tier;private toggleExpand;private startItemPending;private startForgetAllPending;
112
121
  /**
113
122
  * The action button that opens a confirmation is destroyed by the very render that opens it, so a
114
123
  * keyboard user who activated it would be dropped back onto `<body>` -- top of the page, nothing
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity}from"../retrieval-identity.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import"../provenance-panel/provenance-panel.class.js";import"../../agent-tools/confirm-bar/confirm-bar.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./memory-panel.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_approve,LYRA_DEFAULT_citationHighConfidence,LYRA_DEFAULT_citationLowConfidence,LYRA_DEFAULT_citationMediumConfidence,LYRA_DEFAULT_collapse,LYRA_DEFAULT_deny,LYRA_DEFAULT_details,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_map,LYRA_DEFAULT_memoryPanelAdd,LYRA_DEFAULT_memoryPanelAddWithContext,LYRA_DEFAULT_memoryPanelConfirmAddHeading,LYRA_DEFAULT_memoryPanelConfirmForgetBody,LYRA_DEFAULT_memoryPanelConfirmForgetHeading,LYRA_DEFAULT_memoryPanelConfirmRemoveHeading,LYRA_DEFAULT_memoryPanelForgetAll,LYRA_DEFAULT_memoryPanelLabel,LYRA_DEFAULT_memoryPanelLongTermHeading,LYRA_DEFAULT_memoryPanelShortTermHeading,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_remove,LYRA_DEFAULT_removeWithContext,LYRA_DEFAULT_restore,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_showLess,LYRA_DEFAULT_showMore}from"../../../internal/default-strings.generated.js";const CONFIRM_HEADING_KEY={add:"memoryPanelConfirmAddHeading",remove:"memoryPanelConfirmRemoveHeading","forget-all":"memoryPanelConfirmForgetHeading"},TIER_LABEL_KEY={high:"citationHighConfidence",medium:"citationMediumConfidence",low:"citationLowConfidence"},TIER_TONE={high:"success",medium:"warning",low:"danger"};class LyraMemoryPanel extends LyraElement{constructor(){super(...arguments),this.shortTerm=[],this.longTerm=[],this.types=[],this.thresholds={high:.75,medium:.5},this.expandedIds=new Set,this.pending=null,this.idBase=nextId("memory-panel")}static{this.defaultStrings={...super.defaultStrings,approve:LYRA_DEFAULT_approve,citationHighConfidence:LYRA_DEFAULT_citationHighConfidence,citationLowConfidence:LYRA_DEFAULT_citationLowConfidence,citationMediumConfidence:LYRA_DEFAULT_citationMediumConfidence,collapse:LYRA_DEFAULT_collapse,deny:LYRA_DEFAULT_deny,details:LYRA_DEFAULT_details,fieldRequired:LYRA_DEFAULT_fieldRequired,map:LYRA_DEFAULT_map,memoryPanelAdd:LYRA_DEFAULT_memoryPanelAdd,memoryPanelAddWithContext:LYRA_DEFAULT_memoryPanelAddWithContext,memoryPanelConfirmAddHeading:LYRA_DEFAULT_memoryPanelConfirmAddHeading,memoryPanelConfirmForgetBody:LYRA_DEFAULT_memoryPanelConfirmForgetBody,memoryPanelConfirmForgetHeading:LYRA_DEFAULT_memoryPanelConfirmForgetHeading,memoryPanelConfirmRemoveHeading:LYRA_DEFAULT_memoryPanelConfirmRemoveHeading,memoryPanelForgetAll:LYRA_DEFAULT_memoryPanelForgetAll,memoryPanelLabel:LYRA_DEFAULT_memoryPanelLabel,memoryPanelLongTermHeading:LYRA_DEFAULT_memoryPanelLongTermHeading,memoryPanelShortTermHeading:LYRA_DEFAULT_memoryPanelShortTermHeading,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,remove:LYRA_DEFAULT_remove,removeWithContext:LYRA_DEFAULT_removeWithContext,restore:LYRA_DEFAULT_restore,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,showLess:LYRA_DEFAULT_showLess,showMore:LYRA_DEFAULT_showMore}}static{this.ownedCollectionProperties=Object.freeze(["shortTerm","longTerm","types"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-add"])}willUpdate(changed){if(super.willUpdate(changed),this.captureControlledFocus(changed),!this.pending)return;if(this.pending.kind==="forget-all"){changed.has("longTerm")&&(this.pending=null);return}if(!changed.has("shortTerm")&&!changed.has("longTerm"))return;this.memoriesForScope(this.pending.scope).includes(this.pending.item)||(this.pending=null)}updated(changed){super.updated(changed);const pending=this.pendingControlledFocus;if(pending!==void 0){if(this.pendingControlledFocus=void 0,pending==="base"){this.renderRoot.querySelector('[part="base"]')?.focus();return}if(pending==="forget-all"){const button=this.renderRoot.querySelector('[part="forget-all-button"]');button?button.focus():this.renderRoot.querySelector('[part="base"]')?.focus();return}this.refocusItem(pending.scope,pending.index)}}captureControlledFocus(changed){if(!changed.has("shortTerm")&&!changed.has("longTerm"))return;const active=activeElementIn(this.shadowRoot);if(!active)return;const row=active.closest('[part="item"]');if(row){const scope=row.dataset.scope;if(!scope)return;const property2=scope==="short-term"?"shortTerm":"longTerm";if(!changed.has(property2))return;const oldIndex=[...this.renderRoot.querySelectorAll(`[part="section"][data-scope="${scope}"] [part="item"]`)].indexOf(row),focusedItem=this.normalizeMemories(changed.get(property2)??[])[oldIndex],nextItems=this.memoriesForScope(scope),survivingIndex=focusedItem?nextItems.findIndex(item=>item.id===focusedItem.id):-1;if(survivingIndex===oldIndex)return;nextItems.length===0&&this.normalizedShortTerm.length===0&&this.normalizedLongTerm.length===0?this.pendingControlledFocus="base":this.pendingControlledFocus={scope,index:survivingIndex>=0?survivingIndex:Math.min(Math.max(oldIndex,0),Math.max(0,nextItems.length-1))};return}if(active.getAttribute("part")==="forget-all-confirm"&&changed.has("longTerm")){this.pendingControlledFocus=this.normalizedLongTerm.length===0?"base":"forget-all";return}active.getAttribute("part")==="forget-all-button"&&changed.has("longTerm")&&this.normalizedLongTerm.length===0&&(this.pendingControlledFocus="base")}normalizeMemories(value){return firstByRetrievalIdentity(Array.isArray(value)?value:[],memory=>memory.id).filter(memory=>typeof memory.text=="string"&&memory.text.trim().length>0)}get normalizedShortTerm(){return this.normalizeMemories(this.shortTerm)}get normalizedLongTerm(){return this.normalizeMemories(this.longTerm)}memoriesForScope(scope){return scope==="short-term"?this.normalizedShortTerm:this.normalizedLongTerm}itemKey(item,scope){return`${scope}\0${item.id}`}itemBodyId(scope,index){return`${this.idBase}-${scope}-${index}`}tier(score){return score>=this.thresholds.high?"high":score>=this.thresholds.medium?"medium":"low"}toggleExpand(item,scope){const key=this.itemKey(item,scope),next=new Set(this.expandedIds),expanded=!next.has(key);expanded?next.add(key):next.delete(key),this.expandedIds=next,this.emit("lr-expand",{memoryId:item.id,scope,expanded})}startItemPending(kind,item,scope){this.pending={kind,item,scope},this.focusPendingConfirmation()}startForgetAllPending(){this.pending={kind:"forget-all",longTerm:this.longTerm},this.focusPendingConfirmation()}focusPendingConfirmation(){const started=this.pending;this.updateComplete.then(async()=>{const bar=this.renderRoot.querySelector("lr-confirm-bar");if(!bar)return;await bar.updateComplete;const deny=bar.shadowRoot?.querySelector('[part="deny-button"]');await deny?.updateComplete,!(this.pending!==started||!bar.isConnected)&&(deny??bar.shadowRoot?.querySelector('[part="status"]'))?.focus()})}onConfirmKeyDown(event,cancel){if(event.key!=="Escape")return;const before=this.pending;cancel(),this.pending!==before&&event.stopPropagation()}refocusItem(scope,index){this.updateComplete.then(()=>{const rows=[...this.renderRoot.querySelectorAll(`[part="section"][data-scope="${scope}"] [part="item"]`)];(rows[Math.min(index,rows.length-1)]??this.renderRoot.querySelector('[part="item"]')??this.renderRoot.querySelector('[part="base"]'))?.focus()})}resolveItemDecision(p,approved){if(this.pending!==p)return;const index=this.memoriesForScope(p.scope).indexOf(p.item);index<0||(this.pending=null,approved&&(p.kind==="add"?this.emit("lr-add",{memory:p.item}):this.emit("lr-remove",{memoryId:p.item.id,scope:p.scope})),this.refocusItem(p.scope,index))}resolveForgetAllDecision(pending,approved){this.pending!==pending||this.longTerm!==pending.longTerm||(this.pending=null,approved&&this.emit("lr-forget"),this.updateComplete.then(()=>{(this.renderRoot.querySelector('[part="forget-all-button"]')??this.renderRoot.querySelector('[part="item"]'))?.focus()}))}renderConfidence(item){if(item.confidence==null)return nothing;const tier=this.tier(item.confidence);return html`<span part="confidence" data-tone=${TIER_TONE[tier]}
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import"../provenance-panel/provenance-panel.class.js";import"../../agent-tools/confirm-bar/confirm-bar.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./memory-panel.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_approve,LYRA_DEFAULT_citationHighConfidence,LYRA_DEFAULT_citationLowConfidence,LYRA_DEFAULT_citationMediumConfidence,LYRA_DEFAULT_collapse,LYRA_DEFAULT_deny,LYRA_DEFAULT_details,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_map,LYRA_DEFAULT_memoryPanelAdd,LYRA_DEFAULT_memoryPanelAddWithContext,LYRA_DEFAULT_memoryPanelConfirmAddHeading,LYRA_DEFAULT_memoryPanelConfirmForgetBody,LYRA_DEFAULT_memoryPanelConfirmForgetHeading,LYRA_DEFAULT_memoryPanelConfirmRemoveHeading,LYRA_DEFAULT_memoryPanelForgetAll,LYRA_DEFAULT_memoryPanelLabel,LYRA_DEFAULT_memoryPanelLongTermHeading,LYRA_DEFAULT_memoryPanelShortTermHeading,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_remove,LYRA_DEFAULT_removeWithContext,LYRA_DEFAULT_restore,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_showLess,LYRA_DEFAULT_showMore}from"../../../internal/default-strings.generated.js";const MAX_PROJECTED_MEMORY_ITEMS=1e4,EMPTY_CANONICAL_MEMORIES=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function valueOfDescriptor(descriptor){return descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectMemory(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),textDescriptor=descriptorValue(value,"text"),confidenceDescriptor=descriptorValue(value,"confidence"),provenanceDescriptor=descriptorValue(value,"provenance");if([idDescriptor,textDescriptor,confidenceDescriptor,provenanceDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),text=valueOfDescriptor(textDescriptor);if(typeof id!="string"||id.trim().length===0||typeof text!="string"||text.trim().length===0)return;const confidence=valueOfDescriptor(confidenceDescriptor),provenance=valueOfDescriptor(provenanceDescriptor);return Object.freeze({source:value,id,text,...typeof confidence=="number"&&Number.isFinite(confidence)?{confidence}:{},...provenance===void 0?{}:{provenance}})}catch{return}}function projectMemories(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_MEMORIES;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_MEMORIES;const memories=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_MEMORY_ITEMS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const memory=projectMemory(descriptor.value);!memory||seen.has(memory.id)||(seen.add(memory.id),memories.push(memory))}return Object.freeze(memories)}catch{return EMPTY_CANONICAL_MEMORIES}}const CONFIRM_HEADING_KEY={add:"memoryPanelConfirmAddHeading",remove:"memoryPanelConfirmRemoveHeading","forget-all":"memoryPanelConfirmForgetHeading"},TIER_LABEL_KEY={high:"citationHighConfidence",medium:"citationMediumConfidence",low:"citationLowConfidence"},TIER_TONE={high:"success",medium:"warning",low:"danger"};class LyraMemoryPanel extends LyraElement{constructor(){super(...arguments),this.shortTerm=[],this.longTerm=[],this.types=[],this.thresholds={high:.75,medium:.5},this.expandedIds=new Set,this.pending=null,this.idBase=nextId("memory-panel"),this.canonicalMemoriesBySource=new WeakMap}static{this.defaultStrings={...super.defaultStrings,approve:LYRA_DEFAULT_approve,citationHighConfidence:LYRA_DEFAULT_citationHighConfidence,citationLowConfidence:LYRA_DEFAULT_citationLowConfidence,citationMediumConfidence:LYRA_DEFAULT_citationMediumConfidence,collapse:LYRA_DEFAULT_collapse,deny:LYRA_DEFAULT_deny,details:LYRA_DEFAULT_details,fieldRequired:LYRA_DEFAULT_fieldRequired,map:LYRA_DEFAULT_map,memoryPanelAdd:LYRA_DEFAULT_memoryPanelAdd,memoryPanelAddWithContext:LYRA_DEFAULT_memoryPanelAddWithContext,memoryPanelConfirmAddHeading:LYRA_DEFAULT_memoryPanelConfirmAddHeading,memoryPanelConfirmForgetBody:LYRA_DEFAULT_memoryPanelConfirmForgetBody,memoryPanelConfirmForgetHeading:LYRA_DEFAULT_memoryPanelConfirmForgetHeading,memoryPanelConfirmRemoveHeading:LYRA_DEFAULT_memoryPanelConfirmRemoveHeading,memoryPanelForgetAll:LYRA_DEFAULT_memoryPanelForgetAll,memoryPanelLabel:LYRA_DEFAULT_memoryPanelLabel,memoryPanelLongTermHeading:LYRA_DEFAULT_memoryPanelLongTermHeading,memoryPanelShortTermHeading:LYRA_DEFAULT_memoryPanelShortTermHeading,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,remove:LYRA_DEFAULT_remove,removeWithContext:LYRA_DEFAULT_removeWithContext,restore:LYRA_DEFAULT_restore,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,showLess:LYRA_DEFAULT_showLess,showMore:LYRA_DEFAULT_showMore}}static{this.ownedCollectionProperties=Object.freeze(["shortTerm","longTerm","types"])}static{this.identityCollectionProperties=Object.freeze(["shortTerm","longTerm"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-add"])}static{this.identityEventDetailProperties=Object.freeze({"lr-add":Object.freeze(["memory"])})}willUpdate(changed){super.willUpdate(changed),this.captureControlledFocus(changed);const pending=this.pending;if(!pending)return;if(pending.kind==="forget-all"){changed.has("longTerm")&&(this.pending=null);return}if(!changed.has("shortTerm")&&!changed.has("longTerm"))return;const current=this.memoriesForScope(pending.scope).find(item=>item.source===pending.item.source);if(!current){this.pending=null;return}current!==pending.item&&(pending.item=current)}updated(changed){super.updated(changed);const pending=this.pendingControlledFocus;if(pending!==void 0){if(this.pendingControlledFocus=void 0,pending==="base"){this.renderRoot.querySelector('[part="base"]')?.focus();return}if(pending==="forget-all"){const button=this.renderRoot.querySelector('[part="forget-all-button"]');button?button.focus():this.renderRoot.querySelector('[part="base"]')?.focus();return}this.refocusItem(pending.scope,pending.index)}}captureControlledFocus(changed){if(!changed.has("shortTerm")&&!changed.has("longTerm"))return;const active=activeElementIn(this.shadowRoot);if(!active)return;const row=active.closest('[part="item"]');if(row){const scope=row.dataset.scope;if(!scope)return;const property2=scope==="short-term"?"shortTerm":"longTerm";if(!changed.has(property2))return;const oldIndex=[...this.renderRoot.querySelectorAll(`[part="section"][data-scope="${scope}"] [part="item"]`)].indexOf(row),focusedItem=this.cachedCanonicalMemoriesFor(changed.get(property2))[oldIndex],nextItems=this.memoriesForScope(scope),survivingIndex=focusedItem?nextItems.findIndex(item=>item.id===focusedItem.id):-1;if(survivingIndex===oldIndex)return;nextItems.length===0&&this.normalizedShortTerm.length===0&&this.normalizedLongTerm.length===0?this.pendingControlledFocus="base":this.pendingControlledFocus={scope,index:survivingIndex>=0?survivingIndex:Math.min(Math.max(oldIndex,0),Math.max(0,nextItems.length-1))};return}if(active.getAttribute("part")==="forget-all-confirm"&&changed.has("longTerm")){this.pendingControlledFocus=this.normalizedLongTerm.length===0?"base":"forget-all";return}active.getAttribute("part")==="forget-all-button"&&changed.has("longTerm")&&this.normalizedLongTerm.length===0&&(this.pendingControlledFocus="base")}canonicalMemoriesFor(source){if(source===null||typeof source!="object")return EMPTY_CANONICAL_MEMORIES;const cached=this.canonicalMemoriesBySource.get(source);if(cached)return cached;const memories=projectMemories(source);return this.canonicalMemoriesBySource.set(source,memories),memories}cachedCanonicalMemoriesFor(source){return source!==null&&typeof source=="object"?this.canonicalMemoriesBySource.get(source)??EMPTY_CANONICAL_MEMORIES:EMPTY_CANONICAL_MEMORIES}get normalizedShortTerm(){return this.canonicalMemoriesFor(this.shortTerm)}get normalizedLongTerm(){return this.canonicalMemoriesFor(this.longTerm)}memoriesForScope(scope){return scope==="short-term"?this.normalizedShortTerm:this.normalizedLongTerm}itemKey(item,scope){return`${scope}\0${item.id}`}itemBodyId(scope,index){return`${this.idBase}-${scope}-${index}`}tier(score){return score>=this.thresholds.high?"high":score>=this.thresholds.medium?"medium":"low"}toggleExpand(item,scope){const key=this.itemKey(item,scope),next=new Set(this.expandedIds),expanded=!next.has(key);expanded?next.add(key):next.delete(key),this.expandedIds=next,this.emit("lr-expand",{memoryId:item.id,scope,expanded})}startItemPending(kind,item,scope){this.pending={kind,item,scope},this.focusPendingConfirmation()}startForgetAllPending(){this.pending={kind:"forget-all",longTerm:this.longTerm},this.focusPendingConfirmation()}focusPendingConfirmation(){const started=this.pending;this.updateComplete.then(async()=>{const bar=this.renderRoot.querySelector("lr-confirm-bar");if(!bar)return;await bar.updateComplete;const deny=bar.shadowRoot?.querySelector('[part="deny-button"]');await deny?.updateComplete,!(this.pending!==started||!bar.isConnected)&&(deny??bar.shadowRoot?.querySelector('[part="status"]'))?.focus()})}onConfirmKeyDown(event,cancel){if(event.key!=="Escape")return;const before=this.pending;cancel(),this.pending!==before&&event.stopPropagation()}refocusItem(scope,index){this.updateComplete.then(()=>{const rows=[...this.renderRoot.querySelectorAll(`[part="section"][data-scope="${scope}"] [part="item"]`)];(rows[Math.min(index,rows.length-1)]??this.renderRoot.querySelector('[part="item"]')??this.renderRoot.querySelector('[part="base"]'))?.focus()})}resolveItemDecision(p,approved){if(this.pending!==p)return;const index=this.memoriesForScope(p.scope).indexOf(p.item);index<0||(this.pending=null,approved&&(p.kind==="add"?this.emit("lr-add",{memory:p.item.source}):this.emit("lr-remove",{memoryId:p.item.id,scope:p.scope})),this.refocusItem(p.scope,index))}resolveForgetAllDecision(pending,approved){this.pending!==pending||this.longTerm!==pending.longTerm||(this.pending=null,approved&&this.emit("lr-forget"),this.updateComplete.then(()=>{(this.renderRoot.querySelector('[part="forget-all-button"]')??this.renderRoot.querySelector('[part="item"]'))?.focus()}))}renderConfidence(item){if(item.confidence==null)return nothing;const tier=this.tier(item.confidence);return html`<span part="confidence" data-tone=${TIER_TONE[tier]}
2
2
  >${this.localize(TIER_LABEL_KEY[tier])}</span
3
3
  >`}renderItemConfirm(p){return html`
4
4
  <lr-confirm-bar
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity}from"../retrieval-identity.js";import{expandIcon}from"../../../internal/icons.js";import{finiteCount}from"../../../internal/numbers.js";import{getCollator,getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import"../../layout/virtual-list/virtual-list.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./neighbor-list.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_neighborDirectionBoth,LYRA_DEFAULT_neighborDirectionIn,LYRA_DEFAULT_neighborDirectionOut,LYRA_DEFAULT_neighborExpand,LYRA_DEFAULT_neighborGroupHeader,LYRA_DEFAULT_neighborListEmpty,LYRA_DEFAULT_neighborListLabel,LYRA_DEFAULT_neighborRowLabel}from"../../../internal/default-strings.generated.js";class LyraNeighborList extends LyraElement{constructor(){super(...arguments),this.rows=[],this.groupByRelation=!1,this.expandable=!1,this.virtualizeAt=100,this.renderRow=item=>this.renderNeighborRow(item)}static{this.defaultStrings={...super.defaultStrings,neighborDirectionBoth:LYRA_DEFAULT_neighborDirectionBoth,neighborDirectionIn:LYRA_DEFAULT_neighborDirectionIn,neighborDirectionOut:LYRA_DEFAULT_neighborDirectionOut,neighborExpand:LYRA_DEFAULT_neighborExpand,neighborGroupHeader:LYRA_DEFAULT_neighborGroupHeader,neighborListEmpty:LYRA_DEFAULT_neighborListEmpty,neighborListLabel:LYRA_DEFAULT_neighborListLabel,neighborRowLabel:LYRA_DEFAULT_neighborRowLabel}}static{this.ownedCollectionProperties=Object.freeze(["rows"])}static{this.styles=[LyraElement.styles,styles]}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,100)}sortedRows(){const rows=firstByRetrievalIdentity(this.rows,row=>row?.node?.id);return this.groupByRelation?rows.sort((a,b)=>getCollator(this.effectiveLocale).compare(a.relation,b.relation)):rows}groups(sorted){if(!this.groupByRelation)return;const groups=[],counts=new Map;for(const row of sorted)counts.set(row.relation,(counts.get(row.relation)??0)+1);const numberFormat=getNumberFormat(this.effectiveLocale);let lastRelation;return sorted.forEach((row,i)=>{if(row.relation!==lastRelation){const count=numberFormat.format(counts.get(row.relation)??0);groups.push({key:row.relation,label:this.localize("neighborGroupHeader",void 0,{relation:row.relation,count}),startIndex:i}),lastRelation=row.relation}}),groups}directionGlyph(direction){return direction==="both"?"\u2194":direction==="out"?"\u2192":"\u2190"}directionText(direction){return this.localize(direction==="in"?"neighborDirectionIn":direction==="out"?"neighborDirectionOut":"neighborDirectionBoth")}renderNeighborRow(row){const nodeLabel=row.node.label||row.node.id,directionText=this.directionText(row.direction),accessibleName=this.localize("neighborRowLabel",void 0,{label:nodeLabel,relation:row.relation,direction:directionText}),meta=[typeof row.node.type=="string"&&row.node.type.trim()!==""?row.node.type:void 0,row.node.degree!=null?getNumberFormat(this.effectiveLocale).format(finiteCount(row.node.degree)):void 0].filter(v=>typeof v=="string"&&v!==""),metaText=getListFormat(this.effectiveLocale,{style:"short",type:"unit"}).format(meta);return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity}from"../retrieval-identity.js";import{expandIcon}from"../../../internal/icons.js";import{finiteCount}from"../../../internal/numbers.js";import{getCollator,getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import"../../layout/virtual-list/virtual-list.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./neighbor-list.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_neighborDirectionBoth,LYRA_DEFAULT_neighborDirectionIn,LYRA_DEFAULT_neighborDirectionOut,LYRA_DEFAULT_neighborExpand,LYRA_DEFAULT_neighborGroupHeader,LYRA_DEFAULT_neighborListEmpty,LYRA_DEFAULT_neighborListLabel,LYRA_DEFAULT_neighborRowLabel}from"../../../internal/default-strings.generated.js";class LyraNeighborList extends LyraElement{constructor(){super(...arguments),this.rows=[],this.groupByRelation=!1,this.expandable=!1,this.virtualizeAt=100,this.renderRow=item=>this.renderNeighborRow(item)}static{this.defaultStrings={...super.defaultStrings,neighborDirectionBoth:LYRA_DEFAULT_neighborDirectionBoth,neighborDirectionIn:LYRA_DEFAULT_neighborDirectionIn,neighborDirectionOut:LYRA_DEFAULT_neighborDirectionOut,neighborExpand:LYRA_DEFAULT_neighborExpand,neighborGroupHeader:LYRA_DEFAULT_neighborGroupHeader,neighborListEmpty:LYRA_DEFAULT_neighborListEmpty,neighborListLabel:LYRA_DEFAULT_neighborListLabel,neighborRowLabel:LYRA_DEFAULT_neighborRowLabel}}static{this.ownedCollectionProperties=Object.freeze(["rows"])}static{this.styles=[LyraElement.styles,styles]}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,100)}sortedRows(){const rows=firstByRetrievalIdentity(this.rows,row=>row?.node?.id);return this.groupByRelation?rows.sort((a,b)=>getCollator(this.effectiveLocale).compare(a.relation,b.relation)):rows}groups(sorted){if(!this.groupByRelation)return;const groups=[],counts=new Map;for(const row of sorted)counts.set(row.relation,(counts.get(row.relation)??0)+1);const numberFormat=getNumberFormat(this.effectiveLocale);let lastRelation;return sorted.forEach((row,i)=>{if(row.relation!==lastRelation){const count=numberFormat.format(counts.get(row.relation)??0);groups.push({key:row.relation,label:this.localize("neighborGroupHeader",void 0,{relation:row.relation,count}),startIndex:i}),lastRelation=row.relation}}),groups}directionGlyph(direction){return direction==="both"?"":direction==="out"?"":""}directionText(direction){return this.localize(direction==="in"?"neighborDirectionIn":direction==="out"?"neighborDirectionOut":"neighborDirectionBoth")}renderNeighborRow(row){const nodeLabel=row.node.label||row.node.id,directionText=this.directionText(row.direction),accessibleName=this.localize("neighborRowLabel",void 0,{label:nodeLabel,relation:row.relation,direction:directionText}),meta=[typeof row.node.type=="string"&&row.node.type.trim()!==""?row.node.type:void 0,row.node.degree!=null?getNumberFormat(this.effectiveLocale).format(finiteCount(row.node.degree)):void 0].filter(v=>typeof v=="string"&&v!==""),metaText=getListFormat(this.effectiveLocale,{style:"short",type:"unit"}).format(meta);return html`
2
2
  <button
3
3
  part="node-label"
4
4
  type="button"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{display:block}[part=row],lr-virtual-list::part(row){align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-xs);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);display:flex}[part=node-label],lr-virtual-list::part(node-label){align-items:baseline;gap:var(--lr-space-xs);box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-size-2px) 0;color:var(--lr-color-text);font:inherit;text-align:start;cursor:pointer;background:0 0;border:none;flex:auto;display:flex}[part=node-label]:focus-visible,lr-virtual-list::part(node-label):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=node-label]:hover,lr-virtual-list::part(node-label):hover{background:var(--lr-color-brand-quiet)}[part=node-label]:active,lr-virtual-list::part(node-label):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=direction],lr-virtual-list::part(direction){color:var(--lr-color-text-quiet);flex:none}[part=relation],lr-virtual-list::part(relation){color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);flex:none}[part=node-meta],lr-virtual-list::part(node-meta){min-inline-size:0;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=expand-button],lr-virtual-list::part(expand-button){inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius-xs);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}[part=expand-button]:hover,lr-virtual-list::part(expand-button):hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent)}[part=expand-button]:active,lr-virtual-list::part(expand-button):active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=expand-button]:focus-visible,lr-virtual-list::part(expand-button):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=group-header],lr-virtual-list::part(group){padding-block:var(--lr-space-xs);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);text-transform:uppercase}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{display:block}[part=row],lr-virtual-list::part(row){align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-xs);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);display:flex}[part=node-label],lr-virtual-list::part(node-label){align-items:baseline;gap:var(--lr-space-xs);box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-size-2px) 0;color:var(--lr-color-text);font:inherit;text-align:start;cursor:pointer;background:0 0;border:none;flex:auto;display:flex}[part=node-label]:focus-visible,lr-virtual-list::part(node-label):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=node-label]:hover,lr-virtual-list::part(node-label):hover{background:var(--lr-color-brand-quiet)}[part=node-label]:active,lr-virtual-list::part(node-label):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=direction],lr-virtual-list::part(direction){color:var(--lr-color-text-quiet);flex:none}[part=relation],lr-virtual-list::part(relation){color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);flex:none}[part=node-meta],lr-virtual-list::part(node-meta){min-inline-size:0;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=expand-button],lr-virtual-list::part(expand-button){inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius-xs);color:var(--lr-color-text-quiet);font:inherit;cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}[part=expand-button]:hover,lr-virtual-list::part(expand-button):hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent)}[part=expand-button]:active,lr-virtual-list::part(expand-button):active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=expand-button]:focus-visible,lr-virtual-list::part(expand-button):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=group-header],lr-virtual-list::part(group){padding-block:var(--lr-space-xs);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);text-transform:uppercase}`;export{styles};
@@ -1,4 +1,4 @@
1
- import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export interface LyraPaletteItem{
1
+ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export interface LyraPaletteItem{
2
2
  /** The `FlowNode.type` a placement/drop creates. */
3
3
  type:string;
4
4
  /** Nonblank text used as the option's visible and accessible name. */
@@ -8,7 +8,7 @@ category?:string;keywords?:string[];
8
8
  /** Optional TemplateResult glyph (`TreeItem.icon` precedent). */
9
9
  icon?:unknown;
10
10
  /** Visible but not draggable/placeable. */
11
- disabled?:boolean;}export interface LyraNodePaletteEventMap{'lr-palette-place':CustomEvent<{type:string;}>;'lr-select':CustomEvent<LyraEventDetailSnapshot<{item:LyraPaletteItem;}>>;
11
+ disabled?:boolean;}export interface LyraNodePaletteEventMap{'lr-palette-place':CustomEvent<{type:string;}>;'lr-select':CustomEvent<Readonly<{item:LyraPaletteItem;}>>;
12
12
  /** A keyboard reorder *request*, only while `reorderable`. `fromIndex`/`toIndex` index into the
13
13
  * host's own `items` array, so applying it is a plain splice; `category` names the group the
14
14
  * move stayed inside (`null` for the ungrouped bucket). This component never reorders `items`
@@ -30,14 +30,17 @@ disabled?:boolean;}export interface LyraNodePaletteEventMap{'lr-palette-place':C
30
30
  *
31
31
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
32
32
  * collection and reassign it after changes; mutating the assigned array does not update the view.
33
+ * Each rendered item is projected once from its own data descriptors. Accessor-backed or malformed
34
+ * rows are omitted, while an admitted source object's identity remains available only for focus,
35
+ * reorder, and `lr-select` contracts.
33
36
  *
34
37
  * @customElement lr-node-palette
35
38
  * @slot header - Content above the search field (e.g. a heading or tabs).
36
39
  * @slot footer - Content below the list.
37
40
  * @event lr-palette-place - An item was placed (pointer click or Enter/Space — the click/keyboard
38
41
  * alternative to dragging). `detail: { type }`.
39
- * @event lr-select - Emitted alongside `lr-palette-place` on both gestures, carrying the full
40
- * item. `detail: { item }`.
42
+ * @event lr-select - Emitted alongside `lr-palette-place` on both gestures, carrying the original
43
+ * admitted item object. `detail: { item }`.
41
44
  * @event lr-reorder - `detail: { type, category, fromIndex, toIndex }` — Ctrl/Cmd+ArrowUp/ArrowDown
42
45
  * on the focused item requests moving it past its neighbour **inside its own category group**, so
43
46
  * a reorder can never turn into a recategorization. `fromIndex`/`toIndex` index into `items`
@@ -69,12 +72,13 @@ export declare class LyraNodePalette extends LyraElement<LyraNodePaletteEventMap
69
72
  * a deep structural clone (the default for an owned collection) would silently corrupt its
70
73
  * internal `strings`/`.raw` template identity. Matches `<lr-command-palette>`'s identical
71
74
  * `commands` exception for the same reasons. */
72
- protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
73
- /** Node templates available for filtering, activation, dragging, and optional reordering. */
75
+ protected static readonly identityCollectionProperties:readonly string[];protected static readonly identityEventDetailProperties:Readonly<{'lr-select':readonly string[];}>;static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
76
+ /** Node templates available for filtering, activation, dragging, and optional reordering.
77
+ * Accessor-backed or malformed rows are omitted; accepted fields are read once from own data
78
+ * descriptors while the original item object stays available for documented identity contracts. */
74
79
  items:readonly LyraPaletteItem[];
75
- /** Accessible name for the palette; omitted uses the localized default. An explicit empty
76
- * string is used as-is (see `render()`'s `listLabel` for how it interacts with a host
77
- * `aria-label`). */
80
+ /** Accessible name for the actual listbox; omitted, empty, or whitespace-only values use the
81
+ * localized default while the public property's raw readback remains unchanged. */
78
82
  label?:string;
79
83
  /**
80
84
  * Opts into Ctrl/Cmd+ArrowUp/ArrowDown keyboard reordering (see the class doc). Defaults to
@@ -82,13 +86,14 @@ label?:string;
82
86
  * a plain Arrow press.
83
87
  */
84
88
  reorderable:boolean;
85
- /** JS-only accessible-name override for the listbox. A markup `aria-label` names the component
86
- * as a whole, so it is not cloned onto the inner listbox. */
89
+ /** JS-only accessible-name override for the listbox. Setting this property does not reflect a
90
+ * host `aria-label`; an authored host attribute, including `aria-label=""`, names only the
91
+ * component and leaves the listbox to `label` or its localized fallback. */
87
92
  accessibleLabel:string|null;private queryText;private activeIndex;private liveText;private readonly listId;private readonly hintId;private announcementSink?;private readonly announcer;
88
93
  /** Gates the item-count announcement so a freshly-mounted palette (or one that receives its
89
94
  * initial `items` before/at connect) never announces its own starting count -- mirrors
90
95
  * `<lr-chat-message>`/`<lr-branch-picker>`'s identical `isMounting` gate. */
91
- private isMounting;private filteredCache;private categorizedCache;private rovingListCache;private get filtered();private categorized;private rovingList;
96
+ private isMounting;private canonicalItemsCache;private filteredCache;private categorizedCache;private rovingListCache;private get canonicalItems();private get filtered();private categorized;private rovingList;
92
97
  /** Enabled items in the order represented by the currently committed item elements. */
93
98
  private lastRenderedRovingList;private pendingFocusIndex;private itemElements;private occurrenceAt;private indexOfOccurrence;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private onSearchInput;private onSearchFocus;private onSearchBlur;private onFieldKeyDown;private focusItem;private onItemKeyDown;
94
99
  /** The rendered items of one category group, disabled entries included: a reorder moves the
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{FLOW_PALETTE_MIME_TYPE}from"../../data/flow-canvas/flow-canvas.class.js";import{styles}from"./node-palette.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{LYRA_DEFAULT_nodePaletteDragHint,LYRA_DEFAULT_nodePaletteEmpty,LYRA_DEFAULT_nodePaletteLabel,LYRA_DEFAULT_nodePalettePlaceholder,LYRA_DEFAULT_nodePaletteResultCount,LYRA_DEFAULT_reorderItemMoved,LYRA_DEFAULT_search}from"../../../internal/default-strings.generated.js";const EMPTY_PALETTE_ITEMS=Object.freeze([]);class LyraNodePalette extends LyraElement{constructor(){super(...arguments),this.items=[],this.reorderable=!1,this.accessibleLabel=null,this.queryText="",this.activeIndex=0,this.liveText="",this.listId=nextId("node-palette-list"),this.hintId=nextId("node-palette-hint"),this.announcer=new Announcer({onFlush:text=>{this.liveText=text,this.announcementSink?.announce(text)}}),this.isMounting=!0,this.filteredCache=null,this.categorizedCache=null,this.rovingListCache=null,this.lastRenderedRovingList=[],this.pendingFocusIndex=null,this.onSearchInput=e=>{this.queryText=e.target.value,this.activeIndex=0},this.onSearchFocus=event=>{relayNativeEvent(this,event)},this.onSearchBlur=event=>{relayNativeEvent(this,event)},this.onFieldKeyDown=e=>{if(e.key==="ArrowDown"){if(e.preventDefault(),this.lastRenderedRovingList.length===0)return;this.activeIndex=0,this.focusItem(0)}}}static{this.defaultStrings={...super.defaultStrings,nodePaletteDragHint:LYRA_DEFAULT_nodePaletteDragHint,nodePaletteEmpty:LYRA_DEFAULT_nodePaletteEmpty,nodePaletteLabel:LYRA_DEFAULT_nodePaletteLabel,nodePalettePlaceholder:LYRA_DEFAULT_nodePalettePlaceholder,nodePaletteResultCount:LYRA_DEFAULT_nodePaletteResultCount,reorderItemMoved:LYRA_DEFAULT_reorderItemMoved,search:LYRA_DEFAULT_search}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-select"])}get filtered(){const locale=this.effectiveLocale,q=this.queryText.trim().toLocaleLowerCase(locale),items=Array.isArray(this.items)?this.items:EMPTY_PALETTE_ITEMS,cache=this.filteredCache;if(cache&&cache.items===items&&cache.query===q&&cache.locale===locale)return cache.result;const result=[];for(const item of items)try{const label=item?.label,type=item?.type,category=item?.category,description=item?.description,keywords=item?.keywords,disabled=item?.disabled;if(typeof type!="string"||type.trim()===""||typeof label!="string"||label.trim()===""||category!==void 0&&typeof category!="string"||description!==void 0&&typeof description!="string"||keywords!==void 0&&(!Array.isArray(keywords)||keywords.some(keyword=>typeof keyword!="string"))||disabled!==void 0&&typeof disabled!="boolean"||q&&![label,category??"",...keywords??[]].join(" ").toLocaleLowerCase(locale).includes(q))continue;result.push(item)}catch{}return this.filteredCache={items,query:q,locale,result},result}categorized(filtered){const cache=this.categorizedCache;if(cache&&cache.filtered===filtered)return cache.result;const groups=new Map;for(const item of filtered){const key=item.category??null;groups.has(key)||groups.set(key,[]),groups.get(key).push(item)}const result=Array.from(groups,([category,groupItems])=>({category,items:groupItems}));return this.categorizedCache={filtered,result},result}rovingList(filtered=this.filtered){const cache=this.rovingListCache;if(cache&&cache.filtered===filtered)return cache.result;const result=this.categorized(filtered).flatMap(group=>group.items).filter(item=>!item.disabled);return this.rovingListCache={filtered,result},result}itemElements(){return Array.from(this.renderRoot.querySelectorAll('[part="item"]:not([aria-disabled="true"])'))}occurrenceAt(items,index){const item=items[index];let occurrence=0;for(let i=0;i<index;i++)items[i]===item&&occurrence++;return occurrence}indexOfOccurrence(items,item,occurrence){let seen=0;for(let index=0;index<items.length;index++)if(items[index]===item){if(seen===occurrence)return index;seen++}return-1}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.announcementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.announcer.cancel(),this.liveText="",this.isMounting=!0,this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}willUpdate(changed){super.willUpdate(changed);const previous=this.lastRenderedRovingList,next=this.rovingList(),structureChanged=previous.length!==next.length||previous.some((item,index)=>item!==next[index]);if(!this.hasUpdated||!structureChanged)return;const oldElements=this.itemElements(),focusedIndex=oldElements.indexOf(activeElementIn(this.shadowRoot)),referenceIndex=focusedIndex>=0?focusedIndex:Math.min(Math.max(0,this.activeIndex),Math.max(0,previous.length-1));let nextIndex=0;const previousItem=previous[referenceIndex];if(!changed.has("queryText")&&previousItem){const occurrence=this.occurrenceAt(previous,referenceIndex),preservedIndex=this.indexOfOccurrence(next,previousItem,occurrence);nextIndex=preservedIndex>=0?preservedIndex:Math.min(referenceIndex,Math.max(0,next.length-1))}if(focusedIndex>=0)if(next.length===0)this.renderRoot.querySelector("input")?.focus();else{const nextItem=next[nextIndex],nextOccurrence=this.occurrenceAt(next,nextIndex),survivingOldIndex=this.indexOfOccurrence(previous,nextItem,nextOccurrence),survivingOldElement=oldElements[survivingOldIndex];survivingOldElement?survivingOldElement.focus():this.renderRoot.querySelector("input")?.focus(),this.pendingFocusIndex=nextIndex}this.activeIndex=next.length===0?0:nextIndex}updated(changed){super.updated(changed),this.lastRenderedRovingList=this.rovingList();const pendingFocusIndex=this.pendingFocusIndex;pendingFocusIndex!==null&&(this.pendingFocusIndex=null,this.itemElements()[Math.min(pendingFocusIndex,this.lastRenderedRovingList.length-1)]?.focus()),changed.has("items")&&this.confirmPendingReorder();const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&(changed.has("queryText")||changed.has("items"))){const count=this.filtered.length,countText=getNumberFormat(this.effectiveLocale).format(count);this.announcer.announce(this.localize("nodePaletteResultCount",void 0,{count:countText,pluralCount:count}))}}focusItem(index){this.updateComplete.then(()=>{this.itemElements()[index]?.focus()})}onItemKeyDown(e,rovingIndex,item){const list=this.lastRenderedRovingList;if(this.reorderable&&(e.ctrlKey||e.metaKey)&&(e.key==="ArrowUp"||e.key==="ArrowDown")){e.preventDefault(),this.requestReorder(item,e.key==="ArrowDown"?1:-1);return}if(e.key==="ArrowDown")e.preventDefault(),this.activeIndex=Math.min(list.length-1,rovingIndex+1),this.focusItem(this.activeIndex);else if(e.key==="ArrowUp"){if(e.preventDefault(),rovingIndex===0){this.renderRoot.querySelector("input")?.focus();return}this.activeIndex=Math.max(0,rovingIndex-1),this.focusItem(this.activeIndex)}else e.key==="Home"?(e.preventDefault(),this.activeIndex=0,this.focusItem(0)):e.key==="End"?(e.preventDefault(),this.activeIndex=list.length-1,this.focusItem(this.activeIndex)):(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.place(item))}groupItemsFor(category){return this.categorized(this.filtered).find(group=>group.category===category)?.items??[]}requestReorder(item,delta){const category=item.category??null,group=this.groupItemsFor(category),position=group.indexOf(item),neighbor=position<0?void 0:group[position+delta];if(!neighbor)return;const fromIndex=this.items.indexOf(item),toIndex=this.items.indexOf(neighbor);fromIndex<0||toIndex<0||(this.pendingReorder={item,category,neighbor,wasBefore:delta===1},this.emit("lr-reorder",{type:item.type,category,fromIndex,toIndex}))}confirmPendingReorder(){const pending=this.pendingReorder;if(!pending)return;const group=this.groupItemsFor(pending.category),position=group.indexOf(pending.item),neighborPosition=group.indexOf(pending.neighbor);if(position<0||neighborPosition<0){this.pendingReorder=void 0;return}if(position<neighborPosition===pending.wasBefore)return;this.pendingReorder=void 0;const numberFormat=getNumberFormat(this.effectiveLocale),text=this.localize("reorderItemMoved",void 0,{index:numberFormat.format(position+1),total:numberFormat.format(group.length)});this.updateComplete.then(()=>this.announcer.announce(text,{force:!0}))}place(item){item.disabled||(this.emit("lr-palette-place",{type:item.type}),this.emit("lr-select",{item}))}onItemDragStart(e,item){item.disabled||!e.dataTransfer||(e.dataTransfer.setData(FLOW_PALETTE_MIME_TYPE,JSON.stringify({type:item.type})),e.dataTransfer.setData("text/plain",item.label),e.dataTransfer.effectAllowed="copy")}itemTemplate(item,rovingIndex){return html`<div
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{FLOW_PALETTE_MIME_TYPE}from"../../data/flow-canvas/flow-canvas.class.js";import{styles}from"./node-palette.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{LYRA_DEFAULT_nodePaletteDragHint,LYRA_DEFAULT_nodePaletteEmpty,LYRA_DEFAULT_nodePaletteLabel,LYRA_DEFAULT_nodePalettePlaceholder,LYRA_DEFAULT_nodePaletteResultCount,LYRA_DEFAULT_reorderItemMoved,LYRA_DEFAULT_search}from"../../../internal/default-strings.generated.js";const MAX_PALETTE_KEYWORDS=1e4,MAX_PALETTE_ITEMS=1e4,EMPTY_CANONICAL_PALETTE_ITEMS=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function projectKeywords(value){try{if(!Array.isArray(value))return;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0||lengthDescriptor.value>MAX_PALETTE_KEYWORDS)return;const keywords=[],length=Math.min(lengthDescriptor.value,MAX_PALETTE_KEYWORDS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof descriptor.value!="string")return;keywords.push(descriptor.value)}return Object.freeze(keywords)}catch{return}}function projectPaletteItem(candidate,sourceIndex){try{if(candidate===null||typeof candidate!="object"||Array.isArray(candidate))return;const typeDescriptor=descriptorValue(candidate,"type"),labelDescriptor=descriptorValue(candidate,"label"),descriptionDescriptor=descriptorValue(candidate,"description"),categoryDescriptor=descriptorValue(candidate,"category"),keywordsDescriptor=descriptorValue(candidate,"keywords"),iconDescriptor=descriptorValue(candidate,"icon"),disabledDescriptor=descriptorValue(candidate,"disabled");if(typeDescriptor===MISSING_OWN_DATA_DESCRIPTOR||typeDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||labelDescriptor===MISSING_OWN_DATA_DESCRIPTOR||labelDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||descriptionDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||categoryDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||keywordsDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||iconDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||disabledDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof typeDescriptor.value!="string"||typeDescriptor.value.trim()===""||typeof labelDescriptor.value!="string"||labelDescriptor.value.trim()==="")return;const description=descriptionDescriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:descriptionDescriptor.value,category=categoryDescriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:categoryDescriptor.value,keywordsValue=keywordsDescriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:keywordsDescriptor.value,icon=iconDescriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:iconDescriptor.value,disabled=disabledDescriptor===MISSING_OWN_DATA_DESCRIPTOR?void 0:disabledDescriptor.value;if(description!==void 0&&typeof description!="string"||category!==void 0&&typeof category!="string"||disabled!==void 0&&typeof disabled!="boolean")return;const keywords=keywordsValue===void 0?Object.freeze([]):projectKeywords(keywordsValue);return keywords?Object.freeze({source:candidate,sourceIndex,type:typeDescriptor.value,label:labelDescriptor.value,description,category,keywords,icon,disabled:disabled??!1}):void 0}catch{return}}function projectPaletteItems(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_PALETTE_ITEMS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_PALETTE_ITEMS;const items=[],length=Math.min(lengthDescriptor.value,MAX_PALETTE_ITEMS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const item=projectPaletteItem(descriptor.value,index);item&&items.push(item)}return Object.freeze(items)}catch{return EMPTY_CANONICAL_PALETTE_ITEMS}}class LyraNodePalette extends LyraElement{constructor(){super(...arguments),this.items=[],this.reorderable=!1,this.accessibleLabel=null,this.queryText="",this.activeIndex=0,this.liveText="",this.listId=nextId("node-palette-list"),this.hintId=nextId("node-palette-hint"),this.announcer=new Announcer({onFlush:text=>{this.liveText=text,this.announcementSink?.announce(text)}}),this.isMounting=!0,this.canonicalItemsCache=null,this.filteredCache=null,this.categorizedCache=null,this.rovingListCache=null,this.lastRenderedRovingList=[],this.pendingFocusIndex=null,this.onSearchInput=e=>{this.queryText=e.target.value,this.activeIndex=0},this.onSearchFocus=event=>{relayNativeEvent(this,event)},this.onSearchBlur=event=>{relayNativeEvent(this,event)},this.onFieldKeyDown=e=>{if(e.key==="ArrowDown"){if(e.preventDefault(),this.lastRenderedRovingList.length===0)return;this.activeIndex=0,this.focusItem(0)}}}static{this.defaultStrings={...super.defaultStrings,nodePaletteDragHint:LYRA_DEFAULT_nodePaletteDragHint,nodePaletteEmpty:LYRA_DEFAULT_nodePaletteEmpty,nodePaletteLabel:LYRA_DEFAULT_nodePaletteLabel,nodePalettePlaceholder:LYRA_DEFAULT_nodePalettePlaceholder,nodePaletteResultCount:LYRA_DEFAULT_nodePaletteResultCount,reorderItemMoved:LYRA_DEFAULT_reorderItemMoved,search:LYRA_DEFAULT_search}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.identityEventDetailProperties=Object.freeze({"lr-select":Object.freeze(["item"])})}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-select"])}get canonicalItems(){const items=this.items,cache=this.canonicalItemsCache;if(cache&&cache.items===items)return cache.result;const result=projectPaletteItems(items);return this.canonicalItemsCache={items,result},result}get filtered(){const locale=this.effectiveLocale,q=this.queryText.trim().toLocaleLowerCase(locale),items=this.canonicalItems,cache=this.filteredCache;if(cache&&cache.items===items&&cache.query===q&&cache.locale===locale)return cache.result;const result=[];for(const item of items)q&&![item.label,item.category??"",...item.keywords].join(" ").toLocaleLowerCase(locale).includes(q)||result.push(item);return this.filteredCache={items,query:q,locale,result},result}categorized(filtered){const cache=this.categorizedCache;if(cache&&cache.filtered===filtered)return cache.result;const groups=new Map;for(const item of filtered){const key=item.category??null;groups.has(key)||groups.set(key,[]),groups.get(key).push(item)}const result=Array.from(groups,([category,groupItems])=>({category,items:groupItems}));return this.categorizedCache={filtered,result},result}rovingList(filtered=this.filtered){const cache=this.rovingListCache;if(cache&&cache.filtered===filtered)return cache.result;const result=this.categorized(filtered).flatMap(group=>group.items).filter(item=>!item.disabled);return this.rovingListCache={filtered,result},result}itemElements(){return Array.from(this.renderRoot.querySelectorAll('[part="item"]:not([aria-disabled="true"])'))}occurrenceAt(items,index){const item=items[index]?.source;let occurrence=0;for(let i=0;i<index;i++)items[i]?.source===item&&occurrence++;return occurrence}indexOfOccurrence(items,item,occurrence){let seen=0;for(let index=0;index<items.length;index++)if(items[index]?.source===item){if(seen===occurrence)return index;seen++}return-1}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.announcementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.announcer.cancel(),this.liveText="",this.isMounting=!0,this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}willUpdate(changed){super.willUpdate(changed);const previous=this.lastRenderedRovingList,next=this.rovingList(),structureChanged=previous.length!==next.length||previous.some((item,index)=>item!==next[index]);if(!this.hasUpdated||!structureChanged)return;const oldElements=this.itemElements(),focusedIndex=oldElements.indexOf(activeElementIn(this.shadowRoot)),referenceIndex=focusedIndex>=0?focusedIndex:Math.min(Math.max(0,this.activeIndex),Math.max(0,previous.length-1));let nextIndex=0;const previousItem=previous[referenceIndex];if(!changed.has("queryText")&&previousItem){const occurrence=this.occurrenceAt(previous,referenceIndex),preservedIndex=this.indexOfOccurrence(next,previousItem.source,occurrence);nextIndex=preservedIndex>=0?preservedIndex:Math.min(referenceIndex,Math.max(0,next.length-1))}if(focusedIndex>=0)if(next.length===0)this.renderRoot.querySelector("input")?.focus();else{const nextItem=next[nextIndex],nextOccurrence=this.occurrenceAt(next,nextIndex),survivingOldIndex=this.indexOfOccurrence(previous,nextItem.source,nextOccurrence),survivingOldElement=oldElements[survivingOldIndex];survivingOldElement?survivingOldElement.focus():this.renderRoot.querySelector("input")?.focus(),this.pendingFocusIndex=nextIndex}this.activeIndex=next.length===0?0:nextIndex}updated(changed){super.updated(changed),this.lastRenderedRovingList=this.rovingList();const pendingFocusIndex=this.pendingFocusIndex;pendingFocusIndex!==null&&(this.pendingFocusIndex=null,this.itemElements()[Math.min(pendingFocusIndex,this.lastRenderedRovingList.length-1)]?.focus()),changed.has("items")&&this.confirmPendingReorder();const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&(changed.has("queryText")||changed.has("items"))){const count=this.filtered.length,countText=getNumberFormat(this.effectiveLocale).format(count);this.announcer.announce(this.localize("nodePaletteResultCount",void 0,{count:countText,pluralCount:count}))}}focusItem(index){this.updateComplete.then(()=>{this.itemElements()[index]?.focus()})}onItemKeyDown(e,rovingIndex,item){const list=this.lastRenderedRovingList;if(this.reorderable&&(e.ctrlKey||e.metaKey)&&(e.key==="ArrowUp"||e.key==="ArrowDown")){e.preventDefault(),this.requestReorder(item,e.key==="ArrowDown"?1:-1);return}if(e.key==="ArrowDown")e.preventDefault(),this.activeIndex=Math.min(list.length-1,rovingIndex+1),this.focusItem(this.activeIndex);else if(e.key==="ArrowUp"){if(e.preventDefault(),rovingIndex===0){this.renderRoot.querySelector("input")?.focus();return}this.activeIndex=Math.max(0,rovingIndex-1),this.focusItem(this.activeIndex)}else e.key==="Home"?(e.preventDefault(),this.activeIndex=0,this.focusItem(0)):e.key==="End"?(e.preventDefault(),this.activeIndex=list.length-1,this.focusItem(this.activeIndex)):(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.place(item))}groupItemsFor(category){return this.categorized(this.filtered).find(group=>group.category===category)?.items??[]}requestReorder(item,delta){const category=item.category??null,group=this.groupItemsFor(category),position=group.indexOf(item),neighbor=position<0?void 0:group[position+delta];if(!neighbor)return;const fromIndex=item.sourceIndex,toIndex=neighbor.sourceIndex;this.pendingReorder={item:item.source,itemOccurrence:this.occurrenceAt(group,position),category,neighbor:neighbor.source,neighborOccurrence:this.occurrenceAt(group,position+delta),wasBefore:delta===1},this.emit("lr-reorder",{type:item.type,category,fromIndex,toIndex})}confirmPendingReorder(){const pending=this.pendingReorder;if(!pending)return;const group=this.groupItemsFor(pending.category),position=this.indexOfOccurrence(group,pending.item,pending.itemOccurrence),neighborPosition=this.indexOfOccurrence(group,pending.neighbor,pending.neighborOccurrence);if(position<0||neighborPosition<0){this.pendingReorder=void 0;return}if(position<neighborPosition===pending.wasBefore)return;this.pendingReorder=void 0;const numberFormat=getNumberFormat(this.effectiveLocale),text=this.localize("reorderItemMoved",void 0,{index:numberFormat.format(position+1),total:numberFormat.format(group.length)});this.updateComplete.then(()=>this.announcer.announce(text,{force:!0}))}place(item){item.disabled||(this.emit("lr-palette-place",{type:item.type}),this.emit("lr-select",{item:item.source}))}onItemDragStart(e,item){item.disabled||!e.dataTransfer||(e.dataTransfer.setData(FLOW_PALETTE_MIME_TYPE,JSON.stringify({type:item.type})),e.dataTransfer.setData("text/plain",item.label),e.dataTransfer.effectAllowed="copy")}itemTemplate(item,rovingIndex){return html`<div
2
2
  part="item"
3
3
  role="option"
4
4
  aria-selected="false"
@@ -16,7 +16,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
16
16
  >`:nothing}
17
17
  <span part="item-label">${item.label}</span>
18
18
  ${item.description?html`<span part="item-description">${item.description}</span>`:nothing}
19
- </div>`}render(){const filtered=this.filtered,groups=this.categorized(filtered);let nextRovingIndex=0;const hostLabel=hostAriaLabel(this),listLabel=hostLabel===null?this.accessibleLabel??(this.label==null?this.localize("nodePaletteLabel"):this.label):this.label!=null&&this.label!==hostLabel?this.label:this.localize("nodePaletteLabel");return html`<div part="base">
19
+ </div>`}render(){const filtered=this.filtered,groups=this.categorized(filtered);let nextRovingIndex=0;const componentLabel=typeof this.label=="string"&&this.label.trim()!==""?this.label:this.localize("nodePaletteLabel"),listLabel=!this.hasAttribute("aria-label")&&typeof this.accessibleLabel=="string"&&this.accessibleLabel.trim()!==""?this.accessibleLabel:componentLabel;return html`<div part="base">
20
20
  <slot name="header"></slot>
21
21
  <input
22
22
  part="search"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;min-inline-size:0;display:flex}[part=search]{box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit}[part=search]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=search]:hover{border-color:var(--lr-color-border-strong)}[part=search]::-webkit-search-cancel-button,[part=search]::-webkit-search-decoration{appearance:none}[part=search]::placeholder{color:var(--lr-color-text-quiet)}[part=list]{gap:var(--lr-size-2px);flex-direction:column;min-inline-size:0;display:flex;overflow:clip auto}[part=group-header]{padding:var(--lr-space-2xs) var(--lr-space-s);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-medium);color:var(--lr-color-text-quiet);text-transform:uppercase}[part=item]{gap:var(--lr-size-2px);box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);border-radius:var(--lr-radius);cursor:grab;flex-direction:column;display:flex}[part=item][aria-disabled=true]{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}:where([part=item]):hover:where(:not([aria-disabled=true])),:where([part=item]):focus-visible:where(:not([aria-disabled=true])){background:var(--lr-color-surface-hover,var(--lr-color-border))}:where([part=item]):active:where(:not([aria-disabled=true])){background:color-mix(in oklab, var(--lr-color-surface-hover,var(--lr-color-border)), var(--lr-color-mix-partner) var(--lr-color-mix-active));cursor:grabbing}[part=item]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part=item-label]{font-weight:var(--lr-font-weight-medium)}[part=item-description]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=empty]{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);text-align:center}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;min-inline-size:0;display:flex}[part=search]{box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit}[part=search]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=search]:hover{border-color:var(--lr-color-border-strong)}[part=search]::-webkit-search-cancel-button,[part=search]::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}[part=search]::placeholder{color:var(--lr-color-text-quiet)}[part=list]{gap:var(--lr-size-2px);flex-direction:column;min-inline-size:0;display:flex;overflow:clip auto}[part=group-header]{padding:var(--lr-space-2xs) var(--lr-space-s);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-medium);color:var(--lr-color-text-quiet);text-transform:uppercase}[part=item]{gap:var(--lr-size-2px);box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);border-radius:var(--lr-radius);cursor:grab;flex-direction:column;display:flex}[part=item][aria-disabled=true]{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}:where([part=item]):hover:where(:not([aria-disabled=true])),:where([part=item]):focus-visible:where(:not([aria-disabled=true])){background:var(--lr-color-surface-hover,var(--lr-color-border))}:where([part=item]):active:where(:not([aria-disabled=true])){background:color-mix(in oklab, var(--lr-color-surface-hover,var(--lr-color-border)), var(--lr-color-mix-partner) var(--lr-color-mix-active));cursor:grabbing}[part=item]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part=item-label]{font-weight:var(--lr-font-weight-medium)}[part=item-description]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=empty]{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);text-align:center}`;export{styles};
@@ -6,7 +6,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
6
6
  @focus=${()=>this.onElementFocus(index)}
7
7
  >
8
8
  ${node.label||node.id}
9
- </button>`}renderEdge(el,index){const rtl=isRtl(this),glyph=el.directed?el.reverse?rtl?"\u2192":"\u2190":rtl?"\u2190":"\u2192":"";return html`<span class="element-group">
9
+ </button>`}renderEdge(el,index){const rtl=isRtl(this),glyph=el.directed?el.reverse?rtl?"":"":rtl?"":"":"";return html`<span class="element-group">
10
10
  ${glyph?html`<span part="arrow" aria-hidden="true">${glyph}</span>`:nothing}
11
11
  <button
12
12
  part="relation"
@@ -166,7 +166,7 @@ errorText:string;
166
166
  * says exactly what this region is. An explicit empty string clears the fallback. A non-empty
167
167
  * host `aria-label` makes the host the sole overall owner; an explicitly empty host label stays
168
168
  * empty on the region. */
169
- label?:string;private pendingFocusTarget;private previousProcessedChunkIds;private focusRestoreGeneration;private isMounting;private errorAnnouncementSink?;private emptyAnnouncementSink?;private wasEmptyPresented;private processedChunksCache?;private processedGroupingLocaleSignature;connectedCallback():void;disconnectedCallback():void;private deepActiveElement;private chunkAnchor;private renderedChunkIds;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private restoreControlledFocus;private get effectiveVirtualizeAt();
169
+ label?:string;private pendingFocusTarget;private previousProcessedChunkIds;private focusRestoreGeneration;private isMounting;private errorAnnouncementSink?;private emptyAnnouncementSink?;private readonly retrievalChunkKey;private wasEmptyPresented;private processedChunksCache?;private processedGroupingLocaleSignature;connectedCallback():void;disconnectedCallback():void;private deepActiveElement;private chunkAnchor;private renderedChunkIds;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private restoreControlledFocus;private get effectiveVirtualizeAt();
170
170
  /** Keeps the first valid occurrence for every nonblank chunk id. */
171
171
  private canonicalChunks;private normalizedSelectedChunkIds;private get processedChunks();private computeProcessedChunks;
172
172
  /** Group-id order: a comparator sorts the first-seen ids; an explicit array leads, with any
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,canonicalIdentityList,isValidRetrievalChunk}from"../retrieval-identity.js";import{finiteCount,finiteNumber,finiteRange}from"../../../internal/numbers.js";import{styles}from"./retrieval-results.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_chunkInspectorEmpty,LYRA_DEFAULT_chunkInspectorLabel,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_retrievalResultsSelectRow,LYRA_DEFAULT_untitledSource}from"../../../internal/default-strings.generated.js";function toLyraChunk(chunk){return{id:chunk.id,text:chunk.text,score:chunk.score,sourceId:chunk.source.id,title:chunk.source.name,anchor:chunk.locator,page:chunk.locator?.kind==="page"?chunk.locator.page:void 0}}function safeScore(score){return finiteRange(score,0,0,1)}class LyraRetrievalResults extends LyraElement{constructor(){super(...arguments),this.chunks=[],this.selectedChunkIds=[],this.selectable=!0,this.dedupe=!0,this.sort="score",this.grouping="none",this.presentation="expanded",this.thresholds={high:.75,medium:.5},this.virtualizeAt=50,this.activeChunkId="",this.loading=!1,this.hasMore=!1,this.errorText="",this.previousProcessedChunkIds=[],this.focusRestoreGeneration=0,this.isMounting=!0,this.wasEmptyPresented=!1,this.processedGroupingLocaleSignature="",this.renderRow=item=>{const chunk=item,selected=this.selectedChunkIds.includes(chunk.id),rowLabel=chunk.source.name||this.localize("untitledSource");return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,canonicalIdentityList,isValidRetrievalChunk}from"../retrieval-identity.js";import{finiteCount,finiteNumber,finiteRange}from"../../../internal/numbers.js";import{styles}from"./retrieval-results.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_chunkInspectorEmpty,LYRA_DEFAULT_chunkInspectorLabel,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_retrievalResultsSelectRow,LYRA_DEFAULT_untitledSource}from"../../../internal/default-strings.generated.js";function toLyraChunk(chunk){return{id:chunk.id,text:chunk.text,score:chunk.score,sourceId:chunk.source.id,title:chunk.source.name,anchor:chunk.locator,page:chunk.locator?.kind==="page"?chunk.locator.page:void 0}}function safeScore(score){return finiteRange(score,0,0,1)}class LyraRetrievalResults extends LyraElement{constructor(){super(...arguments),this.chunks=[],this.selectedChunkIds=[],this.selectable=!0,this.dedupe=!0,this.sort="score",this.grouping="none",this.presentation="expanded",this.thresholds={high:.75,medium:.5},this.virtualizeAt=50,this.activeChunkId="",this.loading=!1,this.hasMore=!1,this.errorText="",this.previousProcessedChunkIds=[],this.focusRestoreGeneration=0,this.isMounting=!0,this.retrievalChunkKey=item=>item.id,this.wasEmptyPresented=!1,this.processedGroupingLocaleSignature="",this.renderRow=item=>{const chunk=item,selected=this.selectedChunkIds.includes(chunk.id),rowLabel=chunk.source.name||this.localize("untitledSource");return html`
2
2
  ${this.selectable?html`<lr-checkbox
3
3
  part="select"
4
4
  data-chunk-id=${chunk.id}
@@ -49,7 +49,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
49
49
  >${this.localize("chunkInspectorEmpty")}</span
50
50
  ></lr-empty
51
51
  >
52
- </div>`;const useVirtualList=processed.groups.length>0||processed.chunks.length>this.effectiveVirtualizeAt;return html`
52
+ </div>`;const useVirtualList=processed.groups.length>0||processed.chunks.length>this.effectiveVirtualizeAt,renderVirtualRow=item=>this.renderRow(item);return html`
53
53
  <div
54
54
  part="base"
55
55
  role=${groupRole??nothing}
@@ -58,9 +58,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
58
58
  >
59
59
  ${useVirtualList?html`<lr-virtual-list
60
60
  exportparts="row:row, group:group-header, select:select, row-body:row-body, row-body-selected:row-body-selected, metadata:metadata, metadata-entry:metadata-entry, metadata-term:metadata-term, metadata-value:metadata-value, chunk:chunk, chunk-current:chunk-current, chunk-score:chunk-score, chunk-score-current:chunk-score-current, chunk-score-bar:chunk-score-bar, chunk-score-fill:chunk-score-fill, chunk-score-fill-success:chunk-score-fill-success, chunk-score-fill-warning:chunk-score-fill-warning, chunk-score-fill-danger:chunk-score-fill-danger, chunk-open-button:chunk-open-button, chunk-title:chunk-title, chunk-text:chunk-text, chunk-text-clamped:chunk-text-clamped, chunk-toggle:chunk-toggle"
61
- .items=${processed.chunks}
62
- .renderItem=${this.renderRow}
63
- .keyFunction=${item=>item.id}
61
+ .items=${guard([processed.chunks],()=>processed.chunks)}
62
+ .renderItem=${renderVirtualRow}
63
+ .keyFunction=${this.retrievalChunkKey}
64
64
  .groups=${processed.groups}
65
65
  .activeItemId=${this.activeChunkId||""}
66
66
  ?loading=${this.loading}
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{finiteNumber}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{chevronIcon}from"../../../internal/icons.js";import"../../agent-tools/span-waterfall/span-waterfall.class.js";import"../chunk-inspector/chunk-inspector.class.js";import{firstByRetrievalIdentity,isValidRetrievalChunk}from"../retrieval-identity.js";import{styles}from"./retrieval-trace.styles.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_expand,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_retrievalStageEmbed,LYRA_DEFAULT_retrievalStageFilter,LYRA_DEFAULT_retrievalStageQueryRewrite,LYRA_DEFAULT_retrievalStageRerank,LYRA_DEFAULT_retrievalStageRetrieve,LYRA_DEFAULT_retrievalTraceEvidenceToggle,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const STAGE_SPAN_KIND={"query-rewrite":"llm",embed:"embedding",retrieve:"retriever",rerank:"tool",filter:"tool"},STAGE_LABEL={"query-rewrite":{key:"retrievalStageQueryRewrite"},embed:{key:"retrievalStageEmbed"},retrieve:{key:"retrievalStageRetrieve"},rerank:{key:"retrievalStageRerank"},filter:{key:"retrievalStageFilter"}};function validChunks(evidence){return Array.isArray(evidence?.chunks)?evidence.chunks.filter(isValidRetrievalChunk):[]}function hasEvidence(evidence){return evidence?!!evidence.text||validChunks(evidence).length>0||!!(evidence.metadata&&Object.keys(evidence.metadata).length>0):!1}function toLyraChunk(chunk){return{id:chunk.id,text:chunk.text,score:chunk.score,sourceId:chunk.source.id,title:chunk.source.name,...chunk.locator?{anchor:chunk.locator}:{},...chunk.locator?.kind==="page"?{page:chunk.locator.page}:{}}}class LyraRetrievalTrace extends LyraElement{constructor(){super(...arguments),this.stages=[],this.activeStageId=null,this.label="",this.expandedStageIds=new Set,this.evidenceDomIdPrefix=nextId("retrieval-trace-evidence"),this.onStageSelect=e=>{e.stopPropagation();const{spanId:stageId}=e.detail;this.emit("lr-stage-select",{stageId});const stage=this.normalizedStages.find(s=>s.id===stageId);if(stage&&hasEvidence(stage.evidence)&&!this.expandedStageIds.has(stageId)){const next=new Set(this.expandedStageIds);next.add(stageId),this.expandedStageIds=next,this.emit("lr-stage-toggle",{stageId,expanded:!0})}}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,expand:LYRA_DEFAULT_expand,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,retrievalStageEmbed:LYRA_DEFAULT_retrievalStageEmbed,retrievalStageFilter:LYRA_DEFAULT_retrievalStageFilter,retrievalStageQueryRewrite:LYRA_DEFAULT_retrievalStageQueryRewrite,retrievalStageRerank:LYRA_DEFAULT_retrievalStageRerank,retrievalStageRetrieve:LYRA_DEFAULT_retrievalStageRetrieve,retrievalTraceEvidenceToggle:LYRA_DEFAULT_retrievalTraceEvidenceToggle,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.ownedCollectionProperties=Object.freeze(["stages"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-stage-chunk-action"])}get normalizedStages(){return firstByRetrievalIdentity(Array.isArray(this.stages)?this.stages:[],stage=>stage.id)}stageLabel(stage){if(typeof stage.label=="string"&&stage.label)return stage.label;const entry=STAGE_LABEL[stage.kind];return entry?this.localize(entry.key):String(stage.kind)}toSpans(){return this.normalizedStages.map(stage=>({id:stage.id,name:this.stageLabel(stage),kind:STAGE_SPAN_KIND[stage.kind]??"tool",startMs:stage.startMs,endMs:stage.endMs,status:stage.status,detail:stage.detail}))}toggleEvidence(stageId){const expanded=!this.expandedStageIds.has(stageId),next=new Set(this.expandedStageIds);expanded?next.add(stageId):next.delete(stageId),this.expandedStageIds=next,this.emit("lr-stage-toggle",{stageId,expanded})}willUpdate(changed){if(super.willUpdate(changed),changed.has("stages")){const ids=new Set(this.normalizedStages.map(s=>s.id));let pruned=null;for(const id of this.expandedStageIds)ids.has(id)||(pruned??=new Set(this.expandedStageIds),pruned.delete(id));pruned&&(this.expandedStageIds=pruned)}}renderEvidenceBody(stage){const evidence=stage.evidence,chunks=validChunks(evidence).map(toLyraChunk),metaEntries=evidence.metadata?Object.entries(evidence.metadata):[];return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{finiteNumber}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{chevronIcon}from"../../../internal/icons.js";import"../../agent-tools/span-waterfall/span-waterfall.class.js";import"../chunk-inspector/chunk-inspector.class.js";import{firstByRetrievalIdentity,isValidRetrievalChunk}from"../retrieval-identity.js";import{styles}from"./retrieval-trace.styles.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_expand,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_retrievalStageEmbed,LYRA_DEFAULT_retrievalStageFilter,LYRA_DEFAULT_retrievalStageQueryRewrite,LYRA_DEFAULT_retrievalStageRerank,LYRA_DEFAULT_retrievalStageRetrieve,LYRA_DEFAULT_retrievalTraceEvidenceToggle,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings.generated.js";const STAGE_SPAN_KIND={"query-rewrite":"llm",embed:"embedding",retrieve:"retriever",rerank:"tool",filter:"tool"},STAGE_LABEL={"query-rewrite":{key:"retrievalStageQueryRewrite"},embed:{key:"retrievalStageEmbed"},retrieve:{key:"retrievalStageRetrieve"},rerank:{key:"retrievalStageRerank"},filter:{key:"retrievalStageFilter"}};function validChunks(evidence){return Array.isArray(evidence?.chunks)?evidence.chunks.filter(isValidRetrievalChunk):[]}function hasEvidence(evidence){return evidence?!!evidence.text||validChunks(evidence).length>0||!!(evidence.metadata&&Object.keys(evidence.metadata).length>0):!1}function toLyraChunk(chunk){return{id:chunk.id,text:chunk.text,score:chunk.score,sourceId:chunk.source.id,title:chunk.source.name,...chunk.locator?{anchor:chunk.locator}:{},...chunk.locator?.kind==="page"?{page:chunk.locator.page}:{}}}class LyraRetrievalTrace extends LyraElement{constructor(){super(...arguments),this.stages=[],this.activeStageId=null,this.label="",this.expandedStageIds=new Set,this.evidenceDomIdPrefix=nextId("retrieval-trace-evidence"),this.onStageSelect=e=>{e.stopPropagation();const{spanId:stageId}=e.detail;this.emit("lr-stage-select",{stageId});const stage=this.normalizedStages.find(s=>s.id===stageId);if(stage&&hasEvidence(stage.evidence)&&!this.expandedStageIds.has(stageId)){const next=new Set(this.expandedStageIds);next.add(stageId),this.expandedStageIds=next,this.emit("lr-stage-toggle",{stageId,expanded:!0})}}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,expand:LYRA_DEFAULT_expand,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,retrievalStageEmbed:LYRA_DEFAULT_retrievalStageEmbed,retrievalStageFilter:LYRA_DEFAULT_retrievalStageFilter,retrievalStageQueryRewrite:LYRA_DEFAULT_retrievalStageQueryRewrite,retrievalStageRerank:LYRA_DEFAULT_retrievalStageRerank,retrievalStageRetrieve:LYRA_DEFAULT_retrievalStageRetrieve,retrievalTraceEvidenceToggle:LYRA_DEFAULT_retrievalTraceEvidenceToggle,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.ownedCollectionProperties=Object.freeze(["stages"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-stage-chunk-action"])}get normalizedStages(){return firstByRetrievalIdentity(Array.isArray(this.stages)?this.stages:[],stage=>stage.id)}stageLabel(stage){if(typeof stage.label=="string"&&stage.label)return stage.label;const entry=STAGE_LABEL[stage.kind];return entry?this.localize(entry.key):String(stage.kind)}toSpans(){return this.normalizedStages.map(stage=>({id:stage.id,name:this.stageLabel(stage),kind:STAGE_SPAN_KIND[stage.kind]??"tool",startMs:stage.startMs,endMs:stage.endMs,status:stage.status,detail:stage.detail}))}toggleEvidence(stageId){const expanded=!this.expandedStageIds.has(stageId),next=new Set(this.expandedStageIds);expanded?next.add(stageId):next.delete(stageId),this.expandedStageIds=next,this.emit("lr-stage-toggle",{stageId,expanded})}willUpdate(changed){if(super.willUpdate(changed),changed.has("stages")){const ids=new Set(this.normalizedStages.map(s=>s.id));let pruned=null;for(const id of this.expandedStageIds)ids.has(id)||(pruned??=new Set(this.expandedStageIds),pruned.delete(id));pruned&&(this.expandedStageIds=pruned)}}renderEvidenceBody(stage){const evidence=stage.evidence,chunks=validChunks(evidence).map(toLyraChunk),metaEntries=evidence.metadata?Object.entries(evidence.metadata):[];return html`
2
2
  ${evidence.text?html`<p part="evidence-text">${evidence.text}</p>`:nothing}
3
3
  ${chunks.length>0?html`<lr-chunk-inspector
4
4
  part="chunk-inspector"