@aceshooting/lyra-ui 19.0.1 → 20.0.1

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 (418) hide show
  1. package/CHANGELOG.md +159 -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 +14 -4
  5. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
  6. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +1 -0
  7. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +4 -3
  8. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +1 -1
  9. package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +3 -1
  10. package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
  11. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -3
  12. package/dist/components/agent-tools/context-inspector/context-inspector.styles.js +1 -1
  13. package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +1 -1
  14. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  15. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +1 -0
  16. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +4 -3
  17. package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +1 -1
  18. package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +1 -0
  19. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +4 -3
  20. package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +1 -1
  21. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +1 -1
  22. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +10 -1
  23. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +3 -3
  24. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  25. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +6 -3
  26. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  27. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +14 -3
  28. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  29. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +12 -2
  30. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -1
  31. package/dist/components/charts/chart/box-plot.class.d.ts +15 -3
  32. package/dist/components/charts/chart/box-plot.class.js +3 -3
  33. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  34. package/dist/components/charts/chart/chart.class.d.ts +23 -5
  35. package/dist/components/charts/chart/chart.class.js +2 -2
  36. package/dist/components/charts/chart/chart.styles.js +1 -1
  37. package/dist/components/charts/chart/lite-chart.class.js +1 -1
  38. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  39. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +4 -2
  40. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  41. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  42. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  43. package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +4 -3
  44. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  45. package/dist/components/conversation/code-block/code-block-core.class.d.ts +6 -11
  46. package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
  47. package/dist/components/conversation/code-block/code-block-shared.d.ts +29 -1
  48. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  49. package/dist/components/conversation/code-block/code-block.class.d.ts +6 -11
  50. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  51. package/dist/components/conversation/markdown/markdown-shared.js +2 -2
  52. package/dist/components/conversation/message-actions/message-actions.class.d.ts +4 -2
  53. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  54. package/dist/components/conversation/message-parts/message-parts.class.d.ts +17 -2
  55. package/dist/components/conversation/model-select/model-select.class.js +1 -0
  56. package/dist/components/conversation/model-select/model-select.styles.js +1 -1
  57. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +5 -1
  58. package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -2
  59. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +6 -1
  60. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +2 -2
  61. package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +5 -1
  62. package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
  63. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +5 -1
  64. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  65. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +13 -2
  66. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -3
  67. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  68. package/dist/components/data/calendar/calendar.class.d.ts +9 -0
  69. package/dist/components/data/calendar/calendar.class.js +2 -2
  70. package/dist/components/data/calendar/calendar.styles.js +1 -1
  71. package/dist/components/data/condition-builder/condition-builder.class.d.ts +5 -1
  72. package/dist/components/data/context-meter/context-meter.class.d.ts +4 -0
  73. package/dist/components/data/context-meter/context-meter.styles.js +1 -1
  74. package/dist/components/data/data-grid/data-grid.class.d.ts +8 -2
  75. package/dist/components/data/data-grid/data-grid.class.js +1 -2
  76. package/dist/components/data/flow-node/flow-node.class.d.ts +7 -4
  77. package/dist/components/data/flow-node/flow-node.styles.js +1 -1
  78. package/dist/components/data/funnel/funnel.class.d.ts +5 -0
  79. package/dist/components/data/funnel/funnel.class.js +4 -3
  80. package/dist/components/data/funnel/funnel.styles.js +1 -1
  81. package/dist/components/data/gauge/gauge.class.d.ts +12 -1
  82. package/dist/components/data/gauge/gauge.styles.js +1 -1
  83. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +50 -13
  84. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
  85. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  86. package/dist/components/data/heatmap/heatmap.class.d.ts +27 -9
  87. package/dist/components/data/heatmap/heatmap.class.js +5 -3
  88. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +2 -0
  89. package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
  90. package/dist/components/data/table/table.class.d.ts +8 -0
  91. package/dist/components/data/table/table.class.js +2 -1
  92. package/dist/components/data/tree/tree.class.d.ts +20 -1
  93. package/dist/components/data/tree/tree.class.js +1 -1
  94. package/dist/components/data/word-cloud/word-cloud.class.d.ts +4 -1
  95. package/dist/components/data/word-cloud/word-cloud.class.js +2 -2
  96. package/dist/components/forms/button/button.class.js +1 -1
  97. package/dist/components/forms/checkbox/checkbox.class.d.ts +11 -8
  98. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  99. package/dist/components/forms/checkbox/checkbox.styles.js +1 -1
  100. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +2 -2
  101. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  102. package/dist/components/forms/code-editor/code-editor.class.d.ts +2 -0
  103. package/dist/components/forms/code-editor/code-editor.class.js +1 -1
  104. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  105. package/dist/components/forms/color-picker/color-picker.class.d.ts +11 -1
  106. package/dist/components/forms/color-picker/color-picker.class.js +4 -3
  107. package/dist/components/forms/combobox/combobox.class.d.ts +67 -18
  108. package/dist/components/forms/combobox/combobox.class.js +7 -6
  109. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  110. package/dist/components/forms/date-picker/date-input.class.d.ts +22 -2
  111. package/dist/components/forms/date-picker/date-input.class.js +4 -2
  112. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  113. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +18 -4
  114. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  115. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +18 -4
  116. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  117. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
  118. package/dist/components/forms/icon-button/icon-button.class.d.ts +1 -1
  119. package/dist/components/forms/input/time-input.class.d.ts +11 -1
  120. package/dist/components/forms/input/time-input.class.js +4 -3
  121. package/dist/components/forms/input/time-input.styles.js +1 -1
  122. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  123. package/dist/components/forms/locale-picker/locale-picker.class.js +3 -2
  124. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  125. package/dist/components/forms/otp-input/otp-input.class.d.ts +13 -5
  126. package/dist/components/forms/otp-input/otp-input.class.js +2 -2
  127. package/dist/components/forms/otp-input/otp-input.styles.js +1 -1
  128. package/dist/components/forms/phone-input/phone-input.class.d.ts +10 -3
  129. package/dist/components/forms/phone-input/phone-input.class.js +6 -2
  130. package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
  131. package/dist/components/forms/radio/radio-group.class.d.ts +1 -1
  132. package/dist/components/forms/radio/radio-group.class.js +2 -2
  133. package/dist/components/forms/rubric-form/rubric-form.class.d.ts +9 -1
  134. package/dist/components/forms/rubric-form/rubric-form.class.js +5 -3
  135. package/dist/components/forms/select/select.class.d.ts +4 -0
  136. package/dist/components/forms/select/select.styles.js +1 -1
  137. package/dist/components/forms/slider/slider.class.d.ts +5 -1
  138. package/dist/components/forms/slider/slider.class.js +3 -3
  139. package/dist/components/forms/switch/switch.class.d.ts +6 -5
  140. package/dist/components/forms/switch/switch.class.js +1 -1
  141. package/dist/components/forms/time-range/time-range.class.d.ts +2 -2
  142. package/dist/components/forms/token-input/token-input.class.d.ts +13 -3
  143. package/dist/components/forms/token-input/token-input.class.js +3 -1
  144. package/dist/components/layout/carousel/carousel.class.d.ts +4 -1
  145. package/dist/components/layout/carousel/carousel.class.js +1 -1
  146. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -2
  147. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  148. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  149. package/dist/components/layout/details/accordion.class.js +1 -1
  150. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +10 -7
  151. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -2
  152. package/dist/components/layout/dock-panel/dock-panel.styles.js +1 -1
  153. package/dist/components/layout/menu/menu.class.d.ts +13 -3
  154. package/dist/components/layout/menu/menu.class.js +4 -3
  155. package/dist/components/layout/menu/menu.styles.js +1 -1
  156. package/dist/components/layout/page/page.class.d.ts +7 -1
  157. package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
  158. package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
  159. package/dist/components/layout/segmented/segmented.class.d.ts +2 -0
  160. package/dist/components/layout/segmented/segmented.styles.js +1 -1
  161. package/dist/components/layout/virtual-list/virtual-list.styles.js +1 -1
  162. package/dist/components/layout/widget/widget.class.d.ts +15 -2
  163. package/dist/components/layout/widget/widget.class.js +1 -1
  164. package/dist/components/layout/widget/widget.styles.js +1 -1
  165. package/dist/components/media/avatar/avatar.class.d.ts +4 -0
  166. package/dist/components/media/avatar/avatar.styles.js +1 -1
  167. package/dist/components/media/avatar-group/avatar-group.class.d.ts +8 -1
  168. package/dist/components/media/avatar-group/avatar-group.styles.js +1 -1
  169. package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -4
  170. package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
  171. package/dist/components/media/drop-zone/drop-zone.styles.js +1 -1
  172. package/dist/components/media/flag/flag.class.js +1 -1
  173. package/dist/components/media/map/map.class.d.ts +19 -5
  174. package/dist/components/media/map/map.class.js +3 -3
  175. package/dist/components/media/video-playlist/video-playlist.class.d.ts +6 -3
  176. package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
  177. package/dist/components/overlays/callout/callout.class.d.ts +4 -1
  178. package/dist/components/overlays/dialog/dialog.class.d.ts +4 -1
  179. package/dist/components/overlays/overlay/overlay.styles.js +1 -1
  180. package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
  181. package/dist/components/overlays/overlay/popover.class.js +3 -2
  182. package/dist/components/overlays/overlay/tooltip.class.d.ts +14 -4
  183. package/dist/components/overlays/overlay/tooltip.class.js +3 -2
  184. package/dist/components/overlays/popup/popup.class.d.ts +15 -1
  185. package/dist/components/overlays/popup/popup.class.js +3 -3
  186. package/dist/components/overlays/popup/popup.styles.js +1 -1
  187. package/dist/components/overlays/progress/progress-bar.class.d.ts +2 -0
  188. package/dist/components/overlays/progress/progress.styles.js +1 -1
  189. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +4 -2
  190. package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
  191. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +4 -0
  192. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -3
  193. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +1 -1
  194. package/dist/components/retrieval/community-card/community-card.class.d.ts +6 -1
  195. package/dist/components/retrieval/community-card/community-card.styles.js +1 -1
  196. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +9 -1
  197. package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +4 -3
  198. package/dist/components/retrieval/entity-card/entity-card.styles.js +1 -1
  199. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
  200. package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
  201. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +2 -2
  202. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +18 -4
  203. package/dist/components/retrieval/graph-legend/graph-legend.class.js +2 -2
  204. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +7 -0
  205. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +4 -3
  206. package/dist/components/retrieval/grounding-summary/grounding-summary.styles.js +1 -1
  207. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -0
  208. package/dist/components/retrieval/memory-panel/memory-panel.class.js +4 -3
  209. package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
  210. package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +17 -1
  211. package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
  212. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +8 -1
  213. package/dist/components/retrieval/mind-map/mind-map.class.js +3 -2
  214. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +5 -0
  215. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +6 -5
  216. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
  217. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +5 -5
  218. package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
  219. package/dist/components/retrieval/source-list/source-list.class.d.ts +21 -2
  220. package/dist/components/retrieval/source-list/source-list.class.js +2 -2
  221. package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
  222. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +3 -1
  223. package/dist/components/retrieval/source-picker/source-picker.class.js +2 -2
  224. package/dist/components/utility/diff-view/diff-view.class.d.ts +105 -8
  225. package/dist/components/utility/diff-view/diff-view.class.js +21 -5
  226. package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
  227. package/dist/components/utility/export-button/export-button.class.d.ts +26 -2
  228. package/dist/components/utility/export-button/export-button.class.js +4 -2
  229. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  230. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +19 -1
  231. package/dist/components/utility/mention-popover/mention-popover.class.js +3 -2
  232. package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
  233. package/dist/components/utility/tour/tour.class.d.ts +1 -3
  234. package/dist/components/utility/tour/tour.class.js +1 -1
  235. package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +20 -3
  236. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  237. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  238. package/dist/components/viewers/geojson-view/geojson-view.styles.js +1 -1
  239. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +5 -0
  240. package/dist/components/viewers/geojson-view/geojson-viewer.class.js +6 -3
  241. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +7 -1
  242. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
  243. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +7 -1
  244. package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
  245. package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +5 -0
  246. package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
  247. package/dist/custom-elements-jsx.d.ts +1 -1
  248. package/dist/events.d.ts +79 -30
  249. package/dist/internal/accessibility-visibility.js +1 -1
  250. package/dist/internal/aria-reflection.js +1 -1
  251. package/dist/internal/catalog-picker.d.ts +14 -3
  252. package/dist/internal/catalog-picker.js +1 -1
  253. package/dist/internal/default-strings.generated.d.ts +1 -1
  254. package/dist/internal/default-strings.generated.js +2 -2
  255. package/dist/internal/localization-types.d.ts +1 -1
  256. package/dist/internal/localization.js +2 -2
  257. package/dist/internal/lyra-element.d.ts +17 -0
  258. package/dist/internal/lyra-element.js +2 -2
  259. package/dist/internal/package-metadata.d.ts +1 -1
  260. package/dist/internal/package-metadata.js +1 -1
  261. package/dist/svelte.d.ts +1 -1
  262. package/dist/testing/lyra-tag-event-map.js +1 -1
  263. package/dist/translations/ar/agent-tools.js +1 -1
  264. package/dist/translations/ar/data.js +1 -1
  265. package/dist/translations/ar/retrieval.js +1 -1
  266. package/dist/translations/ar/shared.js +1 -1
  267. package/dist/translations/ar/viewers.js +1 -1
  268. package/dist/translations/de/agent-tools.js +1 -1
  269. package/dist/translations/de/data.js +1 -1
  270. package/dist/translations/de/retrieval.js +1 -1
  271. package/dist/translations/de/shared.js +1 -1
  272. package/dist/translations/de/viewers.js +1 -1
  273. package/dist/translations/es/agent-tools.js +1 -1
  274. package/dist/translations/es/data.js +1 -1
  275. package/dist/translations/es/retrieval.js +1 -1
  276. package/dist/translations/es/shared.js +1 -1
  277. package/dist/translations/es/viewers.js +1 -1
  278. package/dist/translations/fa/agent-tools.js +1 -1
  279. package/dist/translations/fa/data.js +1 -1
  280. package/dist/translations/fa/retrieval.js +1 -1
  281. package/dist/translations/fa/shared.js +1 -1
  282. package/dist/translations/fa/viewers.js +1 -1
  283. package/dist/translations/fr/agent-tools.js +1 -1
  284. package/dist/translations/fr/data.js +1 -1
  285. package/dist/translations/fr/retrieval.js +1 -1
  286. package/dist/translations/fr/shared.js +1 -1
  287. package/dist/translations/fr/viewers.js +1 -1
  288. package/dist/translations/he/agent-tools.js +1 -1
  289. package/dist/translations/he/data.js +1 -1
  290. package/dist/translations/he/retrieval.js +1 -1
  291. package/dist/translations/he/shared.js +1 -1
  292. package/dist/translations/he/viewers.js +1 -1
  293. package/dist/translations/it/agent-tools.js +1 -1
  294. package/dist/translations/it/data.js +1 -1
  295. package/dist/translations/it/retrieval.js +1 -1
  296. package/dist/translations/it/shared.js +1 -1
  297. package/dist/translations/it/viewers.js +1 -1
  298. package/dist/translations/ja/agent-tools.js +1 -1
  299. package/dist/translations/ja/data.js +1 -1
  300. package/dist/translations/ja/retrieval.js +1 -1
  301. package/dist/translations/ja/shared.js +1 -1
  302. package/dist/translations/ja/viewers.js +1 -1
  303. package/dist/translations/pt-BR/agent-tools.js +1 -1
  304. package/dist/translations/pt-BR/data.js +1 -1
  305. package/dist/translations/pt-BR/retrieval.js +1 -1
  306. package/dist/translations/pt-BR/shared.js +1 -1
  307. package/dist/translations/pt-BR/viewers.js +1 -1
  308. package/dist/translations/ro/agent-tools.js +1 -1
  309. package/dist/translations/ro/data.js +1 -1
  310. package/dist/translations/ro/retrieval.js +1 -1
  311. package/dist/translations/ro/shared.js +1 -1
  312. package/dist/translations/ro/viewers.js +1 -1
  313. package/dist/translations/ru/agent-tools.js +1 -1
  314. package/dist/translations/ru/data.js +1 -1
  315. package/dist/translations/ru/retrieval.js +1 -1
  316. package/dist/translations/ru/shared.js +1 -1
  317. package/dist/translations/ru/viewers.js +1 -1
  318. package/dist/translations/zh-CN/agent-tools.js +1 -1
  319. package/dist/translations/zh-CN/data.js +1 -1
  320. package/dist/translations/zh-CN/retrieval.js +1 -1
  321. package/dist/translations/zh-CN/shared.js +1 -1
  322. package/dist/translations/zh-CN/viewers.js +1 -1
  323. package/dist/vue.d.ts +1 -1
  324. package/llms/components/lr-activity-feed.md +20 -9
  325. package/llms/components/lr-approval-queue.md +3 -2
  326. package/llms/components/lr-archive-viewer.md +8 -1
  327. package/llms/components/lr-artifact-panel.md +3 -1
  328. package/llms/components/lr-audio-visualizer.md +3 -1
  329. package/llms/components/lr-avatar-group.md +13 -6
  330. package/llms/components/lr-avatar.md +6 -2
  331. package/llms/components/lr-bar-chart.md +6 -3
  332. package/llms/components/lr-box-plot.md +6 -2
  333. package/llms/components/lr-branch-picker.md +3 -1
  334. package/llms/components/lr-bubble-chart.md +6 -3
  335. package/llms/components/lr-calendar.md +10 -3
  336. package/llms/components/lr-carousel.md +4 -2
  337. package/llms/components/lr-chart.md +12 -4
  338. package/llms/components/lr-chat-viewport.md +3 -2
  339. package/llms/components/lr-checkbox.md +8 -5
  340. package/llms/components/lr-citation-badge.md +2 -0
  341. package/llms/components/lr-claim-evidence.md +6 -2
  342. package/llms/components/lr-code-editor.md +3 -1
  343. package/llms/components/lr-color-picker.md +20 -8
  344. package/llms/components/lr-combobox.md +26 -3
  345. package/llms/components/lr-command-palette.md +6 -3
  346. package/llms/components/lr-community-card.md +7 -4
  347. package/llms/components/lr-context-inspector.md +3 -2
  348. package/llms/components/lr-context-meter.md +13 -5
  349. package/llms/components/lr-data-grid.md +2 -0
  350. package/llms/components/lr-date-input.md +12 -3
  351. package/llms/components/lr-date-picker.md +11 -2
  352. package/llms/components/lr-diff-view.md +46 -5
  353. package/llms/components/lr-doughnut-chart.md +6 -3
  354. package/llms/components/lr-drop-zone.md +7 -3
  355. package/llms/components/lr-embedding-explorer.md +8 -2
  356. package/llms/components/lr-emoji-picker.md +5 -1
  357. package/llms/components/lr-entity-chip.md +2 -0
  358. package/llms/components/lr-eval-run.md +3 -2
  359. package/llms/components/lr-export-button.md +5 -2
  360. package/llms/components/lr-flow-node.md +7 -4
  361. package/llms/components/lr-funnel.md +7 -2
  362. package/llms/components/lr-gauge.md +7 -2
  363. package/llms/components/lr-geojson-view.md +10 -2
  364. package/llms/components/lr-geojson-viewer.md +10 -2
  365. package/llms/components/lr-graph-legend.md +6 -3
  366. package/llms/components/lr-graph-query-builder.md +21 -11
  367. package/llms/components/lr-grounding-summary.md +8 -2
  368. package/llms/components/lr-heatmap.md +5 -2
  369. package/llms/components/lr-histogram.md +4 -2
  370. package/llms/components/lr-json-schema-viewer.md +7 -5
  371. package/llms/components/lr-line-chart.md +6 -3
  372. package/llms/components/lr-locale-picker.md +4 -1
  373. package/llms/components/lr-map.md +5 -3
  374. package/llms/components/lr-memory-panel.md +6 -2
  375. package/llms/components/lr-mention-popover.md +7 -4
  376. package/llms/components/lr-message-actions.md +3 -1
  377. package/llms/components/lr-message-parts.md +8 -2
  378. package/llms/components/lr-mind-map.md +11 -2
  379. package/llms/components/lr-option.md +25 -2
  380. package/llms/components/lr-otp-input.md +3 -1
  381. package/llms/components/lr-phone-input.md +9 -5
  382. package/llms/components/lr-pie-chart.md +6 -3
  383. package/llms/components/lr-polar-area-chart.md +6 -3
  384. package/llms/components/lr-policy-summary.md +3 -2
  385. package/llms/components/lr-progress-bar.md +4 -1
  386. package/llms/components/lr-prompt-input.md +4 -1
  387. package/llms/components/lr-prompt-queue.md +5 -2
  388. package/llms/components/lr-radar-chart.md +6 -3
  389. package/llms/components/lr-rag-eval-dashboard.md +7 -2
  390. package/llms/components/lr-realtime-session.md +3 -1
  391. package/llms/components/lr-rubric-form.md +6 -1
  392. package/llms/components/lr-scatter-chart.md +6 -3
  393. package/llms/components/lr-segmented.md +3 -1
  394. package/llms/components/lr-select.md +7 -1
  395. package/llms/components/lr-selection-toolbar.md +4 -1
  396. package/llms/components/lr-sequence-strip.md +7 -3
  397. package/llms/components/lr-source-card.md +16 -1
  398. package/llms/components/lr-source-list.md +17 -2
  399. package/llms/components/lr-source-picker.md +3 -1
  400. package/llms/components/lr-subagent-panel.md +6 -3
  401. package/llms/components/lr-switch.md +4 -3
  402. package/llms/components/lr-table.md +6 -1
  403. package/llms/components/lr-thinking-panel.md +8 -5
  404. package/llms/components/lr-token-input.md +15 -1
  405. package/llms/components/lr-tool-call-chip.md +2 -0
  406. package/llms/components/lr-tool-param-form.md +15 -4
  407. package/llms/components/lr-tooltip.md +8 -4
  408. package/llms/components/lr-trace-tree.md +7 -4
  409. package/llms/components/lr-video-playlist.md +7 -5
  410. package/llms/components/lr-voice-picker.md +7 -4
  411. package/llms/components/lr-widget.md +15 -2
  412. package/llms/migration.md +4 -4
  413. package/llms-full.txt +552 -159
  414. package/package.json +11 -9
  415. package/registrations.json +1 -1
  416. package/vscode-css-data.json +1 -1
  417. package/vscode-html-data.json +1 -1
  418. package/web-types.json +1 -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}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]}
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_memoryPanelItemsLimit,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,MAX_RENDERED_MEMORY_ITEMS=500,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,memoryPanelItemsLimit:LYRA_DEFAULT_memoryPanelItemsLimit,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
@@ -91,8 +91,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
91
91
  ${scope==="long-term"&&this.normalizedLongTerm.length>0?this.renderForgetAllControl():nothing}
92
92
  </div>
93
93
  ${items.length===0?html`<p part="section-empty">${this.localize("noData")}</p>`:html`<div part="list" role="list" aria-labelledby=${headingId}>
94
- ${items.map((item,index)=>this.renderItem(item,scope,index))}
95
- </div>`}
94
+ ${items.slice(0,MAX_RENDERED_MEMORY_ITEMS).map((item,index)=>this.renderItem(item,scope,index))}
95
+ </div>
96
+ ${items.length>MAX_RENDERED_MEMORY_ITEMS?html`<p part="limit" role="note">${this.localize("memoryPanelItemsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_MEMORY_ITEMS)})}</p>`:nothing}`}
96
97
  </section>
97
98
  `}render(){const shortTerm=this.normalizedShortTerm,longTerm=this.normalizedLongTerm,allEmpty=shortTerm.length===0&&longTerm.length===0,groupLabel=retrievalSemanticLabel(this,this.label==null?this.localize("memoryPanelLabel"):this.label),groupRole=retrievalSemanticRole(this,"group");return allEmpty?html`<div
98
99
  part="base"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{gap:var(--lr-space-l);flex-direction:column;display:flex}[part=section]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=section-header]{justify-content:space-between;align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=heading]{color:var(--lr-color-text);font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);margin:0}[part=section-empty]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);margin:0}[part=list]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=item]{gap:var(--lr-space-xs);min-inline-size:0;padding: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);flex-direction:column;display:flex}[part=item]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=item-row]{align-items:baseline;gap:var(--lr-space-xs);flex-wrap:wrap;min-inline-size:0;display:flex}[part=item-text]{min-inline-size:var(--lr-size-6ch);color:var(--lr-color-text);font-size:var(--lr-font-size-sm);overflow-wrap:anywhere;flex:auto;margin:0}[part=confidence]{font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-medium);flex:none}[part=confidence][data-tone=success]{color:var(--lr-memory-panel-confidence-success-color,var(--lr-color-success))}[part=confidence][data-tone=warning]{color:var(--lr-memory-panel-confidence-warning-color,var(--lr-color-warning))}[part=confidence][data-tone=danger]{color:var(--lr-memory-panel-confidence-danger-color,var(--lr-color-danger))}[part=expand-toggle]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-brand);font:inherit;font-size:var(--lr-font-size-xs);cursor:pointer;transition:background-color var(--lr-transition-fast);background:0 0;border:none;align-self:flex-start;padding:0}[part=expand-toggle]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=expand-toggle]:hover{text-decoration:underline}[part=expand-toggle]:active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));text-decoration:underline}[part=item-body]{border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);padding-block-start:var(--lr-space-xs)}[part=item-body][hidden]{display:none}[part=item-actions]{justify-content:flex-end;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=item-actions] lr-confirm-bar{inline-size:100%}[part=add-button],[part=remove-button],[part=forget-all-button]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding-inline:var(--lr-space-s);padding-block:var(--lr-space-2xs);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;font-size:var(--lr-font-size-xs);cursor:pointer;transition:background-color var(--lr-transition-fast)}[part=add-button]:focus-visible,[part=remove-button]:focus-visible,[part=forget-all-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=add-button]:hover,[part=remove-button]:hover,[part=forget-all-button]:hover{background:var(--lr-color-brand-quiet)}[part=add-button]:active,[part=remove-button]:active,[part=forget-all-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=forget-all-button]{color:var(--lr-color-danger);border-color:var(--lr-color-danger)}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{gap:var(--lr-space-l);flex-direction:column;display:flex}[part=section]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=section-header]{justify-content:space-between;align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=heading]{color:var(--lr-color-text);font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);margin:0}[part=section-empty]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);margin:0}[part=list]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=item]{gap:var(--lr-space-xs);min-inline-size:0;padding: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);flex-direction:column;display:flex}[part=item]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=item-row]{align-items:baseline;gap:var(--lr-space-xs);flex-wrap:wrap;min-inline-size:0;display:flex}[part=item-text]{min-inline-size:var(--lr-size-6ch);color:var(--lr-color-text);font-size:var(--lr-font-size-sm);overflow-wrap:anywhere;flex:auto;margin:0}[part=confidence]{font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-medium);flex:none}[part=confidence][data-tone=success]{color:var(--lr-memory-panel-confidence-success-color,var(--lr-color-success))}[part=confidence][data-tone=warning]{color:var(--lr-memory-panel-confidence-warning-color,var(--lr-color-warning))}[part=confidence][data-tone=danger]{color:var(--lr-memory-panel-confidence-danger-color,var(--lr-color-danger))}[part=expand-toggle]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-brand);font:inherit;font-size:var(--lr-font-size-xs);cursor:pointer;transition:background-color var(--lr-transition-fast);background:0 0;border:none;align-self:flex-start;padding:0}[part=expand-toggle]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=expand-toggle]:hover{text-decoration:underline}[part=expand-toggle]:active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));text-decoration:underline}[part=item-body]{border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);padding-block-start:var(--lr-space-xs)}[part=item-body][hidden]{display:none}[part=item-actions]{justify-content:flex-end;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=item-actions] lr-confirm-bar{inline-size:100%}[part=add-button],[part=remove-button],[part=forget-all-button]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding-inline:var(--lr-space-s);padding-block:var(--lr-space-2xs);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;font-size:var(--lr-font-size-xs);cursor:pointer;transition:background-color var(--lr-transition-fast)}[part=add-button]:focus-visible,[part=remove-button]:focus-visible,[part=forget-all-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=add-button]:hover,[part=remove-button]:hover,[part=forget-all-button]:hover{background:var(--lr-color-brand-quiet)}[part=add-button]:active,[part=remove-button]:active,[part=forget-all-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=forget-all-button]{color:var(--lr-color-danger);border-color:var(--lr-color-danger)}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}`;export{styles};
@@ -14,7 +14,9 @@ ringGap:number;rtl:boolean;isExpanded:(id:string,depth:number)=>boolean;}export
14
14
  /** viewBox width/height, auto-fit to the laid-out extent with padding. */
15
15
  width:number;height:number;
16
16
  /** The root/hub's position within the shifted (viewBox-relative) coordinate space. */
17
- centerX:number;centerY:number;}
17
+ centerX:number;centerY:number;}export interface DecimatedMindMapLayout{placed:readonly PlacedTopic[];links:readonly{fromId:string;toId:string;}[];
18
+ /** The full currently-visible node count before decimation (what "of M" reports). */
19
+ totalCount:number;truncated:boolean;}
18
20
  /**
19
21
  * Lays out `topics` as a radial tree: root at the center, each depth ring at radius `depth *
20
22
  * ringGap`, each parent's children dividing its own inherited angular arc proportionally to their
@@ -24,3 +26,17 @@ centerX:number;centerY:number;}
24
26
  * `<lr-mind-map>` for the component wrapping this.
25
27
  */
26
28
  export declare function layoutMindMap(topics:readonly LyraTopic[],hubLabel:string,opts:MindMapLayoutOptions):MindMapLayoutResult;
29
+ /**
30
+ * Deterministically decimates an already-laid-out, currently-visible topic set (`placed`, in the
31
+ * depth-first order `place()` produces) down to at most `maxNodes`, two invariants held
32
+ * throughout: a kept node's parent (if any) is always kept too -- so the surviving set is always
33
+ * a connected sub-tree, never floating orphans with a dangling `link` or a gap in the semantic
34
+ * `role="tree"` walk -- and each parent's own child budget is apportioned to its children in
35
+ * proportion to each child's subtree size via `apportionByWeight()`, so a large branch keeps
36
+ * proportionally more of its own nodes than a small one and a flat/wide branch is sampled evenly
37
+ * across its whole child list, rather than the tail of the array being dropped outright. Geometry
38
+ * (`x`/`y`/`angle`) on a surviving node is untouched -- it keeps the position the full layout gave
39
+ * it, so the decimated result still reads as a sample of the true radial density rather than
40
+ * nodes redrawn to fill the resulting gaps.
41
+ */
42
+ export declare function decimateMindMapLayout(placed:readonly PlacedTopic[],links:readonly{fromId:string;toId:string;}[],maxNodes:number):DecimatedMindMapLayout;
@@ -1 +1 @@
1
- import{minMax}from"../../data/heatmap/heatmap-scale.js";import{isNonBlankIdentity}from"../retrieval-identity.js";function normalizeMindMapTopics(topics){const seen=new Set,normalize=values=>{const source=Array.isArray(values)?values:[],retained=[];for(const topic of source){if(topic===null||typeof topic!="object"||!isNonBlankIdentity(topic.id)||seen.has(topic.id))continue;seen.add(topic.id);const children=normalize(topic.children??[]);retained.push(Object.freeze({...topic,...topic.children===void 0?{}:{children}}))}return Object.freeze(retained)};return normalize(topics)}const LAYOUT_PADDING=60;function syntheticHubIdentity(topics){const ids=new Set,collect=values=>{for(const topic of values)ids.add(topic.id),collect(topic.children??[])};collect(topics);let identity="__hub__";for(;ids.has(identity);)identity=`_${identity}`;return identity}function visibleLeafCount(node,depth,opts){const children=node.children??[];return children.length===0||!opts.isExpanded(node.id,depth)?1:Math.max(1,children.reduce((sum,c)=>sum+visibleLeafCount(c,depth+1,opts),0))}function place(node,depth,angleStart,angleEnd,parentId,cx,cy,opts,out,links){const angle=(angleStart+angleEnd)/2,r=depth*opts.ringGap,dir=opts.rtl?-1:1,x=cx+dir*r*Math.sin(angle),y=cy-r*Math.cos(angle),hasChildren=node.children.length>0,expanded=hasChildren&&opts.isExpanded(node.id,depth);if(out.push({id:node.id,label:node.label,depth,x,y,angle,parentId,hasChildren,expanded}),parentId&&links.push({fromId:parentId,toId:node.id}),!hasChildren||!expanded)return;const counts=node.children.map(c=>visibleLeafCount(c,depth+1,opts)),total=counts.reduce((a,b)=>a+b,0)||1,span=angleEnd-angleStart;let cursor=angleStart;node.children.forEach((child,i)=>{const childSpan=counts[i]/total*span;place({id:child.id,label:child.label,children:child.children??[]},depth+1,cursor,cursor+childSpan,node.id,cx,cy,opts,out,links),cursor+=childSpan})}function layoutMindMap(topics,hubLabel,opts){const normalizedTopics=normalizeMindMapTopics(topics);if(normalizedTopics.length===0)return{placed:[],links:[],width:0,height:0,centerX:0,centerY:0};const root=normalizedTopics.length===1?{id:normalizedTopics[0].id,label:normalizedTopics[0].label,children:normalizedTopics[0].children??[]}:{id:syntheticHubIdentity(normalizedTopics),label:hubLabel,children:normalizedTopics},placed=[],links=[];place(root,0,0,2*Math.PI,null,0,0,opts,placed,links);const[xLo,xHi]=minMax(placed.map(p=>p.x))??[0,0],[yLo,yHi]=minMax(placed.map(p=>p.y))??[0,0],minX=xLo-LAYOUT_PADDING,maxX=xHi+LAYOUT_PADDING,minY=yLo-LAYOUT_PADDING,maxY=yHi+LAYOUT_PADDING;return{placed:placed.map(p=>({...p,x:p.x-minX,y:p.y-minY})),links,width:maxX-minX,height:maxY-minY,centerX:-minX,centerY:-minY}}export{layoutMindMap};
1
+ import{minMax}from"../../data/heatmap/heatmap-scale.js";import{isNonBlankIdentity}from"../retrieval-identity.js";function normalizeMindMapTopics(topics){const seen=new Set,normalize=values=>{const source=Array.isArray(values)?values:[],retained=[];for(const topic of source){if(topic===null||typeof topic!="object"||!isNonBlankIdentity(topic.id)||seen.has(topic.id))continue;seen.add(topic.id);const children=normalize(topic.children??[]);retained.push(Object.freeze({...topic,...topic.children===void 0?{}:{children}}))}return Object.freeze(retained)};return normalize(topics)}const LAYOUT_PADDING=60;function syntheticHubIdentity(topics){const ids=new Set,collect=values=>{for(const topic of values)ids.add(topic.id),collect(topic.children??[])};collect(topics);let identity="__hub__";for(;ids.has(identity);)identity=`_${identity}`;return identity}function visibleLeafCount(node,depth,opts){const children=node.children??[];return children.length===0||!opts.isExpanded(node.id,depth)?1:Math.max(1,children.reduce((sum,c)=>sum+visibleLeafCount(c,depth+1,opts),0))}function place(node,depth,angleStart,angleEnd,parentId,cx,cy,opts,out,links){const angle=(angleStart+angleEnd)/2,r=depth*opts.ringGap,dir=opts.rtl?-1:1,x=cx+dir*r*Math.sin(angle),y=cy-r*Math.cos(angle),hasChildren=node.children.length>0,expanded=hasChildren&&opts.isExpanded(node.id,depth);if(out.push({id:node.id,label:node.label,depth,x,y,angle,parentId,hasChildren,expanded}),parentId&&links.push({fromId:parentId,toId:node.id}),!hasChildren||!expanded)return;const counts=node.children.map(c=>visibleLeafCount(c,depth+1,opts)),total=counts.reduce((a,b)=>a+b,0)||1,span=angleEnd-angleStart;let cursor=angleStart;node.children.forEach((child,i)=>{const childSpan=counts[i]/total*span;place({id:child.id,label:child.label,children:child.children??[]},depth+1,cursor,cursor+childSpan,node.id,cx,cy,opts,out,links),cursor+=childSpan})}function layoutMindMap(topics,hubLabel,opts){const normalizedTopics=normalizeMindMapTopics(topics);if(normalizedTopics.length===0)return{placed:[],links:[],width:0,height:0,centerX:0,centerY:0};const root=normalizedTopics.length===1?{id:normalizedTopics[0].id,label:normalizedTopics[0].label,children:normalizedTopics[0].children??[]}:{id:syntheticHubIdentity(normalizedTopics),label:hubLabel,children:normalizedTopics},placed=[],links=[];place(root,0,0,2*Math.PI,null,0,0,opts,placed,links);const[xLo,xHi]=minMax(placed.map(p=>p.x))??[0,0],[yLo,yHi]=minMax(placed.map(p=>p.y))??[0,0],minX=xLo-LAYOUT_PADDING,maxX=xHi+LAYOUT_PADDING,minY=yLo-LAYOUT_PADDING,maxY=yHi+LAYOUT_PADDING;return{placed:placed.map(p=>({...p,x:p.x-minX,y:p.y-minY})),links,width:maxX-minX,height:maxY-minY,centerX:-minX,centerY:-minY}}function apportionByWeight(weights,budget){const shares=weights.map(()=>0),total=weights.reduce((sum,weight)=>sum+weight,0);if(total<=0||budget<=0||weights.length===0)return shares;const sampleCount=Math.min(budget,total),step=total/sampleCount;let childIndex=0,boundary=weights[0];for(let sample=0;sample<sampleCount;sample++){const target=(sample+.5)*step;for(;target>=boundary&&childIndex<weights.length-1;)childIndex+=1,boundary+=weights[childIndex];shares[childIndex]=shares[childIndex]+1}return shares}function decimateMindMapLayout(placed,links,maxNodes){const totalCount=placed.length;if(totalCount<=maxNodes||maxNodes<=0)return{placed:[...placed],links:[...links],totalCount,truncated:!1};const childrenByParent=new Map;for(const node of placed){const siblings=childrenByParent.get(node.parentId);siblings?siblings.push(node):childrenByParent.set(node.parentId,[node])}const subtreeSizeCache=new Map,subtreeSize=id=>{const cached=subtreeSizeCache.get(id);if(cached!==void 0)return cached;subtreeSizeCache.set(id,1);const children=childrenByParent.get(id)??[];let total=1;for(const child of children)total+=subtreeSize(child.id);return subtreeSizeCache.set(id,total),total},kept=new Set,visit=(node,budget)=>{if(budget<=0)return;kept.add(node.id);const children=childrenByParent.get(node.id)??[];if(children.length===0||budget<=1)return;const shares=apportionByWeight(children.map(child=>subtreeSize(child.id)),budget-1);children.forEach((child,index)=>visit(child,shares[index]))},roots=childrenByParent.get(null)??[],rootShares=apportionByWeight(roots.map(root=>subtreeSize(root.id)),maxNodes);return roots.forEach((root,index)=>visit(root,rootShares[index])),{placed:placed.filter(node=>kept.has(node.id)),links:links.filter(link=>kept.has(link.fromId)&&kept.has(link.toId)),totalCount,truncated:!0}}export{decimateMindMapLayout,layoutMindMap};
@@ -26,6 +26,10 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
26
26
  * first placed topic is seeded as the keyboard cursor) rather than only after the first arrow key.
27
27
  * @csspart live-region - The visually hidden announcement region.
28
28
  * @csspart empty - The empty-state message, shown when `topics` is empty.
29
+ * @csspart limit - The "showing N of M" notice, present only once the currently-visible topic
30
+ * count exceeds the render cap. The rendered subset is a deterministic, connectivity-preserving,
31
+ * subtree-size-weighted sample of the full visible set (never floating nodes with no path back
32
+ * to the root), so both the SVG and the parallel sr-only tree stay representative above the cap.
29
33
  * @cssprop [--lr-mind-map-ring-gap=6rem] - Radius step per depth ring.
30
34
  * @cssprop [--lr-mind-map-node-hover-halo=var(--lr-color-brand-quiet)] - Stroke color of the
31
35
  * hover halo drawn around a topic node's dot, giving mouse users the same "this is clickable"
@@ -46,7 +50,10 @@ expandDepth:number;private svgEl?;
46
50
  /** Explicit user overrides only -- the default (`depth < expandDepth`) is computed at read time
47
51
  * in `isExpanded()`, so a user can override in either direction without losing the override on
48
52
  * a later `topics` reassignment that reintroduces the same id. */
49
- private expandedOverrides;private focusedId;private liveText;private cachedLayout;private resizeObserver?;private resizeObserverDocument?;private resizeRafId?;private resizeRafOwner?;private resizeRafDocument?;private ownerRealmGeneration;private observedSize;private layoutInvalidated;private layoutContext;private announcementSink?;connectedCallback():void;private armResizeObserver;disconnectedCallback():void;adoptedCallback():void;private resetResizeWork;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void;
53
+ private expandedOverrides;private focusedId;private liveText;private cachedLayout;
54
+ /** The currently-visible (per expand state) topic count before `MAX_RENDERED_MIND_MAP_NODES`
55
+ * decimation -- the "of M" half of the truncation notice. */
56
+ private totalTopicCount;private topicsTruncated;private resizeObserver?;private resizeObserverDocument?;private resizeRafId?;private resizeRafOwner?;private resizeRafDocument?;private ownerRealmGeneration;private observedSize;private layoutInvalidated;private layoutContext;private announcementSink?;connectedCallback():void;private armResizeObserver;disconnectedCallback():void;adoptedCallback():void;private resetResizeWork;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void;
50
57
  /** `expandDepth`, normalized to a finite non-negative integer (falling back to the property's own
51
58
  * default of `1`) -- a raw `NaN` (e.g. an invalid `expand-depth` attribute) would otherwise make
52
59
  * every `depth < expandDepth` comparison false, silently collapsing every ring instead of just
@@ -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,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{isRtl}from"../../../internal/rtl.js";import{finiteCount}from"../../../internal/numbers.js";import{resolveCssLength}from"../../../internal/css-length.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{layoutMindMap}from"./mind-map-layout.js";import{styles}from"./mind-map.styles.js";import{LYRA_DEFAULT_mindMapCollapsed,LYRA_DEFAULT_mindMapExpanded,LYRA_DEFAULT_mindMapLabel,LYRA_DEFAULT_mindMapLeafStatus,LYRA_DEFAULT_mindMapTopicStatus,LYRA_DEFAULT_noData}from"../../../internal/default-strings.generated.js";const DEFAULT_RING_GAP_PX=96,NAV_KEYS=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","Enter"," "]);class LyraMindMap extends LyraElement{constructor(){super(...arguments),this.topics=[],this.expandDepth=1,this.expandedOverrides=new Map,this.focusedId=null,this.liveText="",this.cachedLayout={placed:[],links:[],width:0,height:0,centerX:0,centerY:0},this.ownerRealmGeneration=0,this.observedSize="",this.layoutInvalidated=!0,this.layoutContext="",this.onKeyDown=e=>{const placed=this.cachedLayout.placed;if(placed.length===0||!NAV_KEYS.has(e.key))return;if(e.preventDefault(),this.focusedId===null){this.focusNodeById(placed[0].id);return}const current=placed.find(p=>p.id===this.focusedId);if(!current)return;if(e.key==="Enter"||e.key===" "){this.activate(current);return}if(e.key==="ArrowUp"){current.parentId&&this.focusNodeById(current.parentId);return}if(e.key==="ArrowDown"){if(!current.hasChildren)return;this.isExpanded(current.id,current.depth)||this.toggle(current,!1);const child=this.childrenOf(current.id)[0];child&&this.focusNodeById(child.id);return}const rtl=isRtl(this),forwardKey=rtl?"ArrowLeft":"ArrowRight",backwardKey=rtl?"ArrowRight":"ArrowLeft";if(e.key===forwardKey||e.key===backwardKey||e.key==="Home"||e.key==="End"){const siblings=this.siblingsOf(current),index=siblings.findIndex(s=>s.id===current.id);let next=index;e.key===forwardKey?next=Math.min(siblings.length-1,index+1):e.key===backwardKey?next=Math.max(0,index-1):e.key==="Home"?next=0:next=siblings.length-1;const target=siblings[next];target&&this.focusNodeById(target.id)}},this.onFocusIn=()=>{if(this.focusedId!==null)return;const first=this.cachedLayout.placed[0];first&&(this.focusedId=first.id)}}static{this.defaultStrings={...super.defaultStrings,mindMapCollapsed:LYRA_DEFAULT_mindMapCollapsed,mindMapExpanded:LYRA_DEFAULT_mindMapExpanded,mindMapLabel:LYRA_DEFAULT_mindMapLabel,mindMapLeafStatus:LYRA_DEFAULT_mindMapLeafStatus,mindMapTopicStatus:LYRA_DEFAULT_mindMapTopicStatus,noData:LYRA_DEFAULT_noData}}static{this.ownedCollectionProperties=Object.freeze(["topics"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static get observedAttributes(){return[...new Set([...super.observedAttributes,"dir","lang"])]}connectedCallback(){super.connectedCallback(),this.announcementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.layoutInvalidated=!0,this.armResizeObserver()}armResizeObserver(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!this.isConnected||!ownerWindow?.ResizeObserver||this.resizeObserver&&this.resizeObserverDocument===ownerDocument)return;this.resetResizeWork();const generation=this.ownerRealmGeneration,observer=new ownerWindow.ResizeObserver(entries=>{if(this.resizeObserver!==observer||this.resizeObserverDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;const rect=entries[0]?.contentRect,size=rect?`${rect.width}:${rect.height}`:"";if(size&&size===this.observedSize)return;this.observedSize=size,this.resizeRafId!=null&&this.resizeRafOwner?.cancelAnimationFrame(this.resizeRafId);const handle=ownerWindow.requestAnimationFrame(()=>{this.resizeRafId!==handle||this.resizeRafOwner!==ownerWindow||this.resizeRafDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.resizeRafId=void 0,this.resizeRafOwner=void 0,this.resizeRafDocument=void 0,this.layoutInvalidated=!0,this.requestUpdate())});this.resizeRafId=handle,this.resizeRafOwner=ownerWindow,this.resizeRafDocument=ownerDocument});this.resizeObserver=observer,this.resizeObserverDocument=ownerDocument,observer.observe(this)}disconnectedCallback(){this.resetResizeWork(),this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetResizeWork(),this.announcementSink?.release(),this.announcementSink=void 0}resetResizeWork(){this.ownerRealmGeneration+=1,this.resizeRafId!=null&&this.resizeRafOwner?.cancelAnimationFrame(this.resizeRafId),this.resizeRafId=void 0,this.resizeRafOwner=void 0,this.resizeRafDocument=void 0,this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.resizeObserverDocument=void 0,this.observedSize=""}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),(name==="dir"||name==="lang")&&oldValue!==value&&(this.layoutInvalidated=!0,this.requestUpdate())}get effectiveExpandDepth(){return finiteCount(this.expandDepth,1)}isExpanded(id,depth){return this.expandedOverrides.get(id)??depth<this.effectiveExpandDepth}ringGapPx(){const hostStyle=this.ownerDocument.defaultView?.getComputedStyle(this)??this.style,raw=hostStyle.getPropertyValue("--lr-mind-map-ring-gap").trim()||hostStyle.getPropertyValue("--_lr-mind-map-ring-gap").trim();return resolveCssLength(raw,{host:this})??DEFAULT_RING_GAP_PX}relayout(){const hubLabel=this.label==null?this.localize("mindMapLabel"):this.label;this.cachedLayout=layoutMindMap(this.topics,hubLabel,{ringGap:this.ringGapPx(),rtl:isRtl(this),isExpanded:(id,depth)=>this.isExpanded(id,depth)})}willUpdate(changed){super.willUpdate(changed);const context=`${this.label==null?this.localize("mindMapLabel"):this.label}\0${isRtl(this)?"rtl":"ltr"}\0${this.ringGapPx()}`,structuralChange=changed.has("topics")||changed.has("expandDepth")||changed.has("expandedOverrides")||changed.has("label")||changed.has("strings")||changed.has("locale");(this.layoutInvalidated||structuralChange||context!==this.layoutContext)&&(this.relayout(),this.layoutContext=context,this.layoutInvalidated=!1,this.focusedId&&!this.cachedLayout.placed.some(topic=>topic.id===this.focusedId)&&(this.focusedId=this.cachedLayout.placed[0]?.id??null))}setAnnouncement(text){this.liveText=text,this.announcementSink?.announce(text)}toggle(node,announce=!0){const expanded=!this.isExpanded(node.id,node.depth),next=new Map(this.expandedOverrides);next.set(node.id,expanded),this.expandedOverrides=next,this.emit("lr-topic-toggle",{topicId:node.id,expanded}),announce&&this.setAnnouncement(this.localize(expanded?"mindMapExpanded":"mindMapCollapsed",void 0,{label:node.label}))}activate(node){node.hasChildren?this.toggle(node):this.emit("lr-topic-select",{topicId:node.id})}siblingsOf(node){return this.cachedLayout.placed.filter(p=>p.parentId===node.parentId)}childrenOf(id){return this.cachedLayout.placed.filter(p=>p.parentId===id)}announce(node){const numberFormat=getNumberFormat(this.effectiveLocale);this.setAnnouncement(node.hasChildren?this.localize("mindMapTopicStatus",void 0,{label:node.label,level:numberFormat.format(node.depth+1),count:numberFormat.format(this.childrenOf(node.id).length)}):this.localize("mindMapLeafStatus",void 0,{label:node.label,level:numberFormat.format(node.depth+1)}))}focusNodeById(id){this.focusedId=id;const node=this.cachedLayout.placed.find(p=>p.id===id);node&&this.announce(node)}onNodeClick(node){this.focusedId=node.id,this.svgEl?.focus(),node.hasChildren||this.announce(node),this.activate(node)}connectorControlPoint(from,to){const layout=this.cachedLayout,parentR=Math.hypot(from.x-layout.centerX,from.y-layout.centerY),dir=isRtl(this)?-1:1;return{x:layout.centerX+dir*parentR*Math.sin(to.angle),y:layout.centerY-parentR*Math.cos(to.angle)}}renderSemanticNode(node,childrenByParent){const children=childrenByParent.get(node.id)??[];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,svg}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{isRtl}from"../../../internal/rtl.js";import{finiteCount}from"../../../internal/numbers.js";import{resolveCssLength}from"../../../internal/css-length.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{decimateMindMapLayout,layoutMindMap}from"./mind-map-layout.js";import{styles}from"./mind-map.styles.js";import{LYRA_DEFAULT_mindMapCollapsed,LYRA_DEFAULT_mindMapExpanded,LYRA_DEFAULT_mindMapLabel,LYRA_DEFAULT_mindMapLeafStatus,LYRA_DEFAULT_mindMapNodeLimit,LYRA_DEFAULT_mindMapTopicStatus,LYRA_DEFAULT_noData}from"../../../internal/default-strings.generated.js";const DEFAULT_RING_GAP_PX=96,MAX_RENDERED_MIND_MAP_NODES=500,NAV_KEYS=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End","Enter"," "]);class LyraMindMap extends LyraElement{constructor(){super(...arguments),this.topics=[],this.expandDepth=1,this.expandedOverrides=new Map,this.focusedId=null,this.liveText="",this.cachedLayout={placed:[],links:[],width:0,height:0,centerX:0,centerY:0},this.totalTopicCount=0,this.topicsTruncated=!1,this.ownerRealmGeneration=0,this.observedSize="",this.layoutInvalidated=!0,this.layoutContext="",this.onKeyDown=e=>{const placed=this.cachedLayout.placed;if(placed.length===0||!NAV_KEYS.has(e.key))return;if(e.preventDefault(),this.focusedId===null){this.focusNodeById(placed[0].id);return}const current=placed.find(p=>p.id===this.focusedId);if(!current)return;if(e.key==="Enter"||e.key===" "){this.activate(current);return}if(e.key==="ArrowUp"){current.parentId&&this.focusNodeById(current.parentId);return}if(e.key==="ArrowDown"){if(!current.hasChildren)return;this.isExpanded(current.id,current.depth)||this.toggle(current,!1);const child=this.childrenOf(current.id)[0];child&&this.focusNodeById(child.id);return}const rtl=isRtl(this),forwardKey=rtl?"ArrowLeft":"ArrowRight",backwardKey=rtl?"ArrowRight":"ArrowLeft";if(e.key===forwardKey||e.key===backwardKey||e.key==="Home"||e.key==="End"){const siblings=this.siblingsOf(current),index=siblings.findIndex(s=>s.id===current.id);let next=index;e.key===forwardKey?next=Math.min(siblings.length-1,index+1):e.key===backwardKey?next=Math.max(0,index-1):e.key==="Home"?next=0:next=siblings.length-1;const target=siblings[next];target&&this.focusNodeById(target.id)}},this.onFocusIn=()=>{if(this.focusedId!==null)return;const first=this.cachedLayout.placed[0];first&&(this.focusedId=first.id)}}static{this.defaultStrings={...super.defaultStrings,mindMapCollapsed:LYRA_DEFAULT_mindMapCollapsed,mindMapExpanded:LYRA_DEFAULT_mindMapExpanded,mindMapLabel:LYRA_DEFAULT_mindMapLabel,mindMapLeafStatus:LYRA_DEFAULT_mindMapLeafStatus,mindMapNodeLimit:LYRA_DEFAULT_mindMapNodeLimit,mindMapTopicStatus:LYRA_DEFAULT_mindMapTopicStatus,noData:LYRA_DEFAULT_noData}}static{this.ownedCollectionProperties=Object.freeze(["topics"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static get observedAttributes(){return[...new Set([...super.observedAttributes,"dir","lang"])]}connectedCallback(){super.connectedCallback(),this.announcementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.layoutInvalidated=!0,this.armResizeObserver()}armResizeObserver(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!this.isConnected||!ownerWindow?.ResizeObserver||this.resizeObserver&&this.resizeObserverDocument===ownerDocument)return;this.resetResizeWork();const generation=this.ownerRealmGeneration,observer=new ownerWindow.ResizeObserver(entries=>{if(this.resizeObserver!==observer||this.resizeObserverDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;const rect=entries[0]?.contentRect,size=rect?`${rect.width}:${rect.height}`:"";if(size&&size===this.observedSize)return;this.observedSize=size,this.resizeRafId!=null&&this.resizeRafOwner?.cancelAnimationFrame(this.resizeRafId);const handle=ownerWindow.requestAnimationFrame(()=>{this.resizeRafId!==handle||this.resizeRafOwner!==ownerWindow||this.resizeRafDocument!==ownerDocument||this.ownerRealmGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||(this.resizeRafId=void 0,this.resizeRafOwner=void 0,this.resizeRafDocument=void 0,this.layoutInvalidated=!0,this.requestUpdate())});this.resizeRafId=handle,this.resizeRafOwner=ownerWindow,this.resizeRafDocument=ownerDocument});this.resizeObserver=observer,this.resizeObserverDocument=ownerDocument,observer.observe(this)}disconnectedCallback(){this.resetResizeWork(),this.announcementSink?.release(),this.announcementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetResizeWork(),this.announcementSink?.release(),this.announcementSink=void 0}resetResizeWork(){this.ownerRealmGeneration+=1,this.resizeRafId!=null&&this.resizeRafOwner?.cancelAnimationFrame(this.resizeRafId),this.resizeRafId=void 0,this.resizeRafOwner=void 0,this.resizeRafDocument=void 0,this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.resizeObserverDocument=void 0,this.observedSize=""}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),(name==="dir"||name==="lang")&&oldValue!==value&&(this.layoutInvalidated=!0,this.requestUpdate())}get effectiveExpandDepth(){return finiteCount(this.expandDepth,1)}isExpanded(id,depth){return this.expandedOverrides.get(id)??depth<this.effectiveExpandDepth}ringGapPx(){const hostStyle=this.ownerDocument.defaultView?.getComputedStyle(this)??this.style,raw=hostStyle.getPropertyValue("--lr-mind-map-ring-gap").trim()||hostStyle.getPropertyValue("--_lr-mind-map-ring-gap").trim();return resolveCssLength(raw,{host:this})??DEFAULT_RING_GAP_PX}relayout(){const hubLabel=this.label==null?this.localize("mindMapLabel"):this.label,fullLayout=layoutMindMap(this.topics,hubLabel,{ringGap:this.ringGapPx(),rtl:isRtl(this),isExpanded:(id,depth)=>this.isExpanded(id,depth)}),decimated=decimateMindMapLayout(fullLayout.placed,fullLayout.links,MAX_RENDERED_MIND_MAP_NODES);this.totalTopicCount=decimated.totalCount,this.topicsTruncated=decimated.truncated,this.cachedLayout={...fullLayout,placed:[...decimated.placed],links:[...decimated.links]}}willUpdate(changed){super.willUpdate(changed);const context=`${this.label==null?this.localize("mindMapLabel"):this.label}\0${isRtl(this)?"rtl":"ltr"}\0${this.ringGapPx()}`,structuralChange=changed.has("topics")||changed.has("expandDepth")||changed.has("expandedOverrides")||changed.has("label")||changed.has("strings")||changed.has("locale");(this.layoutInvalidated||structuralChange||context!==this.layoutContext)&&(this.relayout(),this.layoutContext=context,this.layoutInvalidated=!1,this.focusedId&&!this.cachedLayout.placed.some(topic=>topic.id===this.focusedId)&&(this.focusedId=this.cachedLayout.placed[0]?.id??null))}setAnnouncement(text){this.liveText=text,this.announcementSink?.announce(text)}toggle(node,announce=!0){const expanded=!this.isExpanded(node.id,node.depth),next=new Map(this.expandedOverrides);next.set(node.id,expanded),this.expandedOverrides=next,this.emit("lr-topic-toggle",{topicId:node.id,expanded}),announce&&this.setAnnouncement(this.localize(expanded?"mindMapExpanded":"mindMapCollapsed",void 0,{label:node.label}))}activate(node){node.hasChildren?this.toggle(node):this.emit("lr-topic-select",{topicId:node.id})}siblingsOf(node){return this.cachedLayout.placed.filter(p=>p.parentId===node.parentId)}childrenOf(id){return this.cachedLayout.placed.filter(p=>p.parentId===id)}announce(node){const numberFormat=getNumberFormat(this.effectiveLocale);this.setAnnouncement(node.hasChildren?this.localize("mindMapTopicStatus",void 0,{label:node.label,level:numberFormat.format(node.depth+1),count:numberFormat.format(this.childrenOf(node.id).length)}):this.localize("mindMapLeafStatus",void 0,{label:node.label,level:numberFormat.format(node.depth+1)}))}focusNodeById(id){this.focusedId=id;const node=this.cachedLayout.placed.find(p=>p.id===id);node&&this.announce(node)}onNodeClick(node){this.focusedId=node.id,this.svgEl?.focus(),node.hasChildren||this.announce(node),this.activate(node)}connectorControlPoint(from,to){const layout=this.cachedLayout,parentR=Math.hypot(from.x-layout.centerX,from.y-layout.centerY),dir=isRtl(this)?-1:1;return{x:layout.centerX+dir*parentR*Math.sin(to.angle),y:layout.centerY-parentR*Math.cos(to.angle)}}renderSemanticNode(node,childrenByParent){const children=childrenByParent.get(node.id)??[];return html`
2
2
  <div
3
3
  role="treeitem"
4
4
  aria-level=${node.depth+1}
@@ -25,7 +25,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
25
25
  >
26
26
  ${layout.links.map(link=>{const from=byId.get(link.fromId),to=byId.get(link.toId);if(!from||!to)return nothing;const control=this.connectorControlPoint(from,to);return svg`<path part="link" d="M ${from.x} ${from.y} Q ${control.x} ${control.y} ${to.x} ${to.y}" fill="none"></path>`})}
27
27
  ${layout.placed.map(node=>svg`
28
- <g part="node" style=${`transform: translate(${node.x}px, ${node.y}px)`} @click=${()=>this.onNodeClick(node)}>
28
+ <g part="node" data-id=${node.id} style=${`transform: translate(${node.x}px, ${node.y}px)`} @click=${()=>this.onNodeClick(node)}>
29
29
  <line
30
30
  class="node-hit"
31
31
  x1="0"
@@ -42,6 +42,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
42
42
  `)}
43
43
  ${focused?svg`<circle part="focus-ring" cx=${focused.x} cy=${focused.y} r="10"></circle>`:nothing}
44
44
  </svg>
45
+ ${this.topicsTruncated?html`<p part="limit" role="note">${this.localize("mindMapNodeLimit",void 0,{shown:getNumberFormat(this.effectiveLocale).format(layout.placed.length),total:getNumberFormat(this.effectiveLocale).format(this.totalTopicCount)})}</p>`:nothing}
45
46
  <div class="sr-only" role="tree">
46
47
  ${(childrenByParent.get(null)??[]).map(topic=>this.renderSemanticNode(topic,childrenByParent))}
47
48
  </div>
@@ -11,6 +11,10 @@ import{type TemplateResult}from'lit';import{LyraElement}from'../../../internal/l
11
11
  * Blank metric/run ids and later duplicates are ignored before fallback selection, filters,
12
12
  * counts, rendering, or actions. The first record for an id wins.
13
13
  *
14
+ * At most 500 of the currently filtered runs render as `[part="run"]` buttons and feed the trend
15
+ * chart; a filtered set past that length renders a localized `[part="limit"]` notice after the run
16
+ * history rather than mounting an unbounded number of rows.
17
+ *
14
18
  * @customElement lr-rag-eval-dashboard
15
19
  * @event lr-metric-change - A metric was activated. `detail: { metricId }`.
16
20
  * @event lr-slice-change - An evaluation slice was activated. `detail: { slice }`.
@@ -28,6 +32,7 @@ import{type TemplateResult}from'lit';import{LyraElement}from'../../../internal/l
28
32
  * @csspart runs - Evaluation run history.
29
33
  * @csspart runs-heading - Run-history heading.
30
34
  * @csspart run - One evaluation run.
35
+ * @csspart limit - Localized notice shown when the filtered runs exceed the 500-run render ceiling.
31
36
  * @csspart empty - The no-runs or unavailable-controlled-slice state.
32
37
  * @cssprop [--lr-rag-eval-dashboard-selected-border-color=var(--lr-color-brand)] - Border color
33
38
  * shared by the controlled active slice and metric.
@@ -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{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,isNonBlankIdentity}from"../retrieval-identity.js";import{finiteRange}from"../../../internal/numbers.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import"../../charts/chart/lite-chart.class.js";import"../../data/stat/stat.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./rag-eval-dashboard.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_ragEvalDashboardAllSlices,LYRA_DEFAULT_ragEvalDashboardEmpty,LYRA_DEFAULT_ragEvalDashboardLabel,LYRA_DEFAULT_ragEvalDashboardRuns,LYRA_DEFAULT_ragEvalDashboardSliceUnavailable,LYRA_DEFAULT_ragEvalDashboardSlices}from"../../../internal/default-strings.generated.js";function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}class LyraRagEvalDashboard extends LyraElement{constructor(){super(...arguments),this.metrics=[],this.runs=[],this.metricId="",this.slice="",this.showChart=!0,this.chartHeight="220px"}static{this.defaultStrings={...super.defaultStrings,ragEvalDashboardAllSlices:LYRA_DEFAULT_ragEvalDashboardAllSlices,ragEvalDashboardEmpty:LYRA_DEFAULT_ragEvalDashboardEmpty,ragEvalDashboardLabel:LYRA_DEFAULT_ragEvalDashboardLabel,ragEvalDashboardRuns:LYRA_DEFAULT_ragEvalDashboardRuns,ragEvalDashboardSliceUnavailable:LYRA_DEFAULT_ragEvalDashboardSliceUnavailable,ragEvalDashboardSlices:LYRA_DEFAULT_ragEvalDashboardSlices}}static{this.ownedCollectionProperties=Object.freeze(["metrics","runs"])}static{this.styles=[LyraElement.styles,styles]}get normalizedMetrics(){return firstByRetrievalIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)}get normalizedRuns(){return firstByRetrievalIdentity(Array.isArray(this.runs)?this.runs.filter(run=>isRecord(run)&&isNonBlankIdentity(run.id)&&typeof run.label=="string"&&isRecord(run.metrics)):[],run=>run.id)}activeMetric(metrics){return this.metricId?metrics.find(metric=>metric.id===this.metricId):metrics[0]}slices(runs){return[...new Set(runs.map(run=>run.slice).filter(slice=>!!slice))]}filteredRuns(runs){return this.slice?runs.filter(run=>run.slice===this.slice):runs}formatMetric(metric,raw){const value=Number.isFinite(raw)?raw:0;return metric.format==="percent"?getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(finiteRange(value,0,0,1)):getNumberFormat(this.effectiveLocale,{maximumFractionDigits:3}).format(value)}latestValue(metric,runs){return[...runs].reverse().find(run=>Number.isFinite(run.metrics[metric.id]))?.metrics[metric.id]}emitRunChange(run){this.emit("lr-run-change",{run})}renderSlices(slices){if(!slices.length)return nothing;const allSlicesPart=this.slice?"slice":"slice slice-selected";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{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,isNonBlankIdentity}from"../retrieval-identity.js";import{finiteRange}from"../../../internal/numbers.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import"../../charts/chart/lite-chart.class.js";import"../../data/stat/stat.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./rag-eval-dashboard.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_ragEvalDashboardAllSlices,LYRA_DEFAULT_ragEvalDashboardEmpty,LYRA_DEFAULT_ragEvalDashboardLabel,LYRA_DEFAULT_ragEvalDashboardRuns,LYRA_DEFAULT_ragEvalDashboardRunsLimit,LYRA_DEFAULT_ragEvalDashboardSliceUnavailable,LYRA_DEFAULT_ragEvalDashboardSlices}from"../../../internal/default-strings.generated.js";function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}const MAX_RENDERED_RUNS=500;class LyraRagEvalDashboard extends LyraElement{constructor(){super(...arguments),this.metrics=[],this.runs=[],this.metricId="",this.slice="",this.showChart=!0,this.chartHeight="220px"}static{this.defaultStrings={...super.defaultStrings,ragEvalDashboardAllSlices:LYRA_DEFAULT_ragEvalDashboardAllSlices,ragEvalDashboardEmpty:LYRA_DEFAULT_ragEvalDashboardEmpty,ragEvalDashboardLabel:LYRA_DEFAULT_ragEvalDashboardLabel,ragEvalDashboardRuns:LYRA_DEFAULT_ragEvalDashboardRuns,ragEvalDashboardRunsLimit:LYRA_DEFAULT_ragEvalDashboardRunsLimit,ragEvalDashboardSliceUnavailable:LYRA_DEFAULT_ragEvalDashboardSliceUnavailable,ragEvalDashboardSlices:LYRA_DEFAULT_ragEvalDashboardSlices}}static{this.ownedCollectionProperties=Object.freeze(["metrics","runs"])}static{this.styles=[LyraElement.styles,styles]}get normalizedMetrics(){return firstByRetrievalIdentity(Array.isArray(this.metrics)?this.metrics:[],metric=>metric.id)}get normalizedRuns(){return firstByRetrievalIdentity(Array.isArray(this.runs)?this.runs.filter(run=>isRecord(run)&&isNonBlankIdentity(run.id)&&typeof run.label=="string"&&isRecord(run.metrics)):[],run=>run.id)}activeMetric(metrics){return this.metricId?metrics.find(metric=>metric.id===this.metricId):metrics[0]}slices(runs){return[...new Set(runs.map(run=>run.slice).filter(slice=>!!slice))]}filteredRuns(runs){return this.slice?runs.filter(run=>run.slice===this.slice):runs}formatMetric(metric,raw){const value=Number.isFinite(raw)?raw:0;return metric.format==="percent"?getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(finiteRange(value,0,0,1)):getNumberFormat(this.effectiveLocale,{maximumFractionDigits:3}).format(value)}latestValue(metric,runs){return[...runs].reverse().find(run=>Number.isFinite(run.metrics[metric.id]))?.metrics[metric.id]}emitRunChange(run){this.emit("lr-run-change",{run})}renderSlices(slices){if(!slices.length)return nothing;const allSlicesPart=this.slice?"slice":"slice slice-selected";return html`
2
2
  <nav part="slices" aria-label=${this.localize("ragEvalDashboardSlices")}>
3
3
  <button
4
4
  part=${allSlicesPart}
@@ -43,7 +43,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
43
43
  heading=${this.localize("ragEvalDashboardSliceUnavailable",void 0,{slice:this.slice})}
44
44
  ></lr-empty>
45
45
  </section>
46
- `;const values=filtered.map(run=>{const value=active?run.metrics[active.id]:void 0;return Number.isFinite(value)?value:null});return html`
46
+ `;const runsTruncated=filtered.length>MAX_RENDERED_RUNS,renderedRuns=filtered.slice(0,MAX_RENDERED_RUNS),values=renderedRuns.map(run=>{const value=active?run.metrics[active.id]:void 0;return Number.isFinite(value)?value:null});return html`
47
47
  <section
48
48
  part="base"
49
49
  role=${role??nothing}
@@ -69,12 +69,12 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
69
69
  </button>
70
70
  `})}
71
71
  </div>
72
- ${this.showChart&&active&&filtered.length?html`
72
+ ${this.showChart&&active&&renderedRuns.length?html`
73
73
  <div part="chart">
74
74
  <lr-lite-chart
75
75
  type="line"
76
76
  .height=${this.chartHeight}
77
- .labels=${filtered.map(run=>run.label)}
77
+ .labels=${renderedRuns.map(run=>run.label)}
78
78
  .datasets=${[{label:active.label,data:values}]}
79
79
  accessible-label=${active.label}
80
80
  ></lr-lite-chart>
@@ -85,7 +85,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
85
85
  aria-label=${this.localize("ragEvalDashboardRuns")}
86
86
  >
87
87
  <h3 part="runs-heading">${this.localize("ragEvalDashboardRuns")}</h3>
88
- ${filtered.map(run=>html`
88
+ ${renderedRuns.map(run=>html`
89
89
  <button
90
90
  part="run"
91
91
  type="button"
@@ -97,6 +97,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
97
97
  >`:nothing}
98
98
  </button>
99
99
  `)}
100
+ ${runsTruncated?html`<p part="limit" role="note">${this.localize("ragEvalDashboardRunsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_RUNS)})}</p>`:nothing}
100
101
  </section>
101
102
  </section>
102
103
  `}}__decorate([property({attribute:!1})],LyraRagEvalDashboard.prototype,"metrics",void 0),__decorate([property({attribute:!1})],LyraRagEvalDashboard.prototype,"runs",void 0),__decorate([property({attribute:"metric-id"})],LyraRagEvalDashboard.prototype,"metricId",void 0),__decorate([property()],LyraRagEvalDashboard.prototype,"slice",void 0),__decorate([property()],LyraRagEvalDashboard.prototype,"label",void 0),__decorate([property({type:Boolean,attribute:"show-chart",reflect:!0,converter:trueDefaultBooleanConverter})],LyraRagEvalDashboard.prototype,"showChart",void 0),__decorate([property({attribute:"chart-height"})],LyraRagEvalDashboard.prototype,"chartHeight",void 0);export{LyraRagEvalDashboard};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-m);flex-direction:column;display:flex}[part=heading],[part=runs-heading]{color:var(--lr-color-text);font-size:var(--lr-font-size-lg);margin:0}[part=slices]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part~=slice],[part~=metric],[part=run]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);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;cursor:pointer;transition:background-color var(--lr-transition-fast)}[part~=slice]{min-inline-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s)}[part~=metric]{gap:var(--lr-space-2xs);padding:var(--lr-space-xs);text-align:start;display:grid}[part~=slice-selected],[part~=metric-selected]{border-color:var(--lr-rag-eval-dashboard-selected-border-color,var(--lr-color-brand))}[part=metric-category]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);overflow-wrap:anywhere}[part~=slice-selected]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size)}[part~=slice]:hover,[part~=metric]:hover,[part=run]:hover{background:var(--lr-color-surface-raised)}[part~=slice]:active,[part~=metric]:active,[part=run]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part~=slice]:focus-visible,[part~=metric]:focus-visible,[part=run]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=metrics]{grid-template-columns:repeat(auto-fit, minmax(var(--lr-size-10rem), 1fr));gap:var(--lr-space-s);display:grid}[part=chart]{min-inline-size:0}[part=runs]{gap:var(--lr-space-xs);flex-direction:column;display:flex}[part=run]{justify-content:space-between;gap:var(--lr-space-s);inline-size:100%;padding:var(--lr-space-s);text-align:start;align-items:center;display:flex}@container (inline-size<=319.98px){[part=metrics]{grid-template-columns:1fr}[part=run]{flex-direction:column;align-items:flex-start}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-m);flex-direction:column;display:flex}[part=heading],[part=runs-heading]{color:var(--lr-color-text);font-size:var(--lr-font-size-lg);margin:0}[part=slices]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part~=slice],[part~=metric],[part=run]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);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;cursor:pointer;transition:background-color var(--lr-transition-fast)}[part~=slice]{min-inline-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s)}[part~=metric]{gap:var(--lr-space-2xs);padding:var(--lr-space-xs);text-align:start;display:grid}[part~=slice-selected],[part~=metric-selected]{border-color:var(--lr-rag-eval-dashboard-selected-border-color,var(--lr-color-brand))}[part=metric-category]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);overflow-wrap:anywhere}[part~=slice-selected]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size)}[part~=slice]:hover,[part~=metric]:hover,[part=run]:hover{background:var(--lr-color-surface-raised)}[part~=slice]:active,[part~=metric]:active,[part=run]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part~=slice]:focus-visible,[part~=metric]:focus-visible,[part=run]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=metrics]{grid-template-columns:repeat(auto-fit, minmax(var(--lr-size-10rem), 1fr));gap:var(--lr-space-s);display:grid}[part=chart]{min-inline-size:0}[part=runs]{gap:var(--lr-space-xs);flex-direction:column;display:flex}[part=run]{justify-content:space-between;gap:var(--lr-space-s);inline-size:100%;padding:var(--lr-space-s);text-align:start;align-items:center;display:flex}@container (inline-size<=319.98px){[part=metrics]{grid-template-columns:1fr}[part=run]{flex-direction:column;align-items:flex-start}}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}`;export{styles};
@@ -1,8 +1,8 @@
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{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,isValidRetrievalChunk}from"../retrieval-identity.js";import{finiteCount,finiteRange}from"../../../internal/numbers.js";import"../../overlays/empty/empty.class.js";import{styles}from"./retrieval-compare.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_retrievalCompareDenseScore,LYRA_DEFAULT_retrievalCompareEmpty,LYRA_DEFAULT_retrievalCompareFinalScore,LYRA_DEFAULT_retrievalCompareLabel,LYRA_DEFAULT_retrievalCompareOverlap,LYRA_DEFAULT_retrievalCompareRank,LYRA_DEFAULT_retrievalCompareRerankScore,LYRA_DEFAULT_retrievalCompareSparseScore}from"../../../internal/default-strings.generated.js";let retrievalCompareInstance=0;class LyraRetrievalCompare extends LyraElement{constructor(){super(...arguments),this.sets=[],this.topK=10,this.selectedChunkId="",this.headingIdPrefix=`lr-retrieval-compare-${++retrievalCompareInstance}`,this.renderSet=(set,setIndex)=>{const headingId=`${this.headingIdPrefix}-set-${setIndex}`;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{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{firstByRetrievalIdentity,isValidRetrievalChunk}from"../retrieval-identity.js";import{finiteCount,finiteRange}from"../../../internal/numbers.js";import"../../overlays/empty/empty.class.js";import{styles}from"./retrieval-compare.styles.js";import{retrievalSemanticLabel,retrievalSemanticRole}from"../retrieval-semantic-owner.js";import{LYRA_DEFAULT_retrievalCompareDenseScore,LYRA_DEFAULT_retrievalCompareEmpty,LYRA_DEFAULT_retrievalCompareFinalScore,LYRA_DEFAULT_retrievalCompareLabel,LYRA_DEFAULT_retrievalCompareOverlap,LYRA_DEFAULT_retrievalCompareRank,LYRA_DEFAULT_retrievalCompareRerankScore,LYRA_DEFAULT_retrievalCompareSparseScore}from"../../../internal/default-strings.generated.js";let retrievalCompareInstance=0;class LyraRetrievalCompare extends LyraElement{constructor(){super(...arguments),this.sets=[],this.topK=10,this.selectedChunkId="",this.headingIdPrefix=`lr-retrieval-compare-${++retrievalCompareInstance}`,this.renderSet=(set,setIndex,chunks)=>{const headingId=`${this.headingIdPrefix}-set-${setIndex}`;return html`
2
2
  <section part="set" aria-labelledby=${headingId}>
3
3
  <h3 part="set-heading" id=${headingId}>${set.label}</h3>
4
4
  <ol part="chunks">
5
- ${this.orderedChunks(set).map((chunk,index)=>{const selected=chunk.id===this.selectedChunkId,rank=this.rank(chunk,index);return html`
5
+ ${chunks.map((chunk,index)=>{const selected=chunk.id===this.selectedChunkId,rank=this.rank(chunk,index);return html`
6
6
  <li>
7
7
  <button
8
8
  part=${selected?"chunk chunk-selected":"chunk"}
@@ -28,7 +28,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
28
28
  `})}
29
29
  </ol>
30
30
  </section>
31
- `}}static{this.defaultStrings={...super.defaultStrings,retrievalCompareDenseScore:LYRA_DEFAULT_retrievalCompareDenseScore,retrievalCompareEmpty:LYRA_DEFAULT_retrievalCompareEmpty,retrievalCompareFinalScore:LYRA_DEFAULT_retrievalCompareFinalScore,retrievalCompareLabel:LYRA_DEFAULT_retrievalCompareLabel,retrievalCompareOverlap:LYRA_DEFAULT_retrievalCompareOverlap,retrievalCompareRank:LYRA_DEFAULT_retrievalCompareRank,retrievalCompareRerankScore:LYRA_DEFAULT_retrievalCompareRerankScore,retrievalCompareSparseScore:LYRA_DEFAULT_retrievalCompareSparseScore}}static{this.ownedCollectionProperties=Object.freeze(["sets"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-chunk-select"])}get effectiveTopK(){return Math.max(1,finiteCount(this.topK,10))}get normalizedSets(){return firstByRetrievalIdentity(Array.isArray(this.sets)?this.sets:[],set=>set.id)}orderedChunks(set){return firstByRetrievalIdentity(Array.isArray(set.chunks)?set.chunks.filter(isValidRetrievalChunk):[],chunk=>chunk.id).map((chunk,index)=>({chunk,index,rank:this.rank(chunk,index)})).sort((a,b)=>a.rank-b.rank||b.chunk.score-a.chunk.score||a.index-b.index).slice(0,this.effectiveTopK).map(({chunk})=>chunk)}rank(chunk,index){return Math.max(1,finiteCount(typeof chunk.rank=="number"?chunk.rank:index+1,index+1))}formatScore(value){return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(finiteRange(value,0,0,1))}overlaps(sets){const summaries=[];for(let leftIndex=0;leftIndex<sets.length;leftIndex+=1){const leftSet=sets[leftIndex],left=new Set(this.orderedChunks(leftSet).map(chunk=>chunk.id));for(let rightIndex=leftIndex+1;rightIndex<sets.length;rightIndex+=1){const rightSet=sets[rightIndex],right=new Set(this.orderedChunks(rightSet).map(chunk=>chunk.id)),intersection=[...left].filter(id=>right.has(id)).length,union=new Set([...left,...right]).size,percent=this.formatScore(union?intersection/union:0);summaries.push(this.localize("retrievalCompareOverlap",void 0,{left:leftSet.label,right:rightSet.label,percent}))}}return summaries}scoreEntries(chunk){const scores=chunk.scores??{final:chunk.score};return[[this.localize("retrievalCompareDenseScore"),scores.dense],[this.localize("retrievalCompareSparseScore"),scores.sparse],[this.localize("retrievalCompareRerankScore"),scores.rerank],[this.localize("retrievalCompareFinalScore"),scores.final]].filter(entry=>typeof entry[1]=="number")}render(){const sets=this.normalizedSets,label=retrievalSemanticLabel(this,this.label==null?this.localize("retrievalCompareLabel"):this.label),role=retrievalSemanticRole(this,"region");if(!sets.length)return html`<section
31
+ `}}static{this.defaultStrings={...super.defaultStrings,retrievalCompareDenseScore:LYRA_DEFAULT_retrievalCompareDenseScore,retrievalCompareEmpty:LYRA_DEFAULT_retrievalCompareEmpty,retrievalCompareFinalScore:LYRA_DEFAULT_retrievalCompareFinalScore,retrievalCompareLabel:LYRA_DEFAULT_retrievalCompareLabel,retrievalCompareOverlap:LYRA_DEFAULT_retrievalCompareOverlap,retrievalCompareRank:LYRA_DEFAULT_retrievalCompareRank,retrievalCompareRerankScore:LYRA_DEFAULT_retrievalCompareRerankScore,retrievalCompareSparseScore:LYRA_DEFAULT_retrievalCompareSparseScore}}static{this.ownedCollectionProperties=Object.freeze(["sets"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-chunk-select"])}get effectiveTopK(){return Math.max(1,finiteCount(this.topK,10))}get normalizedSets(){return firstByRetrievalIdentity(Array.isArray(this.sets)?this.sets:[],set=>set.id)}orderedChunks(set){return firstByRetrievalIdentity(Array.isArray(set.chunks)?set.chunks.filter(isValidRetrievalChunk):[],chunk=>chunk.id).map((chunk,index)=>({chunk,index,rank:this.rank(chunk,index)})).sort((a,b)=>a.rank-b.rank||b.chunk.score-a.chunk.score||a.index-b.index).slice(0,this.effectiveTopK).map(({chunk})=>chunk)}rank(chunk,index){return Math.max(1,finiteCount(typeof chunk.rank=="number"?chunk.rank:index+1,index+1))}formatScore(value){return getNumberFormat(this.effectiveLocale,{style:"percent",maximumFractionDigits:1}).format(finiteRange(value,0,0,1))}overlaps(sets,ordered){const summaries=[];for(let leftIndex=0;leftIndex<sets.length;leftIndex+=1){const leftSet=sets[leftIndex],left=new Set((ordered.get(leftSet.id)??[]).map(chunk=>chunk.id));for(let rightIndex=leftIndex+1;rightIndex<sets.length;rightIndex+=1){const rightSet=sets[rightIndex],right=new Set((ordered.get(rightSet.id)??[]).map(chunk=>chunk.id)),intersection=[...left].filter(id=>right.has(id)).length,union=new Set([...left,...right]).size,percent=this.formatScore(union?intersection/union:0);summaries.push(this.localize("retrievalCompareOverlap",void 0,{left:leftSet.label,right:rightSet.label,percent}))}}return summaries}scoreEntries(chunk){const scores=chunk.scores??{final:chunk.score};return[[this.localize("retrievalCompareDenseScore"),scores.dense],[this.localize("retrievalCompareSparseScore"),scores.sparse],[this.localize("retrievalCompareRerankScore"),scores.rerank],[this.localize("retrievalCompareFinalScore"),scores.final]].filter(entry=>typeof entry[1]=="number")}render(){const sets=this.normalizedSets,label=retrievalSemanticLabel(this,this.label==null?this.localize("retrievalCompareLabel"):this.label),role=retrievalSemanticRole(this,"region");if(!sets.length)return html`<section
32
32
  part="base"
33
33
  role=${role??nothing}
34
34
  aria-label=${label??nothing}
@@ -37,7 +37,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
37
37
  part="empty"
38
38
  heading=${this.localize("retrievalCompareEmpty")}
39
39
  ></lr-empty>
40
- </section>`;const overlaps=this.overlaps(sets);return html`
40
+ </section>`;const ordered=new Map(sets.map(set=>[set.id,this.orderedChunks(set)])),overlaps=this.overlaps(sets,ordered);return html`
41
41
  <section
42
42
  part="base"
43
43
  role=${role??nothing}
@@ -45,7 +45,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
45
45
  >
46
46
  ${overlaps.map(summary=>html`<p part="overlap">${summary}</p>`)}
47
47
  <div part="sets">
48
- ${sets.map((set,index)=>this.renderSet(set,index))}
48
+ ${sets.map((set,index)=>this.renderSet(set,index,ordered.get(set.id)??[]))}
49
49
  </div>
50
50
  </section>
51
51
  `}}__decorate([property({attribute:!1})],LyraRetrievalCompare.prototype,"sets",void 0),__decorate([property({type:Number,attribute:"top-k"})],LyraRetrievalCompare.prototype,"topK",void 0),__decorate([property({attribute:"selected-chunk-id"})],LyraRetrievalCompare.prototype,"selectedChunkId",void 0),__decorate([property()],LyraRetrievalCompare.prototype,"label",void 0);export{LyraRetrievalCompare};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{min-inline-size:0}[part=overlap]{margin:0 0 var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}[part=sets]{grid-auto-columns:minmax(var(--lr-size-16rem), 1fr);gap:var(--lr-space-m);overscroll-behavior-inline:contain;grid-auto-flow:column;display:grid;overflow:auto visible}[part=set]{min-inline-size:0}[part=set-heading]{margin:0 0 var(--lr-space-s);font-size:var(--lr-font-size-m)}[part=chunks]{gap:var(--lr-space-s);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part~=chunk]{gap:var(--lr-space-xs) var(--lr-space-s);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-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;text-align:start;cursor:pointer;transition:background-color var(--lr-transition-fast);grid-template-columns:auto minmax(0,1fr);display:grid}[part~=chunk]:hover{background:var(--lr-color-surface-raised)}[part~=chunk]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part~=chunk]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part~=chunk-selected]{border-color:var(--lr-retrieval-compare-selected-border,var(--lr-color-brand))}[part=chunk-rank]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}[part=chunk-title],[part=chunk-text],[part=scores]{overflow-wrap:anywhere;min-inline-size:0}[part=chunk-text],[part=scores]{grid-column:1/-1}[part=chunk-text]{font-size:var(--lr-font-size-sm)}[part=scores]{gap:var(--lr-space-2xs) var(--lr-space-s);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}[part=score]{justify-content:space-between;gap:var(--lr-space-xs);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);display:flex}@container (inline-size<=319.98px){[part=sets]{grid-auto-columns:minmax(var(--lr-size-14rem), 100%)}[part=scores]{grid-template-columns:1fr}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{min-inline-size:0}[part=overlap]{margin:0 0 var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}[part=sets]{grid-auto-columns:minmax(var(--lr-size-16rem), 1fr);gap:var(--lr-space-m);overscroll-behavior-inline:contain;grid-auto-flow:column;display:grid;overflow:auto hidden}[part=set]{min-inline-size:0}[part=set-heading]{margin:0 0 var(--lr-space-s);font-size:var(--lr-font-size-m)}[part=chunks]{gap:var(--lr-space-s);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part~=chunk]{gap:var(--lr-space-xs) var(--lr-space-s);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-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;text-align:start;cursor:pointer;transition:background-color var(--lr-transition-fast);grid-template-columns:auto minmax(0,1fr);display:grid}[part~=chunk]:hover{background:var(--lr-color-surface-raised)}[part~=chunk]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part~=chunk]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part~=chunk-selected]{border-color:var(--lr-retrieval-compare-selected-border,var(--lr-color-brand))}[part=chunk-rank]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}[part=chunk-title],[part=chunk-text],[part=scores]{overflow-wrap:anywhere;min-inline-size:0}[part=chunk-text],[part=scores]{grid-column:1/-1}[part=chunk-text]{font-size:var(--lr-font-size-sm)}[part=scores]{gap:var(--lr-space-2xs) var(--lr-space-s);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}[part=score]{justify-content:space-between;gap:var(--lr-space-xs);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);display:flex}@container (inline-size<=319.98px){[part=sets]{grid-auto-columns:minmax(var(--lr-size-14rem), 100%)}[part=scores]{grid-template-columns:1fr}}`;export{styles};
@@ -1,4 +1,4 @@
1
- import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export interface SourceListToggleDetail{expanded:boolean;}export interface LyraSourceListEventMap{'lr-toggle':CustomEvent<SourceListToggleDetail>;}
1
+ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraFrame}from'../../../internal/variants.js';export interface SourceListToggleDetail{expanded:boolean;}export interface LyraSourceListEventMap{'lr-toggle':CustomEvent<SourceListToggleDetail>;}
2
2
  /**
3
3
  * `<lr-source-list>` — a collapsible "Sources" panel for one chat message,
4
4
  * grouping a set of `<lr-source-card>` children (its default-slot light-DOM
@@ -34,6 +34,14 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
34
34
  * @csspart header - The clickable header (`<button>`) toggling `expanded`.
35
35
  * @csspart toggle - The chevron indicator inside the header.
36
36
  * @csspart list - The wrapper around the default slot, `hidden` while collapsed.
37
+ * @cssprop [--lr-source-list-compact-header-padding=var(--lr-space-2xs) var(--lr-space-s)] -
38
+ * `[part="header"]` padding while `compact`.
39
+ * @cssprop [--lr-source-list-compact-header-gap=var(--lr-space-2xs)] - Gap between the header
40
+ * toggle and label while `compact`.
41
+ * @cssprop [--lr-source-list-compact-gap=var(--lr-space-2xs)] - Gap between `[part="list"]`'s
42
+ * rows while `compact`.
43
+ * @cssprop [--lr-source-list-compact-list-padding=var(--lr-space-s)] - `[part="list"]` padding
44
+ * while `compact`.
37
45
  * @status stable
38
46
  * @since 4.0.0
39
47
  */
@@ -48,7 +56,18 @@ label?:string;
48
56
  /** Fully consumer-built, already-pluralized header summary, e.g. `"3 sources"`
49
57
  * or `"1 source"` — this component never counts or pluralizes on its own
50
58
  * (see the class doc). Takes precedence over `label` when both are set. */
51
- labelPlural:string;private slottedCount;private readonly listId;private readonly previousRoles;private roleObserver?;private roleObserverDocument?;private roleObserverGeneration;private isCompatibleListItem;private onRoleMutations;private observeRoleChanges;private syncItemRoles;private reconcileAssignedItems;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private resetRoleObserver;protected willUpdate(changed:PropertyValues):void;firstUpdated(changed:PropertyValues):void;
59
+ labelPlural:string;
60
+ /** Tighter header and list padding/gap, for a panel rendered repeatedly down a message
61
+ * transcript — same convention as this component's slotted `<lr-source-card>` children's own
62
+ * `compact`. Defaults to `false`, preserving the regular-density treatment. This changes
63
+ * density only; the outer border and surface remain, so use `frame="plain"` to remove card
64
+ * chrome. */
65
+ compact:boolean;
66
+ /** Visual chrome, in the library's shared container-frame vocabulary. `'card'` (the default)
67
+ * keeps the bordered, filled outer container. `'plain'` removes that outer border, background,
68
+ * and corner radius so a list nested inside existing message chrome does not double it. Plain
69
+ * preserves the header/list divider and whichever regular or compact padding applies. */
70
+ frame:LyraFrame;private slottedCount;private readonly listId;private readonly previousRoles;private roleObserver?;private roleObserverDocument?;private roleObserverGeneration;private isCompatibleListItem;private onRoleMutations;private observeRoleChanges;private syncItemRoles;private reconcileAssignedItems;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private resetRoleObserver;protected willUpdate(changed:PropertyValues):void;firstUpdated(changed:PropertyValues):void;
52
71
  /** Read-only, live-updated count of the currently-slotted children —
53
72
  * handy for building a `label-plural` string that stays in sync with
54
73
  * what's actually slotted without hand-counting DOM children, e.g.
@@ -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}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{tag}from"../../../internal/prefix.js";import{styles}from"./source-list.styles.js";import{LYRA_DEFAULT_sourceListDefaultLabel}from"../../../internal/default-strings.generated.js";class LyraSourceList extends LyraElement{constructor(){super(...arguments),this.expanded=!1,this.labelPlural="",this.slottedCount=0,this.listId=nextId("source-list-region"),this.previousRoles=new Map,this.roleObserverGeneration=0,this.onSlotChange=e=>{const elements=e.target.assignedElements({flatten:!0});this.slottedCount=elements.length,this.syncItemRoles(elements)},this.toggle=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded})}}static{this.defaultStrings={...super.defaultStrings,sourceListDefaultLabel:LYRA_DEFAULT_sourceListDefaultLabel}}static{this.styles=[LyraElement.styles,styles]}isCompatibleListItem(element){const existingRole=element.getAttribute("role")?.trim(),role=existingRole==="listitem"&&this.previousRoles.has(element)&&this.previousRoles.get(element)!=="listitem"?void 0:existingRole;if(role==="listitem")return!0;if(role||element.hasAttribute("tabindex")||element.isContentEditable)return!1;const localName=element.localName;return localName===tag("source-card")||localName==="div"||localName==="span"}onRoleMutations(records){for(const record of records){const element=record.target;if(!(element.parentElement!==this||element.getAttribute("slot"))){record.attributeName==="role"&&this.previousRoles.has(element)&&this.previousRoles.set(element,element.getAttribute("role")),this.reconcileAssignedItems();return}}}observeRoleChanges(){if(!this.isConnected)return;const ownerDocument=this.ownerDocument;if(!this.roleObserver||this.roleObserverDocument!==ownerDocument){this.resetRoleObserver();const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.roleObserverGeneration,observer=new MutationObserverCtor(records=>{this.roleObserver!==observer||this.roleObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onRoleMutations(records)});this.roleObserver=observer,this.roleObserverDocument=ownerDocument}this.roleObserver.observe(this,{attributes:!0,attributeFilter:["role","tabindex","contenteditable"],subtree:!0})}syncItemRoles(elements){this.roleObserver?.disconnect();const assigned=new Set(elements),hasListSemantics=elements.every(element=>this.isCompatibleListItem(element)),list=this.shadowRoot?.querySelector('[part="list"]');this.isConnected&&hasListSemantics?list?.setAttribute("role","list"):list?.removeAttribute("role");for(const[element,role]of this.previousRoles)hasListSemantics&&assigned.has(element)&&element.getAttribute("role")==="listitem"&&role!=="listitem"||(role===null?element.removeAttribute("role"):element.setAttribute("role",role),this.previousRoles.delete(element));if(hasListSemantics)for(const element of elements)element.getAttribute("role")?.trim()||(this.previousRoles.has(element)||this.previousRoles.set(element,element.getAttribute("role")),element.setAttribute("role","listitem"));this.observeRoleChanges()}reconcileAssignedItems(){const slot=this.shadowRoot?.querySelector("slot");if(!slot)return;const elements=slot.assignedElements({flatten:!0});this.slottedCount=elements.length,this.syncItemRoles(elements)}connectedCallback(){if(super.connectedCallback(),this.observeRoleChanges(),this.hasUpdated){const ownerDocument=this.ownerDocument,generation=this.roleObserverGeneration;this.updateComplete.then(()=>{!this.isConnected||this.ownerDocument!==ownerDocument||this.roleObserverGeneration!==generation||this.reconcileAssignedItems()})}}disconnectedCallback(){this.roleObserver?.disconnect(),this.syncItemRoles([]),this.resetRoleObserver(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetRoleObserver()}resetRoleObserver(){this.roleObserverGeneration+=1,this.roleObserver?.disconnect(),this.roleObserver=void 0,this.roleObserverDocument=void 0}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated){const elements=Array.from(this.children).filter(el=>!el.getAttribute("slot"));this.slottedCount=elements.length}}firstUpdated(changed){super.firstUpdated(changed),this.reconcileAssignedItems()}get sourceCount(){return this.slottedCount}set sourceCount(_value){}render(){const requestedHeaderText=this.labelPlural||(this.label==null?this.localize("sourceListDefaultLabel"):this.label),headerText=requestedHeaderText.trim()===""?this.localize("sourceListDefaultLabel"):requestedHeaderText;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}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{tag}from"../../../internal/prefix.js";import{styles}from"./source-list.styles.js";import{LYRA_DEFAULT_sourceListDefaultLabel}from"../../../internal/default-strings.generated.js";class LyraSourceList extends LyraElement{constructor(){super(...arguments),this.expanded=!1,this.labelPlural="",this.compact=!1,this.frame="card",this.slottedCount=0,this.listId=nextId("source-list-region"),this.previousRoles=new Map,this.roleObserverGeneration=0,this.onSlotChange=e=>{const elements=e.target.assignedElements({flatten:!0});this.slottedCount=elements.length,this.syncItemRoles(elements)},this.toggle=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded})}}static{this.defaultStrings={...super.defaultStrings,sourceListDefaultLabel:LYRA_DEFAULT_sourceListDefaultLabel}}static{this.styles=[LyraElement.styles,styles]}isCompatibleListItem(element){const existingRole=element.getAttribute("role")?.trim(),role=existingRole==="listitem"&&this.previousRoles.has(element)&&this.previousRoles.get(element)!=="listitem"?void 0:existingRole;if(role==="listitem")return!0;if(role||element.hasAttribute("tabindex")||element.isContentEditable)return!1;const localName=element.localName;return localName===tag("source-card")||localName==="div"||localName==="span"}onRoleMutations(records){for(const record of records){const element=record.target;if(!(element.parentElement!==this||element.getAttribute("slot"))){record.attributeName==="role"&&this.previousRoles.has(element)&&this.previousRoles.set(element,element.getAttribute("role")),this.reconcileAssignedItems();return}}}observeRoleChanges(){if(!this.isConnected)return;const ownerDocument=this.ownerDocument;if(!this.roleObserver||this.roleObserverDocument!==ownerDocument){this.resetRoleObserver();const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const generation=this.roleObserverGeneration,observer=new MutationObserverCtor(records=>{this.roleObserver!==observer||this.roleObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.onRoleMutations(records)});this.roleObserver=observer,this.roleObserverDocument=ownerDocument}this.roleObserver.observe(this,{attributes:!0,attributeFilter:["role","tabindex","contenteditable"],subtree:!0})}syncItemRoles(elements){this.roleObserver?.disconnect();const assigned=new Set(elements),hasListSemantics=elements.every(element=>this.isCompatibleListItem(element)),list=this.shadowRoot?.querySelector('[part="list"]');this.isConnected&&hasListSemantics?list?.setAttribute("role","list"):list?.removeAttribute("role");for(const[element,role]of this.previousRoles)hasListSemantics&&assigned.has(element)&&element.getAttribute("role")==="listitem"&&role!=="listitem"||(role===null?element.removeAttribute("role"):element.setAttribute("role",role),this.previousRoles.delete(element));if(hasListSemantics)for(const element of elements)element.getAttribute("role")?.trim()||(this.previousRoles.has(element)||this.previousRoles.set(element,element.getAttribute("role")),element.setAttribute("role","listitem"));this.observeRoleChanges()}reconcileAssignedItems(){const slot=this.shadowRoot?.querySelector("slot");if(!slot)return;const elements=slot.assignedElements({flatten:!0});this.slottedCount=elements.length,this.syncItemRoles(elements)}connectedCallback(){if(super.connectedCallback(),this.observeRoleChanges(),this.hasUpdated){const ownerDocument=this.ownerDocument,generation=this.roleObserverGeneration;this.updateComplete.then(()=>{!this.isConnected||this.ownerDocument!==ownerDocument||this.roleObserverGeneration!==generation||this.reconcileAssignedItems()})}}disconnectedCallback(){this.roleObserver?.disconnect(),this.syncItemRoles([]),this.resetRoleObserver(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetRoleObserver()}resetRoleObserver(){this.roleObserverGeneration+=1,this.roleObserver?.disconnect(),this.roleObserver=void 0,this.roleObserverDocument=void 0}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated){const elements=Array.from(this.children).filter(el=>!el.getAttribute("slot"));this.slottedCount=elements.length}}firstUpdated(changed){super.firstUpdated(changed),this.reconcileAssignedItems()}get sourceCount(){return this.slottedCount}set sourceCount(_value){}render(){const requestedHeaderText=this.labelPlural||(this.label==null?this.localize("sourceListDefaultLabel"):this.label),headerText=requestedHeaderText.trim()===""?this.localize("sourceListDefaultLabel"):requestedHeaderText;return html`
2
2
  <div part="base">
3
3
  <button
4
4
  part="header"
@@ -15,4 +15,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
15
15
  <slot @slotchange=${this.onSlotChange}></slot>
16
16
  </div>
17
17
  </div>
18
- `}}__decorate([property({type:Boolean,reflect:!0})],LyraSourceList.prototype,"expanded",void 0),__decorate([property()],LyraSourceList.prototype,"label",void 0),__decorate([property({attribute:"label-plural"})],LyraSourceList.prototype,"labelPlural",void 0),__decorate([state()],LyraSourceList.prototype,"slottedCount",void 0);export{LyraSourceList};
18
+ `}}__decorate([property({type:Boolean,reflect:!0})],LyraSourceList.prototype,"expanded",void 0),__decorate([property()],LyraSourceList.prototype,"label",void 0),__decorate([property({attribute:"label-plural"})],LyraSourceList.prototype,"labelPlural",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraSourceList.prototype,"compact",void 0),__decorate([property({reflect:!0})],LyraSourceList.prototype,"frame",void 0),__decorate([state()],LyraSourceList.prototype,"slottedCount",void 0);export{LyraSourceList};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}[part=header]{align-items:center;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);inline-size:100%;padding:var(--lr-space-s) var(--lr-space-m);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);text-align:start;cursor:pointer;transition:var(--lr-transition-interactive);background:0 0;border:none;display:flex}[part=header]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=header]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host([expanded]) [part=toggle]{transform:rotate(90deg)}:host(:not([expanded]):dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=list]{gap:var(--lr-space-s);padding:0 var(--lr-space-m) var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);overflow-wrap:anywhere;flex-direction:column;min-inline-size:0;padding-block-start:var(--lr-space-m);display:flex}[part=list][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{min-inline-size:0;display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}:host([compact]) [part=header]{padding:var(--lr-source-list-compact-header-padding,var(--lr-space-2xs) var(--lr-space-s));gap:var(--lr-source-list-compact-header-gap,var(--lr-space-2xs))}:host([compact]) [part=list]{gap:var(--lr-source-list-compact-gap,var(--lr-space-2xs));padding:var(--lr-source-list-compact-list-padding,var(--lr-space-s))}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0}[part=header]{align-items:center;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);inline-size:100%;padding:var(--lr-space-s) var(--lr-space-m);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);text-align:start;cursor:pointer;transition:var(--lr-transition-interactive);background:0 0;border:none;display:flex}[part=header]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=header]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host([expanded]) [part=toggle]{transform:rotate(90deg)}:host(:not([expanded]):dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=list]{gap:var(--lr-space-s);padding:0 var(--lr-space-m) var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);overflow-wrap:anywhere;flex-direction:column;min-inline-size:0;padding-block-start:var(--lr-space-m);display:flex}[part=list][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}}`;export{styles};
@@ -16,7 +16,9 @@ children?:readonly LyraSourceEntry[];}export interface LyraSourcePickerEventMap{
16
16
  *
17
17
  * @customElement lr-source-picker
18
18
  * @event lr-sources-change - `detail: { selectedSourceIds }` — the complete updated leaf-id array,
19
- * fired after every toggle including select-all.
19
+ * fired after every toggle including select-all. Also fires when a `sources` reassignment prunes
20
+ * a previously-selected id that is no longer a valid leaf. Not fired when a consumer sets
21
+ * `selectedSourceIds` directly; that assignment is normalized silently.
20
22
  * @csspart base - The root wrapper.
21
23
  * @csspart search - The built-in filter `lr-input`, only rendered when `searchable`.
22
24
  * @csspart select-all - The header select-all row, only rendered when `showSelectAll`.