@aceshooting/lyra-ui 13.0.1 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +18 -13
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -23,8 +23,9 @@ export type ActivityFeedMode=LyraTranscriptMode;export interface ActivityFeedTog
23
23
  * first occurrence wins.
24
24
  *
25
25
  * Each entry's `text` renders as plain text by default; a host needing richer per-entry content
26
- * (rendered markdown, a trailing tool-call chip list, etc.) sets `renderText` to fully replace it,
27
- * identically whether or not the feed is currently virtualized.
26
+ * (rendered markdown, a trailing tool-call chip list, etc.) sets `renderText` to replace the
27
+ * default text inside the stable `entry-text` styling wrapper, identically whether or not the feed
28
+ * is currently virtualized.
28
29
  *
29
30
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
30
31
  * collection and reassign it after changes; mutating the assigned array does not update the view.
@@ -54,8 +55,8 @@ export type ActivityFeedMode=LyraTranscriptMode;export interface ActivityFeedTog
54
55
  * @csspart variant-dot-success - A `success`-variant entry's dot (also carries `variant-dot`).
55
56
  * @csspart variant-dot-warning - A `warning`-variant entry's dot (also carries `variant-dot`).
56
57
  * @csspart variant-dot-danger - A `danger`-variant entry's dot (also carries `variant-dot`).
57
- * @csspart entry-text - The entry's `text`. Not rendered while `renderText` is set its returned
58
- * content replaces this part entirely.
58
+ * @csspart entry-text - The entry's text styling wrapper. `renderText`, when set, supplies rich
59
+ * content inside this stable part instead of replacing the part itself.
59
60
  * @csspart entry-timestamp - The formatted timestamp, only rendered while `showTimestamps` and a
60
61
  * valid `timestamp` is set.
61
62
  * @cssprop [--lr-activity-feed-max-height=16rem] - Cap on how tall the expanded body grows
@@ -80,28 +81,35 @@ follow:boolean;
80
81
  * collapsed sets `mode="post-hoc"` and `expanded=false` together. */
81
82
  expanded:boolean;
82
83
  /** Optional header-text override. Omission localizes `activityFeedLabel`; any supplied string,
83
- * including `'Activity'` or `''`, is rendered verbatim. A host `aria-label`, when present, names
84
- * the owned list in both the plain and virtualized rendering paths while this remains the visible
85
- * header text. */
84
+ * including `'Activity'` or `''`, is rendered verbatim. The semantic list uses an authored host
85
+ * `aria-label` when present (including an explicit empty value), otherwise its localized
86
+ * `activityFeedLabel` fallback, while this remains the visible header text. */
86
87
  label?:string;
87
88
  /** Trailing `<time datetime>` per entry, default `hour:minute` in `effectiveLocale`. */
88
89
  showTimestamps:boolean;
89
90
  /** Overrides the default `hour:minute` rendering of every entry's `timestamp`. */
90
91
  formatTimestamp?:(date:Date)=>string;
91
- /** Overrides the default plain-text `[part="entry-text"]` rendering of every entry with an
92
- * arbitrary `TemplateResult` (e.g. rendered markdown, or markdown plus a trailing list of
93
- * `<lr-tool-call-chip>`s) the returned content fully replaces `[part="entry-text"]` rather
94
- * than augmenting it, the same way `formatTimestamp` fully replaces the default timestamp
95
- * formatting. Applies identically whether or not the feed is currently virtualized, since both
96
- * paths render every entry through the same internal template. */
92
+ /** Overrides the default plain text inside every `[part="entry-text"]` wrapper with an arbitrary
93
+ * `TemplateResult` (e.g. rendered markdown, or markdown plus a trailing list of
94
+ * `<lr-tool-call-chip>`s). The stable wrapper remains available for styling in both rendering
95
+ * paths, since both render every entry through the same internal template. */
97
96
  renderText?:(entry:ActivityEntry)=>TemplateResult;
98
97
  /** At/above this entry count, the body renders through an internal `<lr-virtual-list>`. */
99
98
  virtualizeAt:number;private liveRegion?;private virtualListEl?;private readonly headerId;private readonly bodyId;
100
99
  /** `true` until the first completed update -- gates the mode-transition announcement so
101
100
  * mounting in a non-default mode never announces historical state. */
102
- private isMounting;private scrollRafId?;private scrollRafOwner?;private scrollRafDocument?;private virtualAnchorReleaseRafId?;private virtualAnchorReleaseRafOwner?;private virtualAnchorReleaseRafDocument?;private anchoringVirtualTail;private ownerRealmGeneration;private virtualAnchorRequest;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;
101
+ private isMounting;private scrollRafId?;private scrollRafOwner?;private scrollRafDocument?;private virtualAnchorReleaseRafId?;private virtualAnchorReleaseRafOwner?;private virtualAnchorReleaseRafDocument?;private anchoringVirtualTail;private ownerRealmGeneration;private virtualAnchorRequest;private externalLabelledByLease?;private externalDescribedByLease?;private relationshipSyncRequest;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;
103
102
  /** `virtualizeAt`, normalized to a finite non-negative integer (falling back to the
104
103
  * property's own default of `199`) -- a raw `NaN` (e.g. an invalid `virtualize-at`
105
104
  * attribute) would otherwise make `entries.length > virtualizeAt` always false,
106
105
  * silently disabling virtualization instead of falling back to the default threshold. */
107
- private get effectiveVirtualizeAt();private get normalizedEntries();private get isVirtualized();private get shouldFollowLiveTail();private cancelScrollFrame;private cancelVirtualAnchorReleaseFrame;private resetOwnerRealmWork;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private scrollToLatest;private completedStepsSummary;private toggle;private setFollowFromUser;private onBodyScroll;private onVirtualListRangeChanged;private stopOwnedEvent;private normalizedTimestamp;private entryTemplate;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-activity-feed':LyraActivityFeed;}}
106
+ private get effectiveVirtualizeAt();private get normalizedEntries();private get isVirtualized();private get shouldFollowLiveTail();private cancelScrollFrame;private cancelVirtualAnchorReleaseFrame;private resetOwnerRealmWork;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private scrollToLatest;private completedStepsSummary;
107
+ /** The element that owns the real list role in either rendering path. The virtual list's public
108
+ * scrollContainer is its internal `[part="base"]` list owner, not the composed custom-element
109
+ * host, so host IDREF relationships reach the semantic element without widening virtual-list's
110
+ * public API. */
111
+ private get listSemanticOwner();
112
+ /** Projects both authored host IDREF relationships onto the current semantic list owner. */
113
+ private syncListRelationships;
114
+ /** A parent update can finish before the composed virtual list creates its real list owner. */
115
+ private scheduleListRelationshipSync;private releaseListRelationships;private toggle;private setFollowFromUser;private onBodyScroll;private onVirtualListRangeChanged;private stopOwnedEvent;private normalizedTimestamp;private entryTemplate;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-activity-feed':LyraActivityFeed;}}
@@ -1,10 +1,12 @@
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,query}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{getDateTimeFormat,getNumberFormat,getPluralRules}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{styles}from"./activity-feed.styles.js";import{literalSetConverter,presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_activityFeedCompletedStep,LYRA_DEFAULT_activityFeedCompletedSteps,LYRA_DEFAULT_activityFeedLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const ACTIVITY_FEED_MODE=literalSetConverter(["live","post-hoc"],"live"),NEAR_BOTTOM_PX=48;function variantDotPart(variant){return variant==="brand"?"variant-dot variant-dot-brand":variant==="success"?"variant-dot variant-dot-success":variant==="warning"?"variant-dot variant-dot-warning":variant==="danger"?"variant-dot variant-dot-danger":"variant-dot variant-dot-neutral"}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}class LyraActivityFeed extends LyraElement{constructor(){super(...arguments),this.entries=[],this._mode="live",this.follow=!0,this.expanded=!1,this.showTimestamps=!1,this.virtualizeAt=199,this.headerId=nextId("activity-feed-header"),this.bodyId=nextId("activity-feed-body"),this.isMounting=!0,this.anchoringVirtualTail=!1,this.ownerRealmGeneration=0,this.virtualAnchorRequest=0,this.toggle=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded})},this.onBodyScroll=e=>{if(this.isVirtualized||this.mode!=="live")return;const body=e.currentTarget,nearBottom=body.scrollHeight-body.scrollTop-body.clientHeight<=NEAR_BOTTOM_PX;this.setFollowFromUser(nearBottom)},this.onVirtualListRangeChanged=e=>{if(e.stopPropagation(),this.mode!=="live"||this.anchoringVirtualTail)return;const entries=this.normalizedEntries,atBottom=entries.length>0&&e.detail.end>=entries.length-1;this.setFollowFromUser(atBottom)},this.stopOwnedEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,activityFeedCompletedStep:LYRA_DEFAULT_activityFeedCompletedStep,activityFeedCompletedSteps:LYRA_DEFAULT_activityFeedCompletedSteps,activityFeedLabel:LYRA_DEFAULT_activityFeedLabel,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=ACTIVITY_FEED_MODE.normalizeReflected(this,"mode",next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.shouldFollowLiveTail&&this.scrollToLatest()}disconnectedCallback(){this.resetOwnerRealmWork(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetOwnerRealmWork(),this.isConnected&&this.shouldFollowLiveTail&&this.scrollToLatest()}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,199)}get normalizedEntries(){return firstByIdentity(Array.isArray(this.entries)?this.entries:[],entry=>entry.id)}get isVirtualized(){return this.normalizedEntries.length>this.effectiveVirtualizeAt}get shouldFollowLiveTail(){return this.expanded&&this.mode==="live"&&this.follow}cancelScrollFrame(){this.scrollRafId!==void 0&&this.scrollRafOwner?.cancelAnimationFrame(this.scrollRafId),this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0}cancelVirtualAnchorReleaseFrame(){this.virtualAnchorReleaseRafId!==void 0&&this.virtualAnchorReleaseRafOwner?.cancelAnimationFrame(this.virtualAnchorReleaseRafId),this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.virtualAnchorRequest+=1,this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1}willUpdate(changed){super.willUpdate(changed),(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live"&&(this.follow=!0)}updated(changed){super.updated(changed);const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&changed.has("mode")&&changed.get("mode")==="live"&&this.mode==="post-hoc"){const region=this.liveRegion;region&&(region.mode="polite",region.announce(this.completedStepsSummary(),{force:!0}))}const justAnchored=(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live",followingChangedRenderPath=changed.has("virtualizeAt")&&this.expanded&&this.mode==="live"&&this.follow;(justAnchored||followingChangedRenderPath||changed.has("entries")&&this.expanded&&this.mode==="live"&&this.follow)&&this.scrollToLatest()}scrollToLatest(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected||!this.shouldFollowLiveTail)return;const generation=this.ownerRealmGeneration;if(this.isVirtualized){this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!0;const request=++this.virtualAnchorRequest;this.updateComplete.then(()=>{const list=this.virtualListEl;if(request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected)return;if(!list||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}list.scrollToIndex(this.normalizedEntries.length-1,{align:"end",behavior:"auto"});const firstHandle=ownerWindow.requestAnimationFrame(()=>{if(this.virtualAnchorReleaseRafId!==firstHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument)return;if(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,!this.anchoringVirtualTail||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}const secondHandle=ownerWindow.requestAnimationFrame(()=>{this.virtualAnchorReleaseRafId!==secondHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,this.anchoringVirtualTail=!1)});this.virtualAnchorReleaseRafId=secondHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});this.virtualAnchorReleaseRafId=firstHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});return}if(this.virtualAnchorRequest+=1,this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1,this.scrollRafId!==void 0)return;const handle=ownerWindow.requestAnimationFrame(()=>{if(this.scrollRafId!==handle||this.scrollRafOwner!==ownerWindow||this.scrollRafDocument!==ownerDocument||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0,!this.shouldFollowLiveTail||this.isVirtualized))return;const body=this.renderRoot.querySelector('[part="body"]');body&&(body.scrollTop=body.scrollHeight)});this.scrollRafId=handle,this.scrollRafOwner=ownerWindow,this.scrollRafDocument=ownerDocument}completedStepsSummary(){const count=this.normalizedEntries.length,key=getPluralRules(this.effectiveLocale).select(count)==="one"?"activityFeedCompletedStep":"activityFeedCompletedSteps";return this.localize(key,void 0,{count:getNumberFormat(this.effectiveLocale).format(count)})}setFollowFromUser(following){following!==this.follow&&(this.follow=following,this.emit("lr-follow-change",{following}))}normalizedTimestamp(value){if(value===void 0)return;const date=value instanceof Date?value:new Date(value);return Number.isNaN(date.getTime())?void 0:date}entryTemplate(entry,ownRole){const ts=this.normalizedTimestamp(entry.timestamp),formatter=this.formatTimestamp??(date=>defaultFormatTimestamp(date,this.effectiveLocale)),variant=entry.variant??"neutral",dotPart=variantDotPart(variant);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,query}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{chevronIcon}from"../../../internal/icons.js";import{getDateTimeFormat,getNumberFormat,getPluralRules}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{styles}from"./activity-feed.styles.js";import{literalSetConverter,presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_activityFeedCompletedStep,LYRA_DEFAULT_activityFeedCompletedSteps,LYRA_DEFAULT_activityFeedLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const ACTIVITY_FEED_MODE=literalSetConverter(["live","post-hoc"],"live"),NEAR_BOTTOM_PX=48;function variantDotPart(variant){return variant==="brand"?"variant-dot variant-dot-brand":variant==="success"?"variant-dot variant-dot-success":variant==="warning"?"variant-dot variant-dot-warning":variant==="danger"?"variant-dot variant-dot-danger":"variant-dot variant-dot-neutral"}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}class LyraActivityFeed extends LyraElement{constructor(){super(...arguments),this.entries=[],this._mode="live",this.follow=!0,this.expanded=!1,this.showTimestamps=!1,this.virtualizeAt=199,this.headerId=nextId("activity-feed-header"),this.bodyId=nextId("activity-feed-body"),this.isMounting=!0,this.anchoringVirtualTail=!1,this.ownerRealmGeneration=0,this.virtualAnchorRequest=0,this.relationshipSyncRequest=0,this.toggle=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded})},this.onBodyScroll=e=>{if(this.isVirtualized||this.mode!=="live")return;const body=e.currentTarget,nearBottom=body.scrollHeight-body.scrollTop-body.clientHeight<=NEAR_BOTTOM_PX;this.setFollowFromUser(nearBottom)},this.onVirtualListRangeChanged=e=>{if(e.stopPropagation(),this.mode!=="live"||this.anchoringVirtualTail)return;const entries=this.normalizedEntries,atBottom=entries.length>0&&e.detail.end>=entries.length-1;this.setFollowFromUser(atBottom)},this.stopOwnedEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,activityFeedCompletedStep:LYRA_DEFAULT_activityFeedCompletedStep,activityFeedCompletedSteps:LYRA_DEFAULT_activityFeedCompletedSteps,activityFeedLabel:LYRA_DEFAULT_activityFeedLabel,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=ACTIVITY_FEED_MODE.normalizeReflected(this,"mode",next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.hasUpdated&&this.shouldFollowLiveTail&&this.scrollToLatest()}disconnectedCallback(){this.releaseListRelationships(),this.resetOwnerRealmWork(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseListRelationships(),this.resetOwnerRealmWork(),this.isConnected&&this.hasUpdated&&(this.syncListRelationships(),this.scheduleListRelationshipSync()),this.isConnected&&this.shouldFollowLiveTail&&this.scrollToLatest()}get effectiveVirtualizeAt(){return finiteCount(this.virtualizeAt,199)}get normalizedEntries(){return firstByIdentity(Array.isArray(this.entries)?this.entries:[],entry=>entry.id)}get isVirtualized(){return this.normalizedEntries.length>this.effectiveVirtualizeAt}get shouldFollowLiveTail(){return this.expanded&&this.mode==="live"&&this.follow}cancelScrollFrame(){this.scrollRafId!==void 0&&this.scrollRafOwner?.cancelAnimationFrame(this.scrollRafId),this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0}cancelVirtualAnchorReleaseFrame(){this.virtualAnchorReleaseRafId!==void 0&&this.virtualAnchorReleaseRafOwner?.cancelAnimationFrame(this.virtualAnchorReleaseRafId),this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0}resetOwnerRealmWork(){this.ownerRealmGeneration+=1,this.virtualAnchorRequest+=1,this.relationshipSyncRequest+=1,this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1}willUpdate(changed){super.willUpdate(changed),(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live"&&(this.follow=!0)}updated(changed){super.updated(changed),this.syncListRelationships(),this.scheduleListRelationshipSync();const wasMounting=this.isMounting;if(this.isMounting=!1,!wasMounting&&changed.has("mode")&&changed.get("mode")==="live"&&this.mode==="post-hoc"){const region=this.liveRegion;region&&(region.mode="polite",region.announce(this.completedStepsSummary(),{force:!0}))}const justAnchored=(changed.has("expanded")||changed.has("mode"))&&this.expanded&&this.mode==="live",followingChangedRenderPath=changed.has("virtualizeAt")&&this.expanded&&this.mode==="live"&&this.follow;(justAnchored||followingChangedRenderPath||changed.has("entries")&&this.expanded&&this.mode==="live"&&this.follow)&&this.scrollToLatest()}scrollToLatest(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ownerWindow||!this.isConnected||!this.shouldFollowLiveTail)return;const generation=this.ownerRealmGeneration;if(this.isVirtualized){this.cancelScrollFrame(),this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!0;const request=++this.virtualAnchorRequest;this.updateComplete.then(()=>{const list=this.virtualListEl;if(request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected)return;if(!list||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}list.scrollToIndex(this.normalizedEntries.length-1,{align:"end",behavior:"auto"});const firstHandle=ownerWindow.requestAnimationFrame(()=>{if(this.virtualAnchorReleaseRafId!==firstHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument)return;if(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,!this.anchoringVirtualTail||!this.isVirtualized||!this.shouldFollowLiveTail){this.anchoringVirtualTail=!1;return}const secondHandle=ownerWindow.requestAnimationFrame(()=>{this.virtualAnchorReleaseRafId!==secondHandle||this.virtualAnchorReleaseRafOwner!==ownerWindow||this.virtualAnchorReleaseRafDocument!==ownerDocument||request!==this.virtualAnchorRequest||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.virtualAnchorReleaseRafId=void 0,this.virtualAnchorReleaseRafOwner=void 0,this.virtualAnchorReleaseRafDocument=void 0,this.anchoringVirtualTail=!1)});this.virtualAnchorReleaseRafId=secondHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});this.virtualAnchorReleaseRafId=firstHandle,this.virtualAnchorReleaseRafOwner=ownerWindow,this.virtualAnchorReleaseRafDocument=ownerDocument});return}if(this.virtualAnchorRequest+=1,this.cancelVirtualAnchorReleaseFrame(),this.anchoringVirtualTail=!1,this.scrollRafId!==void 0)return;const handle=ownerWindow.requestAnimationFrame(()=>{if(this.scrollRafId!==handle||this.scrollRafOwner!==ownerWindow||this.scrollRafDocument!==ownerDocument||generation!==this.ownerRealmGeneration||!this.isConnected||this.ownerDocument!==ownerDocument||(this.scrollRafId=void 0,this.scrollRafOwner=void 0,this.scrollRafDocument=void 0,!this.shouldFollowLiveTail||this.isVirtualized))return;const body=this.renderRoot.querySelector('[part="body"]');body&&(body.scrollTop=body.scrollHeight)});this.scrollRafId=handle,this.scrollRafOwner=ownerWindow,this.scrollRafDocument=ownerDocument}completedStepsSummary(){const count=this.normalizedEntries.length,key=getPluralRules(this.effectiveLocale).select(count)==="one"?"activityFeedCompletedStep":"activityFeedCompletedSteps";return this.localize(key,void 0,{count:getNumberFormat(this.effectiveLocale).format(count)})}get listSemanticOwner(){return this.isVirtualized?this.virtualListEl?.scrollContainer??null:this.renderRoot.querySelector('[part="body"][role="list"]')}syncListRelationships(){const target=this.listSemanticOwner;if(!target){this.releaseListRelationships();return}this.externalLabelledByLease?this.externalLabelledByLease.update(target):this.externalLabelledByLease=acquireResolvedAriaRelationship(this,target,"aria-labelledby"),this.externalDescribedByLease?this.externalDescribedByLease.update(target):this.externalDescribedByLease=acquireResolvedAriaRelationship(this,target,"aria-describedby")}scheduleListRelationshipSync(){const list=this.virtualListEl;if(!this.isVirtualized||!list||!this.isConnected){this.relationshipSyncRequest+=1;return}const request=++this.relationshipSyncRequest,ownerDocument=this.ownerDocument,generation=this.ownerRealmGeneration;list.updateComplete.then(()=>{request!==this.relationshipSyncRequest||generation!==this.ownerRealmGeneration||this.ownerDocument!==ownerDocument||!this.isConnected||!this.isVirtualized||this.virtualListEl!==list||this.syncListRelationships()})}releaseListRelationships(){this.externalLabelledByLease?.release(),this.externalLabelledByLease=void 0,this.externalDescribedByLease?.release(),this.externalDescribedByLease=void 0}setFollowFromUser(following){following!==this.follow&&(this.follow=following,this.emit("lr-follow-change",{following}))}normalizedTimestamp(value){if(value===void 0)return;const date=value instanceof Date?value:new Date(value);return Number.isNaN(date.getTime())?void 0:date}entryTemplate(entry,ownRole){const ts=this.normalizedTimestamp(entry.timestamp),formatter=this.formatTimestamp??(date=>defaultFormatTimestamp(date,this.effectiveLocale)),variant=entry.variant??"neutral",dotPart=variantDotPart(variant);return html`
2
2
  <div part="entry" role=${ownRole?"listitem":nothing} data-variant=${variant}>
3
- <span part="entry-icon" aria-hidden="true">${entry.icon?entry.icon:html`<span part=${dotPart} data-variant=${variant}></span>`}</span>
4
- ${this.renderText?this.renderText(entry):html`<span part="entry-text">${entry.text}</span>`}
3
+ <span part="entry-icon" aria-hidden="true"
4
+ >${entry.icon?entry.icon:html`<span part=${dotPart} data-variant=${variant}></span>`}</span
5
+ >
6
+ <span part="entry-text">${this.renderText?this.renderText(entry):entry.text}</span>
5
7
  ${this.showTimestamps&&ts?html`<time part="entry-timestamp" datetime=${ts.toISOString()}>${formatter(ts)}</time>`:nothing}
6
8
  </div>
7
- `}render(){const entries=this.normalizedEntries,label=this.label==null?this.localize("activityFeedLabel"):this.label,ariaLabel=hostAriaLabel(this)??label,headerText=this.mode==="live"?entries[entries.length-1]?.text??"":this.completedStepsSummary(),virtualized=this.isVirtualized;return html`
9
+ `}render(){const entries=this.normalizedEntries,fallbackLabel=this.localize("activityFeedLabel"),label=this.label==null?fallbackLabel:this.label,headerText=this.mode==="live"?entries[entries.length-1]?.text??"":this.completedStepsSummary(),listAriaLabel=this.hasAttribute("aria-label")?this.getAttribute("aria-label")??"":fallbackLabel,headerAriaLabel=`${label} ${headerText}`.trim()?nothing:fallbackLabel,virtualized=this.isVirtualized;return html`
8
10
  <div part="base">
9
11
  <button
10
12
  part="header"
@@ -12,6 +14,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
12
14
  id=${this.headerId}
13
15
  aria-expanded=${this.expanded?"true":"false"}
14
16
  aria-controls=${this.bodyId}
17
+ aria-label=${headerAriaLabel}
15
18
  @click=${this.toggle}
16
19
  >
17
20
  <span part="toggle" aria-hidden="true">${chevronIcon()}</span>
@@ -24,7 +27,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
24
27
  id=${this.bodyId}
25
28
  role=${virtualized?nothing:"list"}
26
29
  tabindex=${virtualized?nothing:"0"}
27
- aria-label=${virtualized?nothing:ariaLabel}
30
+ aria-label=${virtualized?nothing:listAriaLabel}
28
31
  ?hidden=${!this.expanded}
29
32
  @scroll=${this.onBodyScroll}
30
33
  >
@@ -33,7 +36,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
33
36
  .items=${entries}
34
37
  .renderItem=${item=>this.entryTemplate(item,!1)}
35
38
  .keyFunction=${item=>item.id}
36
- aria-label=${ariaLabel}
39
+ aria-label=${listAriaLabel}
37
40
  @lr-visible-range-change=${this.onVirtualListRangeChanged}
38
41
  @lr-virtual-scroll=${this.stopOwnedEvent}
39
42
  ></lr-virtual-list>`:repeat(entries,entry=>entry.id,entry=>this.entryTemplate(entry,!0))}
@@ -35,8 +35,10 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
35
35
  * shape, so
36
36
  * a host can encode the current span id in a URL and feed it straight back in.
37
37
  *
38
- * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
39
- * collection and reassign it after changes; mutating the assigned array does not update the view.
38
+ * Public collection properties take bounded readonly snapshots. `spans` keeps its admitted item
39
+ * identities only long enough for the shared descriptor-safe projection to copy its fields; later
40
+ * rendering never re-reads an admitted source row. Create a new collection and reassign it after
41
+ * changes; mutating the assigned array does not update the view.
40
42
  *
41
43
  * @customElement lr-agent-trace
42
44
  * @event lr-span-select - `detail: { spanId }` — a span was activated, from the tree or the handoff list.
@@ -54,7 +56,11 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
54
56
  * @status stable
55
57
  * @since 4.1.0
56
58
  */
57
- export declare class LyraAgentTrace extends LyraElement<LyraAgentTraceEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
59
+ export declare class LyraAgentTrace extends LyraElement<LyraAgentTraceEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
60
+ /** Span sources can carry opaque provider metadata; the shared normalizer copies only its closed
61
+ * display schema once, so cloning each whole source record would both lose opaque identity and
62
+ * create an unsafe second traversal. */
63
+ protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
58
64
  /** The full, unfiltered span array -- identical contract to `<lr-trace-tree>.spans`. Controlled
59
65
  * and never mutated by this component; `activeSpanId` and its ancestor path reserve positions
60
66
  * inside the shared 500-row projection before kind filtering. */
@@ -86,6 +92,9 @@ private handoffFromAgent;
86
92
  /** Same computation `<lr-handoff-divider>` performs internally for its own `aria-label`, reused
87
93
  * here (not reimplemented with different wording) for this button's accessible name. */
88
94
  private handoffAccessibleLabel;private onVisibilityChange;
95
+ /** Keeps the composed legend's cancelable proposal within this wrapper without changing its
96
+ * default-prevented state. The child still owns the proposal, commit, and announcement. */
97
+ private onBeforeVisibilityChange;
89
98
  /** Keeps `activeSpanId` (and therefore the handoff list's own highlighting) in sync when
90
99
  * selection originates inside the composed `<lr-trace-tree>` rather than the handoff quick-jump
91
100
  * list. The original event is never stopped here, so it still reaches a host listener on this
@@ -1,9 +1,10 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./agent-trace.styles.js";import{normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_agentTraceFilterLabel,LYRA_DEFAULT_handoffFromToAgent,LYRA_DEFAULT_handoffToAgent,LYRA_DEFAULT_popover,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool}from"../../../internal/default-strings.generated.js";const KIND_ORDER=["agent","llm","tool","retriever","embedding","other"],KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"};class LyraAgentTrace extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.hiddenKinds=[],this.showTokens=!1,this.showCost=!1,this.showBars=!0,this.onVisibilityChange=e=>{e.stopPropagation(),this.hiddenKinds=e.detail.hiddenTypes,this.emit("lr-span-visibility-change",{hiddenKinds:[...this.hiddenKinds]})},this.onTreeSpanSelect=e=>{this.activeSpanId=e.detail.spanId}}static{this.defaultStrings={...super.defaultStrings,agentTraceFilterLabel:LYRA_DEFAULT_agentTraceFilterLabel,handoffFromToAgent:LYRA_DEFAULT_handoffFromToAgent,handoffToAgent:LYRA_DEFAULT_handoffToAgent,popover:LYRA_DEFAULT_popover,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool}}static{this.ownedCollectionProperties=Object.freeze(["spans","hiddenKinds"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-span-visibility-change"])}presentKinds(spans){const present=new Set(spans.map(s=>s.kind));return KIND_ORDER.filter(k=>present.has(k))}filteredSpans(spans){if(this.hiddenKinds.length===0)return[...spans];const hidden=new Set(this.hiddenKinds);return spans.filter(span=>!hidden.has(span.kind))}handoffSpans(spans){return spans.filter(span=>span.kind==="agent")}handoffFromAgent(span,byId){if(!span.parentId)return"";const parent=byId.get(span.parentId);return parent?.kind==="agent"?parent.name:""}handoffAccessibleLabel(span,fromAgent){return fromAgent?this.localize("handoffFromToAgent",void 0,{from:fromAgent,to:span.name}):this.localize("handoffToAgent",void 0,{agent:span.name})}selectSpan(id){this.activeSpanId=id,this.emit("lr-span-select",{spanId:id})}renderFilter(spans){const kinds=this.presentKinds(spans);if(kinds.length===0)return nothing;const types=kinds.map(k=>({id:k,label:this.localize(KIND_LABEL_KEY[k])}));return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./agent-trace.styles.js";import{normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_agentTraceFilterLabel,LYRA_DEFAULT_handoffFromToAgent,LYRA_DEFAULT_handoffToAgent,LYRA_DEFAULT_popover,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings.generated.js";const KIND_ORDER=["agent","llm","tool","retriever","embedding","other"],KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"};class LyraAgentTrace extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.hiddenKinds=[],this.showTokens=!1,this.showCost=!1,this.showBars=!0,this.onVisibilityChange=e=>{e.stopPropagation(),this.hiddenKinds=e.detail.hiddenTypes,this.emit("lr-span-visibility-change",{hiddenKinds:[...this.hiddenKinds]})},this.onBeforeVisibilityChange=event=>{event.stopPropagation()},this.onTreeSpanSelect=e=>{this.activeSpanId=e.detail.spanId}}static{this.defaultStrings={...super.defaultStrings,agentTraceFilterLabel:LYRA_DEFAULT_agentTraceFilterLabel,handoffFromToAgent:LYRA_DEFAULT_handoffFromToAgent,handoffToAgent:LYRA_DEFAULT_handoffToAgent,popover:LYRA_DEFAULT_popover,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.ownedCollectionProperties=Object.freeze(["spans","hiddenKinds"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-span-visibility-change"])}presentKinds(spans){const present=new Set(spans.map(s=>s.kind));return KIND_ORDER.filter(k=>present.has(k))}filteredSpans(spans){if(this.hiddenKinds.length===0)return[...spans];const hidden=new Set(this.hiddenKinds);return spans.filter(span=>!hidden.has(span.kind))}handoffSpans(spans){return spans.filter(span=>span.kind==="agent")}handoffFromAgent(span,byId){if(!span.parentId)return"";const parent=byId.get(span.parentId);return parent?.kind==="agent"?parent.name:""}handoffAccessibleLabel(span,fromAgent){return fromAgent?this.localize("handoffFromToAgent",void 0,{from:fromAgent,to:span.name}):this.localize("handoffToAgent",void 0,{agent:span.name})}selectSpan(id){this.activeSpanId=id,this.emit("lr-span-select",{spanId:id})}renderFilter(spans){const kinds=this.presentKinds(spans);if(kinds.length===0)return nothing;const types=kinds.map(k=>({id:k,label:this.localize(KIND_LABEL_KEY[k])}));return html`
2
2
  <lr-graph-legend
3
3
  part="filter"
4
4
  .label=${this.localize("agentTraceFilterLabel")}
5
5
  .types=${types}
6
6
  .hiddenTypes=${this.hiddenKinds}
7
+ @lr-before-visibility-change=${this.onBeforeVisibilityChange}
7
8
  @lr-visibility-change=${this.onVisibilityChange}
8
9
  ></lr-graph-legend>
9
10
  `}renderHandoff(span,byId){const fromAgent=this.handoffFromAgent(span,byId),isActive=this.activeSpanId===span.id;return html`
@@ -15,7 +15,9 @@ export interface ToolApprovalRequest{id:string;toolName:string;args:unknown;stat
15
15
  * @event lr-approval-select - A request was selected. `detail: { invocationId }`.
16
16
  * @event lr-approval-decision - A request was approved or denied. `detail: { invocationId,
17
17
  * approved, args? }`. Cancelable; preventing it keeps the nested dialog pending.
18
- * @event lr-approval-close - The nested decision dialog closed. `detail: { invocationId, reason }`.
18
+ * @event lr-approval-close - The nested decision dialog closed, or controlled requests invalidated
19
+ * its formerly pending selection. `detail: { invocationId, reason }`; invalidation uses
20
+ * `reason: 'request-invalidated'` after selection and open state are cleared. Non-cancelable.
19
21
  * @csspart base - The root queue wrapper.
20
22
  * @csspart heading-row - The heading and pending-count row.
21
23
  * @csspart heading - The visible queue heading.
@@ -45,4 +47,4 @@ open:boolean;
45
47
  editable:boolean;
46
48
  /** Accessible name and visible heading. Optional. Omitting it localizes the default
47
49
  * `approvalQueueLabel` message; an explicit empty string renders no visible/accessible label. */
48
- label?:string;private get normalizedRequests();private get selectedRequest();protected willUpdate(changed:PropertyValues):void;private pendingCount;private formatCount;private statusLabel;private statusVariant;private select;private onApprove;private onDeny;private onClose;private renderRequest;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-approval-queue':LyraApprovalQueue;}}
50
+ label?:string;private nestedCloseInvocationId;private normalizedRequestsFor;private get normalizedRequests();private get selectedRequest();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private pendingCount;private formatCount;private statusLabel;private statusVariant;private select;private onApprove;private onDeny;private onClose;private renderRequest;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-approval-queue':LyraApprovalQueue;}}
@@ -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{keyed}from"lit/directives/keyed.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./approval-queue.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_approvalQueueEmpty,LYRA_DEFAULT_approvalQueueLabel,LYRA_DEFAULT_approvalQueueOpen,LYRA_DEFAULT_approvalQueuePending,LYRA_DEFAULT_approvalQueuePendingCount,LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied}from"../../../internal/default-strings.generated.js";class LyraApprovalQueue extends LyraElement{constructor(){super(...arguments),this.requests=[],this.selectedInvocationId=null,this.open=!1,this.editable=!0}static{this.defaultStrings={...super.defaultStrings,approvalQueueEmpty:LYRA_DEFAULT_approvalQueueEmpty,approvalQueueLabel:LYRA_DEFAULT_approvalQueueLabel,approvalQueueOpen:LYRA_DEFAULT_approvalQueueOpen,approvalQueuePending:LYRA_DEFAULT_approvalQueuePending,approvalQueuePendingCount:LYRA_DEFAULT_approvalQueuePendingCount,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied}}static{this.ownedCollectionProperties=Object.freeze(["requests"])}static{this.styles=[LyraElement.styles,styles]}get normalizedRequests(){return firstByIdentity(Array.isArray(this.requests)?this.requests:[],request=>request.id)}get selectedRequest(){return this.normalizedRequests.find(request=>request.id===this.selectedInvocationId)}willUpdate(changed){if(super.willUpdate(changed),!changed.has("requests")&&!changed.has("selectedInvocationId"))return;const selected=this.selectedRequest;selected&&(selected.status??"pending")==="pending"||(this.selectedInvocationId!==null&&(this.selectedInvocationId=null),this.open&&(this.open=!1))}pendingCount(){return this.normalizedRequests.filter(request=>(request.status??"pending")==="pending").length}formatCount(value){return getNumberFormat(this.effectiveLocale).format(value)}statusLabel(status){return status==="approved"?this.localize("confirmApproved"):status==="denied"?this.localize("confirmDenied"):this.localize("approvalQueuePending")}statusVariant(status){return status==="approved"?"success":status==="denied"?"danger":"warning"}select(request){(request.status??"pending")==="pending"&&(this.selectedInvocationId=request.id,this.open=!0,this.emit("lr-approval-select",{invocationId:request.id}))}onApprove(request,event){if(event.stopPropagation(),(request.status??"pending")!=="pending")return;this.emit("lr-approval-decision",{invocationId:request.id,approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented&&event.preventDefault()}onDeny(request,event){if(event.stopPropagation(),(request.status??"pending")!=="pending")return;this.emit("lr-approval-decision",{invocationId:request.id,approved:!1},{cancelable:!0}).defaultPrevented&&event.preventDefault()}onClose(request,event){event.stopPropagation(),this.open=!1,this.emit("lr-approval-close",{invocationId:request.id,reason:event.detail})}renderRequest(request){const status=request.status??"pending";return html`<div role="listitem"><button
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{keyed}from"lit/directives/keyed.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./approval-queue.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_approvalQueueEmpty,LYRA_DEFAULT_approvalQueueLabel,LYRA_DEFAULT_approvalQueueOpen,LYRA_DEFAULT_approvalQueuePending,LYRA_DEFAULT_approvalQueuePendingCount,LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied}from"../../../internal/default-strings.generated.js";class LyraApprovalQueue extends LyraElement{constructor(){super(...arguments),this.requests=[],this.selectedInvocationId=null,this.open=!1,this.editable=!0,this.nestedCloseInvocationId=null}static{this.defaultStrings={...super.defaultStrings,approvalQueueEmpty:LYRA_DEFAULT_approvalQueueEmpty,approvalQueueLabel:LYRA_DEFAULT_approvalQueueLabel,approvalQueueOpen:LYRA_DEFAULT_approvalQueueOpen,approvalQueuePending:LYRA_DEFAULT_approvalQueuePending,approvalQueuePendingCount:LYRA_DEFAULT_approvalQueuePendingCount,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied}}static{this.ownedCollectionProperties=Object.freeze(["requests"])}static{this.styles=[LyraElement.styles,styles]}normalizedRequestsFor(value){const requests=Array.isArray(value)?value:[];return firstByIdentity(requests,request=>request.id)}get normalizedRequests(){return this.normalizedRequestsFor(this.requests)}get selectedRequest(){return this.normalizedRequests.find(request=>request.id===this.selectedInvocationId)}willUpdate(changed){if(super.willUpdate(changed),!changed.has("requests")&&!changed.has("selectedInvocationId"))return;const selectedInvocationId=this.selectedInvocationId,selected=this.selectedRequest;if(selected&&(selected.status??"pending")==="pending")return;const previousSelected=selectedInvocationId!==null&&changed.has("requests")?this.normalizedRequestsFor(changed.get("requests")).find(request=>request.id===selectedInvocationId):void 0,invalidated=this.hasUpdated&&!changed.has("selectedInvocationId")&&selectedInvocationId!==null&&previousSelected!==void 0&&(previousSelected.status??"pending")==="pending",nestedCloseInSameCycle=this.nestedCloseInvocationId===selectedInvocationId;this.selectedInvocationId=null,this.open=!1,invalidated&&!nestedCloseInSameCycle&&this.emit("lr-approval-close",{invocationId:selectedInvocationId,reason:"request-invalidated"})}updated(changed){super.updated(changed),this.nestedCloseInvocationId=null}pendingCount(){return this.normalizedRequests.filter(request=>(request.status??"pending")==="pending").length}formatCount(value){return getNumberFormat(this.effectiveLocale).format(value)}statusLabel(status){return status==="approved"?this.localize("confirmApproved"):status==="denied"?this.localize("confirmDenied"):this.localize("approvalQueuePending")}statusVariant(status){return status==="approved"?"success":status==="denied"?"danger":"warning"}select(request){(request.status??"pending")==="pending"&&(this.selectedInvocationId=request.id,this.open=!0,this.emit("lr-approval-select",{invocationId:request.id}))}onApprove(request,event){if(event.stopPropagation(),(request.status??"pending")!=="pending")return;this.emit("lr-approval-decision",{invocationId:request.id,approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented&&event.preventDefault()}onDeny(request,event){if(event.stopPropagation(),(request.status??"pending")!=="pending")return;this.emit("lr-approval-decision",{invocationId:request.id,approved:!1},{cancelable:!0}).defaultPrevented&&event.preventDefault()}onClose(request,event){if(event.stopPropagation(),this.nestedCloseInvocationId=request.id,request.id===this.selectedInvocationId){const wasOpen=this.open;this.open=!1,wasOpen||this.requestUpdate()}else this.requestUpdate();this.emit("lr-approval-close",{invocationId:request.id,reason:event.detail})}renderRequest(request){const status=request.status??"pending";return html`<div role="listitem"><button
2
2
  part="request"
3
3
  type="button"
4
4
  data-selected=${request.id===this.selectedInvocationId?"true":"false"}
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{min-inline-size:0;max-inline-size:100%;display:block}[part=base]{box-sizing:border-box;border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);flex-direction:column;block-size:100%;min-inline-size:0;max-inline-size:100%;display:flex;overflow:hidden}[part=header]{box-sizing:border-box;align-items:center;gap:var(--lr-space-s);min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-size-1px) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=label]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold)}[part=kind]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius-pill);padding:0 var(--lr-space-xs)}[part=view-toggle]{gap:var(--lr-size-1px);display:flex}[part=view-button]{box-sizing:border-box;min-block-size:var(--lr-size-1-5rem);font:inherit;font-size:var(--lr-font-size-xs);background:var(--lr-color-surface);border:var(--lr-size-1px) solid var(--lr-color-border);padding:var(--lr-space-2xs) var(--lr-space-s);cursor:pointer}[part=view-button][aria-pressed=true]{background:var(--lr-artifact-panel-view-active-bg,var(--lr-color-brand-quiet));color:var(--lr-artifact-panel-view-active-color,var(--lr-color-brand))}[part=restore-button],[part=copy-button],[part=download-button]{box-sizing:border-box;min-block-size:var(--lr-size-1-5rem);font:inherit;font-size:var(--lr-font-size-xs);background:var(--lr-color-surface);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);padding:var(--lr-space-2xs) var(--lr-space-s);cursor:pointer}[part=restore-button]:hover,[part=copy-button]:hover,[part=download-button]:hover,[part=view-button]:hover:not([aria-pressed=true]){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=restore-button]:active,[part=copy-button]:active,[part=download-button]:active,[part=view-button]:active:not([aria-pressed=true]){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=restore-button]:focus-visible,[part=copy-button]:focus-visible,[part=download-button]:focus-visible,[part=view-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=version-nav]{align-items:center;gap:var(--lr-space-xs);font-size:var(--lr-font-size-xs);margin-inline-start:auto;display:flex}[part=version-label]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;color:var(--lr-color-text-quiet)}[part=version-previous],[part=version-next]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text);font-size:var(--lr-font-size-m);cursor:pointer;border-radius:var(--lr-radius);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=version-previous]:hover,[part=version-next]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=version-previous]:active,[part=version-next]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=version-previous]:focus-visible,[part=version-next]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=version-previous]:disabled,[part=version-next]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}:host(:dir(rtl)) [part=version-previous-glyph],:host(:dir(rtl)) [part=version-next-glyph]{transform:scaleX(-1)}[part=body]{padding:var(--lr-space-m);flex:auto;overflow:auto}[part=body][aria-busy=true]{position:relative}[part=streaming-indicator]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet)}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{min-inline-size:0;max-inline-size:100%;display:block}[part=base]{box-sizing:border-box;border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);flex-direction:column;block-size:100%;min-inline-size:0;max-inline-size:100%;display:flex;overflow:hidden}[part=header]{box-sizing:border-box;align-items:center;gap:var(--lr-space-s);min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-size-1px) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=label]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold)}[part=kind]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius-pill);padding:0 var(--lr-space-xs)}[part=view-toggle]{gap:var(--lr-size-1px);display:flex}[part=view-button]{box-sizing:border-box;min-block-size:var(--lr-size-1-5rem);font:inherit;font-size:var(--lr-font-size-xs);background:var(--lr-color-surface);border:var(--lr-size-1px) solid var(--lr-color-border);padding:var(--lr-space-2xs) var(--lr-space-s);cursor:pointer}[part=view-button][aria-pressed=true]{background:var(--lr-artifact-panel-view-active-bg,var(--lr-color-brand-quiet));color:var(--lr-artifact-panel-view-active-color,var(--lr-color-brand))}[part=restore-button],[part=copy-button],[part=download-button]{box-sizing:border-box;min-block-size:var(--lr-size-1-5rem);font:inherit;font-size:var(--lr-font-size-xs);background:var(--lr-color-surface);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);padding:var(--lr-space-2xs) var(--lr-space-s);cursor:pointer}[part=restore-button]:hover,[part=copy-button]:hover,[part=download-button]:hover,[part=view-button]:hover:not([aria-pressed=true]){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=restore-button]:active,[part=copy-button]:active,[part=download-button]:active,[part=view-button]:active:not([aria-pressed=true]){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=restore-button]:focus-visible,[part=copy-button]:focus-visible,[part=download-button]:focus-visible,[part=view-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=version-nav]{align-items:center;gap:var(--lr-space-xs);font-size:var(--lr-font-size-xs);margin-inline-start:auto;display:flex}[part=version-label]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;color:var(--lr-color-text-quiet)}[part=version-previous],[part=version-next]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text);font-size:var(--lr-font-size-m);cursor:pointer;border-radius:var(--lr-radius);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=version-previous]:hover:not(:disabled),[part=version-next]:hover:not(:disabled){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=version-previous]:active:not(:disabled),[part=version-next]:active:not(:disabled){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=version-previous]:focus-visible,[part=version-next]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=version-previous]:disabled,[part=version-next]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}:host(:dir(rtl)) [part=version-previous-glyph],:host(:dir(rtl)) [part=version-next-glyph]{transform:scaleX(-1)}[part=body]{padding:var(--lr-space-m);flex:auto;overflow:auto}[part=body][aria-busy=true]{position:relative}[part=streaming-indicator]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet)}`;export{styles};
@@ -83,4 +83,4 @@ autoCorrect:string;
83
83
  wrap:PromptStudioWrap;
84
84
  /** The moved row's next usable action. Lit retains keyed rows but native button focus is not
85
85
  * preserved when their position changes, so restore it after the new boundary state renders. */
86
- private pendingMessageMoveFocus?;disconnectedCallback():void;private roleLabel;private state;private messageItems;private variableItems;private uniqueMessages;private uniqueVersions;private emitChange;private updateMessage;private removeMessage;private addMessage;private updateVariable;private requestMessageMove;private restoreMessageMoveFocus;private resolve;private onFocus;private onBlur;private renderMessage;private renderRemoveMessage;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-studio':LyraPromptStudio;}}
86
+ private pendingMessageMoveFocus?;disconnectedCallback():void;private roleLabel;private state;private messageItems;private variableItems;private uniqueMessages;private uniqueVersions;private emitChange;private emitNormalizedChange;private updateMessage;private removeMessage;private addMessage;private updateVariable;private requestMessageMove;private restoreMessageMoveFocus;private resolve;private onFocus;private onBlur;private renderMessage;private renderRemoveMessage;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-studio':LyraPromptStudio;}}
@@ -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{repeat}from"lit/directives/repeat.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./prompt-studio.styles.js";import{overallSemanticLabel}from"../semantic-owner.js";import{LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_promptStudioAddMessage,LYRA_DEFAULT_promptStudioLabel,LYRA_DEFAULT_promptStudioMessageContent,LYRA_DEFAULT_promptStudioMessageRole,LYRA_DEFAULT_promptStudioMessages,LYRA_DEFAULT_promptStudioPreview,LYRA_DEFAULT_promptStudioRemoveMessage,LYRA_DEFAULT_promptStudioRoleAssistant,LYRA_DEFAULT_promptStudioRoleSystem,LYRA_DEFAULT_promptStudioRoleTool,LYRA_DEFAULT_promptStudioRoleUser,LYRA_DEFAULT_promptStudioRun,LYRA_DEFAULT_promptStudioSave,LYRA_DEFAULT_promptStudioVariableName,LYRA_DEFAULT_promptStudioVariableValue,LYRA_DEFAULT_promptStudioVariables,LYRA_DEFAULT_promptStudioVersions}from"../../../internal/default-strings.generated.js";class LyraPromptStudio extends LyraElement{constructor(){super(...arguments),this.messages=[],this.variables=[],this.versions=[],this.selectedVersionId=null,this.label="",this.heading="",this.running=!1,this.disabled=!1,this.reorderable=!1,this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.wrap="soft",this.onFocus=()=>{this.emit("focus")},this.onBlur=()=>{this.emit("blur")},this.renderMessage=(message,index)=>{const displayIndex=getNumberFormat(this.effectiveLocale).format(index+1),role=this.roleLabel(message.role);return html`<li part="message" data-message-id=${message.id}>
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{repeat}from"lit/directives/repeat.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./prompt-studio.styles.js";import{overallSemanticLabel}from"../semantic-owner.js";import{LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_promptStudioAddMessage,LYRA_DEFAULT_promptStudioLabel,LYRA_DEFAULT_promptStudioMessageContent,LYRA_DEFAULT_promptStudioMessageRole,LYRA_DEFAULT_promptStudioMessages,LYRA_DEFAULT_promptStudioPreview,LYRA_DEFAULT_promptStudioRemoveMessage,LYRA_DEFAULT_promptStudioRoleAssistant,LYRA_DEFAULT_promptStudioRoleSystem,LYRA_DEFAULT_promptStudioRoleTool,LYRA_DEFAULT_promptStudioRoleUser,LYRA_DEFAULT_promptStudioRun,LYRA_DEFAULT_promptStudioSave,LYRA_DEFAULT_promptStudioVariableName,LYRA_DEFAULT_promptStudioVariableValue,LYRA_DEFAULT_promptStudioVariables,LYRA_DEFAULT_promptStudioVersions}from"../../../internal/default-strings.generated.js";class LyraPromptStudio extends LyraElement{constructor(){super(...arguments),this.messages=[],this.variables=[],this.versions=[],this.selectedVersionId=null,this.label="",this.heading="",this.running=!1,this.disabled=!1,this.reorderable=!1,this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.wrap="soft",this.onFocus=()=>{this.emit("focus")},this.onBlur=()=>{this.emit("blur")},this.renderMessage=(message,index,messageCount)=>{const displayIndex=getNumberFormat(this.effectiveLocale).format(index+1),role=this.roleLabel(message.role);return html`<li part="message" data-message-id=${message.id}>
2
2
  <span class="message-role-wrapper">
3
3
  <select
4
4
  part="message-role"
@@ -40,7 +40,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
40
40
  <button
41
41
  part="move-message-down"
42
42
  type="button"
43
- ?disabled=${this.disabled||index===this.uniqueMessages().length-1}
43
+ ?disabled=${this.disabled||index===messageCount-1}
44
44
  aria-label=${this.localize("moveDown")}
45
45
  @click=${()=>this.requestMessageMove(message.id,index,1)}
46
46
  >
@@ -49,7 +49,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
49
49
  ${this.renderRemoveMessage(message.id)}
50
50
  </div>
51
51
  `:this.renderRemoveMessage(message.id)}
52
- </li>`}}static{this.defaultStrings={...super.defaultStrings,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,promptStudioAddMessage:LYRA_DEFAULT_promptStudioAddMessage,promptStudioLabel:LYRA_DEFAULT_promptStudioLabel,promptStudioMessageContent:LYRA_DEFAULT_promptStudioMessageContent,promptStudioMessageRole:LYRA_DEFAULT_promptStudioMessageRole,promptStudioMessages:LYRA_DEFAULT_promptStudioMessages,promptStudioPreview:LYRA_DEFAULT_promptStudioPreview,promptStudioRemoveMessage:LYRA_DEFAULT_promptStudioRemoveMessage,promptStudioRoleAssistant:LYRA_DEFAULT_promptStudioRoleAssistant,promptStudioRoleSystem:LYRA_DEFAULT_promptStudioRoleSystem,promptStudioRoleTool:LYRA_DEFAULT_promptStudioRoleTool,promptStudioRoleUser:LYRA_DEFAULT_promptStudioRoleUser,promptStudioRun:LYRA_DEFAULT_promptStudioRun,promptStudioSave:LYRA_DEFAULT_promptStudioSave,promptStudioVariableName:LYRA_DEFAULT_promptStudioVariableName,promptStudioVariableValue:LYRA_DEFAULT_promptStudioVariableValue,promptStudioVariables:LYRA_DEFAULT_promptStudioVariables,promptStudioVersions:LYRA_DEFAULT_promptStudioVersions}}static{this.ownedCollectionProperties=Object.freeze(["messages","variables","versions"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-change","lr-message-reorder","lr-run","lr-save","lr-version-select"])}disconnectedCallback(){this.pendingMessageMoveFocus=void 0,super.disconnectedCallback()}roleLabel(role){switch(role){case"system":return this.localize("promptStudioRoleSystem");case"user":return this.localize("promptStudioRoleUser");case"assistant":return this.localize("promptStudioRoleAssistant");case"tool":return this.localize("promptStudioRoleTool")}}state(){return{messages:this.uniqueMessages().map(message=>({...message})),variables:this.variableItems().map(variable=>({...variable}))}}messageItems(source=this.messages){return Array.isArray(source)?source:[]}variableItems(source=this.variables){return Array.isArray(source)?source:[]}uniqueMessages(source=this.messages){const seen=new Set;return this.messageItems(source).filter(message=>!message||typeof message.id!="string"||message.id.trim().length===0||seen.has(message.id)?!1:(seen.add(message.id),!0))}uniqueVersions(){const seen=new Set;return(Array.isArray(this.versions)?this.versions:[]).filter(version=>!version||typeof version.id!="string"||version.id.trim().length===0||seen.has(version.id)?!1:(seen.add(version.id),!0))}emitChange(messages=this.messages,variables=this.variables){const proposal={messages:this.uniqueMessages(messages).map(message=>({...message})),variables:this.variableItems(variables).map(variable=>({...variable}))};this.emit("lr-change",proposal,{cancelable:!0}).defaultPrevented||(this.messages=proposal.messages,this.variables=proposal.variables)}updateMessage(id,patch){let found=!1;this.emitChange(this.uniqueMessages().map(message=>!found&&message.id===id?(found=!0,{...message,...patch}):message))}removeMessage(id){let removed=!1;this.emitChange(this.uniqueMessages().filter(message=>!removed&&message.id===id?(removed=!0,!1):!0))}addMessage(){const messages=this.uniqueMessages(),existingIds=new Set(messages.map(message=>message.id)),base=`message-${Date.now()}-${messages.length}`;let id=base,suffix=1;for(;existingIds.has(id);)id=`${base}-${suffix}`,suffix++;this.emitChange([...messages,{id,role:"user",content:""}])}updateVariable(index,patch){this.emitChange(this.messages,this.variableItems().map((variable,candidateIndex)=>candidateIndex===index?{...variable,...patch}:variable))}requestMessageMove(messageId,fromIndex,offset){const messages=this.uniqueMessages(),toIndex=fromIndex+offset;if(this.disabled||!this.reorderable||toIndex<0||toIndex>=messages.length||messages[fromIndex]?.id!==messageId)return;const nextMessages=messages.map(message=>({...message})),[moved]=nextMessages.splice(fromIndex,1);if(!moved||(nextMessages.splice(toIndex,0,moved),this.emit("lr-message-reorder",{messages:nextMessages.map(message=>({...message})),messageId,fromIndex,toIndex},{cancelable:!0}).defaultPrevented))return;const part=toIndex===0?"move-message-down":toIndex===nextMessages.length-1||offset<0?"move-message-up":"move-message-down";this.pendingMessageMoveFocus={messageId,part},this.emitChange(nextMessages),this.scheduleAfterUpdate(()=>this.restoreMessageMoveFocus(),"prompt-studio-message-reorder-focus")}restoreMessageMoveFocus(){const pending=this.pendingMessageMoveFocus;if(this.pendingMessageMoveFocus=void 0,!pending||!this.isConnected)return;const action=[...this.shadowRoot?.querySelectorAll("[data-message-id]")??[]].find(candidate=>candidate.dataset.messageId===pending.messageId)?.querySelector(`[part='${pending.part}']`);action&&!action.disabled&&action.focus()}resolve(content){const variables=new Map;for(const variable of this.variableItems())variable.name!==""&&!variables.has(variable.name)&&variables.set(variable.name,variable.value);const resolved=new Map,visiting=new Set,resolveName=name=>{const cached=resolved.get(name);if(cached!==void 0)return cached;const value=variables.get(name);if(value===void 0||visiting.has(name))return`{{${name}}}`;visiting.add(name);const next=value.replace(/\{\{([^{}]+)\}\}/g,(_match,nested)=>resolveName(nested));return visiting.delete(name),resolved.set(name,next),next};return content.replace(/\{\{([^{}]+)\}\}/g,(_match,name)=>resolveName(name))}renderRemoveMessage(id){return html`<button
52
+ </li>`}}static{this.defaultStrings={...super.defaultStrings,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,promptStudioAddMessage:LYRA_DEFAULT_promptStudioAddMessage,promptStudioLabel:LYRA_DEFAULT_promptStudioLabel,promptStudioMessageContent:LYRA_DEFAULT_promptStudioMessageContent,promptStudioMessageRole:LYRA_DEFAULT_promptStudioMessageRole,promptStudioMessages:LYRA_DEFAULT_promptStudioMessages,promptStudioPreview:LYRA_DEFAULT_promptStudioPreview,promptStudioRemoveMessage:LYRA_DEFAULT_promptStudioRemoveMessage,promptStudioRoleAssistant:LYRA_DEFAULT_promptStudioRoleAssistant,promptStudioRoleSystem:LYRA_DEFAULT_promptStudioRoleSystem,promptStudioRoleTool:LYRA_DEFAULT_promptStudioRoleTool,promptStudioRoleUser:LYRA_DEFAULT_promptStudioRoleUser,promptStudioRun:LYRA_DEFAULT_promptStudioRun,promptStudioSave:LYRA_DEFAULT_promptStudioSave,promptStudioVariableName:LYRA_DEFAULT_promptStudioVariableName,promptStudioVariableValue:LYRA_DEFAULT_promptStudioVariableValue,promptStudioVariables:LYRA_DEFAULT_promptStudioVariables,promptStudioVersions:LYRA_DEFAULT_promptStudioVersions}}static{this.ownedCollectionProperties=Object.freeze(["messages","variables","versions"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-change","lr-message-reorder","lr-run","lr-save","lr-version-select"])}disconnectedCallback(){this.pendingMessageMoveFocus=void 0,super.disconnectedCallback()}roleLabel(role){switch(role){case"system":return this.localize("promptStudioRoleSystem");case"user":return this.localize("promptStudioRoleUser");case"assistant":return this.localize("promptStudioRoleAssistant");case"tool":return this.localize("promptStudioRoleTool")}}state(){return{messages:this.uniqueMessages().map(message=>({...message})),variables:this.variableItems().map(variable=>({...variable}))}}messageItems(source=this.messages){return Array.isArray(source)?source:[]}variableItems(source=this.variables){return Array.isArray(source)?source:[]}uniqueMessages(source=this.messages){const seen=new Set;return this.messageItems(source).filter(message=>!message||typeof message.id!="string"||message.id.trim().length===0||seen.has(message.id)?!1:(seen.add(message.id),!0))}uniqueVersions(){const seen=new Set;return(Array.isArray(this.versions)?this.versions:[]).filter(version=>!version||typeof version.id!="string"||version.id.trim().length===0||seen.has(version.id)?!1:(seen.add(version.id),!0))}emitChange(messages=this.messages,variables=this.variables){this.emitNormalizedChange(this.uniqueMessages(messages),variables)}emitNormalizedChange(messages,variables=this.variables){const proposal={messages:messages.map(message=>({...message})),variables:this.variableItems(variables).map(variable=>({...variable}))};this.emit("lr-change",proposal,{cancelable:!0}).defaultPrevented||(this.messages=proposal.messages,this.variables=proposal.variables)}updateMessage(id,patch){let found=!1;this.emitNormalizedChange(this.uniqueMessages().map(message=>!found&&message.id===id?(found=!0,{...message,...patch}):message))}removeMessage(id){let removed=!1;this.emitNormalizedChange(this.uniqueMessages().filter(message=>!removed&&message.id===id?(removed=!0,!1):!0))}addMessage(){const messages=this.uniqueMessages(),existingIds=new Set(messages.map(message=>message.id)),base=`message-${Date.now()}-${messages.length}`;let id=base,suffix=1;for(;existingIds.has(id);)id=`${base}-${suffix}`,suffix++;this.emitNormalizedChange([...messages,{id,role:"user",content:""}])}updateVariable(index,patch){this.emitChange(this.messages,this.variableItems().map((variable,candidateIndex)=>candidateIndex===index?{...variable,...patch}:variable))}requestMessageMove(messageId,fromIndex,offset){const messages=this.uniqueMessages(),toIndex=fromIndex+offset;if(this.disabled||!this.reorderable||toIndex<0||toIndex>=messages.length||messages[fromIndex]?.id!==messageId)return;const nextMessages=messages.map(message=>({...message})),[moved]=nextMessages.splice(fromIndex,1);if(!moved||(nextMessages.splice(toIndex,0,moved),this.emit("lr-message-reorder",{messages:nextMessages.map(message=>({...message})),messageId,fromIndex,toIndex},{cancelable:!0}).defaultPrevented))return;const part=toIndex===0?"move-message-down":toIndex===nextMessages.length-1||offset<0?"move-message-up":"move-message-down";this.pendingMessageMoveFocus={messageId,part},this.emitNormalizedChange(nextMessages),this.scheduleAfterUpdate(()=>this.restoreMessageMoveFocus(),"prompt-studio-message-reorder-focus")}restoreMessageMoveFocus(){const pending=this.pendingMessageMoveFocus;if(this.pendingMessageMoveFocus=void 0,!pending||!this.isConnected)return;const action=[...this.shadowRoot?.querySelectorAll("[data-message-id]")??[]].find(candidate=>candidate.dataset.messageId===pending.messageId)?.querySelector(`[part='${pending.part}']`);action&&!action.disabled&&action.focus()}resolve(content){const variables=new Map;for(const variable of this.variableItems())variable.name!==""&&!variables.has(variable.name)&&variables.set(variable.name,variable.value);const resolved=new Map,visiting=new Set,resolveName=name=>{const cached=resolved.get(name);if(cached!==void 0)return cached;const value=variables.get(name);if(value===void 0||visiting.has(name))return`{{${name}}}`;visiting.add(name);const next=value.replace(/\{\{([^{}]+)\}\}/g,(_match,nested)=>resolveName(nested));return visiting.delete(name),resolved.set(name,next),next};return content.replace(/\{\{([^{}]+)\}\}/g,(_match,name)=>resolveName(name))}renderRemoveMessage(id){return html`<button
53
53
  part="remove-message"
54
54
  type="button"
55
55
  ?disabled=${this.disabled}
@@ -57,7 +57,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
57
57
  @click=${()=>this.removeMessage(id)}
58
58
  >
59
59
  ×
60
- </button>`}render(){const heading=this.heading||this.localize("promptStudioLabel"),label=this.label||heading,messages=this.uniqueMessages(),variables=this.variableItems();return html`
60
+ </button>`}render(){const heading=this.heading||this.localize("promptStudioLabel"),label=this.label||heading,messages=this.uniqueMessages(),variables=this.variableItems(),versions=this.uniqueVersions();return html`
61
61
  <section part="base" aria-label=${overallSemanticLabel(this,label)??nothing}>
62
62
  <header part="toolbar">
63
63
  <h2>${heading}</h2>
@@ -75,7 +75,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
75
75
  </header>
76
76
  <div part="editor">
77
77
  <section aria-label=${this.localize("promptStudioMessages")}>
78
- <ol part="messages">${repeat(messages,message=>message.id,this.renderMessage)}</ol>
78
+ <ol part="messages">${repeat(messages,message=>message.id,(message,index)=>this.renderMessage(message,index,messages.length))}</ol>
79
79
  <button part="add-message" type="button" ?disabled=${this.disabled} @click=${this.addMessage}>
80
80
  ${this.localize("promptStudioAddMessage")}
81
81
  </button>
@@ -111,9 +111,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
111
111
  `})}
112
112
  </section>
113
113
  `:nothing}
114
- ${this.uniqueVersions().length?html`
114
+ ${versions.length?html`
115
115
  <nav part="versions" aria-label=${this.localize("promptStudioVersions")}>
116
- ${this.uniqueVersions().map(version=>html`
116
+ ${versions.map(version=>html`
117
117
  <button
118
118
  part="version"
119
119
  type="button"
@@ -5,8 +5,9 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
5
5
  * configurable depth ceiling. It does not resolve remote references or validate values.
6
6
  *
7
7
  * Public schema records and issue collections take bounded, clone-owned readonly snapshots.
8
- * Create and reassign a new record or array after changes; mutating the assigned value does not
9
- * update the view.
8
+ * Schema records recursively copy supported own data fields without invoking accessors; unsupported
9
+ * or unsafe branches are omitted while valid siblings remain. Create and reassign a new record or
10
+ * array after changes; mutating the assigned value does not update the view.
10
11
  *
11
12
  * @customElement lr-json-schema-viewer
12
13
  * @event lr-schema-select - A schema node was activated. `detail: { schemaPath, schema }`.
@@ -38,9 +39,8 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
38
39
  */
39
40
  export declare class LyraJsonSchemaViewer extends LyraElement<LyraJsonSchemaViewerEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];private schemaValue;
40
41
  /** Clone-owned recursive schema snapshot. Reassign a new record after changing any branch.
41
- * Bounded and depth-clamped by {@link snapshotSchemaNode} rather than `LyraElement`'s generic
42
- * `ownedCollectionProperties` machinery -- see that function for why. A runtime non-array
43
- * `required` keyword is treated as absent. */
42
+ * Bounded and depth-clamped by {@link snapshotSchemaNode}; a malformed branch is omitted
43
+ * without discarding admitted siblings. A runtime non-array `required` keyword is absent. */
44
44
  get schema():JsonSchemaNode|null;set schema(value:JsonSchemaNode|null);issues:readonly SchemaValidationIssue[];
45
45
  /** Controlled JSON Pointer selection. `null` means no selection; the empty
46
46
  * string is the valid JSON Pointer for the schema root. */
@@ -1,4 +1,6 @@
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{finiteCount}from"../../../internal/numbers.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./schema-viewer.styles.js";import{overallSemanticLabel}from"../semantic-owner.js";import{LYRA_DEFAULT_schemaViewerCircular,LYRA_DEFAULT_schemaViewerEmpty,LYRA_DEFAULT_schemaViewerIssueLimit,LYRA_DEFAULT_schemaViewerLabel,LYRA_DEFAULT_schemaViewerLimit,LYRA_DEFAULT_schemaViewerRequired,LYRA_DEFAULT_schemaViewerType}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_SCHEMA_NODES=500,MAX_RENDERED_SCHEMA_ISSUES=500,MAX_SCHEMA_DEPTH=100,MAX_CONSTRAINT_VALUES=50,MAX_CONSTRAINT_VALUE_CHARACTERS=1e3,MAX_CONSTRAINT_OBJECT_NODES=50;function constraintValue(value){const seen=new Set;let remaining=MAX_CONSTRAINT_OBJECT_NODES;const visit=(candidate,depth)=>{if(remaining--<=0)return"\u2026";if(candidate===null)return"null";if(typeof candidate=="string")return JSON.stringify(candidate.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS));if(typeof candidate=="number"||typeof candidate=="boolean")return String(candidate);if(typeof candidate=="bigint")return`${candidate.toString()}n`;if(candidate===void 0)return"undefined";if(typeof candidate!="object")return String(candidate);if(seen.has(candidate))return"[Circular]";if(depth>=3)return Array.isArray(candidate)?"[\u2026]":"{\u2026}";seen.add(candidate);let result;if(Array.isArray(candidate)){const values=candidate.slice(0,MAX_CONSTRAINT_VALUES).map(item=>visit(item,depth+1));result=`[${values.join(", ")}${candidate.length>values.length?", \u2026":""}]`}else{const entries=Object.entries(candidate).slice(0,MAX_CONSTRAINT_VALUES);result=`{${entries.map(([key,item])=>`${JSON.stringify(key)}: ${visit(item,depth+1)}`).join(", ")}${Object.keys(candidate).length>entries.length?", \u2026":""}}`}return seen.delete(candidate),result.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS)};return visit(value,0)}function isReadonlyArray(value){return Array.isArray(value)}function isSchemaRecord(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}const SCHEMA_SNAPSHOT_NODE_LIMIT=5e4;function snapshotSchemaNode(value,depth,seen,budget){if(!isSchemaRecord(value))return;const cached=seen.get(value);if(cached)return cached;if(budget.remaining<=0)return;budget.remaining--;const output={...value};seen.set(value,output),delete output.properties,delete output.items,delete output.allOf,delete output.anyOf,delete output.oneOf;for(const key in output){if(!Object.prototype.hasOwnProperty.call(output,key))continue;const fieldValue=output[key];Array.isArray(fieldValue)&&(output[key]=Object.freeze([...fieldValue]))}if(depth<MAX_SCHEMA_DEPTH){const properties=value.properties;if(isSchemaRecord(properties)){const nextProperties={};for(const key in properties){if(!Object.prototype.hasOwnProperty.call(properties,key))continue;if(budget.remaining<=0)break;const child=snapshotSchemaNode(properties[key],depth+1,seen,budget);child&&(nextProperties[key]=child)}output.properties=nextProperties}for(const keyword of["allOf","anyOf","oneOf"]){const nodes=value[keyword];if(!isReadonlyArray(nodes))continue;const next=[];for(const node of nodes){if(budget.remaining<=0)break;const child=snapshotSchemaNode(node,depth+1,seen,budget);child&&next.push(child)}output[keyword]=next}const items=value.items;if(isReadonlyArray(items)){const next=[];for(const node of items){if(budget.remaining<=0)break;const child=snapshotSchemaNode(node,depth+1,seen,budget);child&&next.push(child)}output.items=next}else if(isSchemaRecord(items)){const child=snapshotSchemaNode(items,depth+1,seen,budget);child&&(output.items=child)}}return Object.freeze(output)}function snapshotSchema(value){return snapshotSchemaNode(value,0,new Map,{remaining:SCHEMA_SNAPSHOT_NODE_LIMIT})??null}class LyraJsonSchemaViewer extends LyraElement{constructor(){super(...arguments),this.schemaValue=null,this.issues=[],this.selectedPath=null,this.maxDepth=20,this.label="",this.previousNodeLimitText="",this.previousIssueLimitText="",this.suppressNextLimitAnnouncement=!0}static{this.defaultStrings={...super.defaultStrings,schemaViewerCircular:LYRA_DEFAULT_schemaViewerCircular,schemaViewerEmpty:LYRA_DEFAULT_schemaViewerEmpty,schemaViewerIssueLimit:LYRA_DEFAULT_schemaViewerIssueLimit,schemaViewerLabel:LYRA_DEFAULT_schemaViewerLabel,schemaViewerLimit:LYRA_DEFAULT_schemaViewerLimit,schemaViewerRequired:LYRA_DEFAULT_schemaViewerRequired,schemaViewerType:LYRA_DEFAULT_schemaViewerType}}static{this.ownedCollectionProperties=Object.freeze(["issues"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-schema-select"])}get schema(){return this.schemaValue}set schema(value){const previous=this.schemaValue;this.schemaValue=snapshotSchema(value),this.requestUpdate("schema",previous)}syncAnnouncementSink(){this.isConnected&&this.announcementSink?.element.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&(this.suppressNextLimitAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.announcementSink?.release(),this.announcementSink=void 0,this.suppressNextLimitAnnouncement=!0}updated(_changed){super.updated(_changed);const nodeText=this.renderRoot.querySelector('[part="limit"]')?.textContent?.trim()??"",issueText=this.renderRoot.querySelector('[part="issue-limit"]')?.textContent?.trim()??"";this.suppressNextLimitAnnouncement||(nodeText&&nodeText!==this.previousNodeLimitText&&this.announcementSink?.announce(nodeText),issueText&&issueText!==this.previousIssueLimitText&&this.announcementSink?.announce(issueText)),this.previousNodeLimitText=nodeText,this.previousIssueLimitText=issueText,this.suppressNextLimitAnnouncement=!1}pointerSegment(value){return value.replace(/~/g,"~0").replace(/\//g,"~1")}constraints(schema){const rows=["format","pattern","minimum","maximum","minLength","maxLength","minItems","maxItems","minProperties","maxProperties"].flatMap(key=>schema[key]==null?[]:[`${key}: ${constraintValue(schema[key])}`]);if(schema.enum){const values=schema.enum.slice(0,MAX_CONSTRAINT_VALUES).map(constraintValue);rows.push(`enum: [${values.join(", ")}${schema.enum.length>values.length?", \u2026":""}]`)}if(Object.prototype.hasOwnProperty.call(schema,"const")&&rows.push(`const: ${constraintValue(schema.const)}`),Object.prototype.hasOwnProperty.call(schema,"default")&&rows.push(`default: ${constraintValue(schema.default)}`),schema.examples){const examples=schema.examples.slice(0,MAX_CONSTRAINT_VALUES).map(constraintValue);rows.push(`examples: [${examples.join(", ")}${schema.examples.length>examples.length?", \u2026":""}]`)}return schema.$ref&&rows.push(`$ref: ${schema.$ref.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS)}`),rows}renderNode(name,schema,path,required,depth,ancestors,budget,issuesByPath){if(budget.remaining<=0)return budget.truncated=!0,nothing;budget.remaining--;const selected=path===this.selectedPath;if(ancestors.has(schema))return html`<li part="node"><span part="description">${this.localize("schemaViewerCircular")}</span></li>`;const nextAncestors=new Set(ancestors).add(schema),type=isReadonlyArray(schema.type)?schema.type.join(" | "):schema.type??(schema.properties?"object":""),constraints=this.constraints(schema),issues=issuesByPath.get(path)??[],children=[],addChild=child=>children.length>=budget.remaining?(budget.truncated=!0,!1):(children.push(child),!0);if(depth<finiteCount(this.maxDepth,20,MAX_SCHEMA_DEPTH)){const properties=schema.properties??{};for(const key in properties){if(!Object.prototype.hasOwnProperty.call(properties,key))continue;const node=properties[key];if(node&&!addChild({name:key,node,path:`${path}/properties/${this.pointerSegment(key)}`,required:Array.isArray(schema.required)&&schema.required.includes(key)}))break}for(const keyword of["allOf","anyOf","oneOf"]){const nodes=schema[keyword]??[];for(let index=0;index<nodes.length;index++){const node=nodes[index];if(!node||!addChild({name:`${keyword}[${index}]`,node,path:`${path}/${keyword}/${index}`,required:!1}))break}}if(isReadonlyArray(schema.items))for(let index=0;index<schema.items.length;index++){const node=schema.items[index];if(!node||!addChild({name:`items[${index}]`,node,path:`${path}/items/${index}`,required:!1}))break}else schema.items&&addChild({name:"items",node:schema.items,path:`${path}/items`,required:!1})}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{finiteCount}from"../../../internal/numbers.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./schema-viewer.styles.js";import{overallSemanticLabel}from"../semantic-owner.js";import{LYRA_DEFAULT_schemaViewerCircular,LYRA_DEFAULT_schemaViewerEmpty,LYRA_DEFAULT_schemaViewerIssueLimit,LYRA_DEFAULT_schemaViewerLabel,LYRA_DEFAULT_schemaViewerLimit,LYRA_DEFAULT_schemaViewerRequired,LYRA_DEFAULT_schemaViewerType}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_SCHEMA_NODES=500,MAX_RENDERED_SCHEMA_ISSUES=500,MAX_SCHEMA_DEPTH=100,MAX_CONSTRAINT_VALUES=50,MAX_CONSTRAINT_VALUE_CHARACTERS=1e3,MAX_CONSTRAINT_OBJECT_NODES=50;function constraintValue(value){const seen=new Set;let remaining=MAX_CONSTRAINT_OBJECT_NODES;const visit=(candidate,depth)=>{if(remaining--<=0)return"…";if(candidate===null)return"null";if(typeof candidate=="string")return JSON.stringify(candidate.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS));if(typeof candidate=="number"||typeof candidate=="boolean")return String(candidate);if(typeof candidate=="bigint")return`${candidate.toString()}n`;if(candidate===void 0)return"undefined";if(typeof candidate!="object")return String(candidate);if(seen.has(candidate))return"[Circular]";if(depth>=3)return Array.isArray(candidate)?"[…]":"{…}";seen.add(candidate);let result;if(Array.isArray(candidate)){const values=candidate.slice(0,MAX_CONSTRAINT_VALUES).map(item=>visit(item,depth+1));result=`[${values.join(", ")}${candidate.length>values.length?", …":""}]`}else{const entries=Object.entries(candidate).slice(0,MAX_CONSTRAINT_VALUES);result=`{${entries.map(([key,item])=>`${JSON.stringify(key)}: ${visit(item,depth+1)}`).join(", ")}${Object.keys(candidate).length>entries.length?", …":""}}`}return seen.delete(candidate),result.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS)};return visit(value,0)}function isReadonlyArray(value){return Array.isArray(value)}const SCHEMA_SNAPSHOT_NODE_LIMIT=5e4,SCHEMA_SNAPSHOT_INSPECTION_LIMIT=SCHEMA_SNAPSHOT_NODE_LIMIT*4,SCHEMA_SNAPSHOT_ARRAY_LENGTH_LIMIT=SCHEMA_SNAPSHOT_NODE_LIMIT,MAX_ARRAY_LENGTH=4294967295,OMIT_SCHEMA_VALUE=Symbol("omit-schema-value"),NODE_LIMIT_SCHEMA_VALUE=Symbol("schema-node-limit"),DEPTH_LIMIT_SCHEMA_VALUE=Symbol("schema-depth-limit"),FUNCTION_TO_STRING=Function.prototype.toString,OBJECT_CONSTRUCTOR_SOURCE=FUNCTION_TO_STRING.call(Object),MISSING_SCHEMA_DESCRIPTOR=Symbol("missing-schema-descriptor"),ACCESSOR_SCHEMA_DESCRIPTOR=Symbol("accessor-schema-descriptor"),UNSAFE_SCHEMA_DESCRIPTOR=Symbol("unsafe-schema-descriptor");function isSchemaSnapshotFailure(value){return value===OMIT_SCHEMA_VALUE||value===NODE_LIMIT_SCHEMA_VALUE||value===DEPTH_LIMIT_SCHEMA_VALUE}function isPlainSchemaRecord(value){try{const prototype=Object.getPrototypeOf(value);if(prototype===null)return!0;if(Object.getPrototypeOf(prototype)!==null)return!1;const constructorDescriptor=Object.getOwnPropertyDescriptor(prototype,"constructor");if(!constructorDescriptor||!("value"in constructorDescriptor)||typeof constructorDescriptor.value!="function")return!1;const constructor=constructorDescriptor.value,constructorPrototype=Object.getOwnPropertyDescriptor(constructor,"prototype");return!!(constructorPrototype&&"value"in constructorPrototype&&constructorPrototype.value===prototype&&FUNCTION_TO_STRING.call(constructor)===OBJECT_CONSTRUCTOR_SOURCE)}catch{return!1}}function isSchemaArray(value){try{return Array.isArray(value)}catch{return!1}}function isArrayIndex(key){const index=Number(key);return Number.isInteger(index)&&index>=0&&index<MAX_ARRAY_LENGTH&&String(index)===key}function checkpointSchemaSnapshot(budget){return{remaining:budget.remaining,additions:budget.additions.length}}function restoreSchemaSnapshot(budget,checkpoint){for(budget.remaining=checkpoint.remaining;budget.additions.length>checkpoint.additions;){const source=budget.additions.pop();source&&budget.seen.delete(source)}}function rememberSchemaSnapshot(budget,source,output){budget.seen.set(source,output),budget.additions.push(source)}function ownEnumerableDataDescriptor(value,key){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,key)}catch{return UNSAFE_SCHEMA_DESCRIPTOR}return!descriptor||!descriptor.enumerable?MISSING_SCHEMA_DESCRIPTOR:"value"in descriptor?descriptor:ACCESSOR_SCHEMA_DESCRIPTOR}function safeArrayLength(value){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,"length")}catch{return UNSAFE_SCHEMA_DESCRIPTOR}return!descriptor||!("value"in descriptor)||typeof descriptor.value!="number"||!Number.isSafeInteger(descriptor.value)||descriptor.value<0||descriptor.value>MAX_ARRAY_LENGTH?UNSAFE_SCHEMA_DESCRIPTOR:descriptor.value}function consumeSchemaInspection(budget){return budget.remainingInspections<=0?!1:(budget.remainingInspections-=1,!0)}function defineSnapshotValue(output,key,value){Object.defineProperty(output,key,{configurable:!1,enumerable:!0,value,writable:!1})}function finishSchemaSnapshot(output){try{return Object.freeze(output)}catch{return OMIT_SCHEMA_VALUE}}function snapshotSchemaValue(value,budget,depth){return value===null||typeof value!="object"&&typeof value!="function"?value:typeof value=="function"?OMIT_SCHEMA_VALUE:budget.seen.has(value)?budget.seen.get(value):depth>MAX_SCHEMA_DEPTH?DEPTH_LIMIT_SCHEMA_VALUE:budget.remaining<=0?NODE_LIMIT_SCHEMA_VALUE:isSchemaArray(value)?snapshotSchemaValueArray(value,budget,depth):isPlainSchemaRecord(value)?snapshotSchemaValueRecord(value,budget,depth):OMIT_SCHEMA_VALUE}function snapshotSchemaValueRecord(value,budget,depth){const checkpoint=checkpointSchemaSnapshot(budget);if(budget.remaining<=0)return NODE_LIMIT_SCHEMA_VALUE;budget.remaining-=1;const output=Object.create(null);rememberSchemaSnapshot(budget,value,output);try{for(const key in value){if(!consumeSchemaInspection(budget))break;const descriptor=ownEnumerableDataDescriptor(value,key);if(descriptor===MISSING_SCHEMA_DESCRIPTOR||descriptor===ACCESSOR_SCHEMA_DESCRIPTOR)continue;if(descriptor===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const entryCheckpoint=checkpointSchemaSnapshot(budget),entry=snapshotSchemaValue(descriptor.value,budget,depth+1);if(entry===OMIT_SCHEMA_VALUE){restoreSchemaSnapshot(budget,entryCheckpoint);continue}if(entry!==DEPTH_LIMIT_SCHEMA_VALUE){if(entry===NODE_LIMIT_SCHEMA_VALUE)break;defineSnapshotValue(output,key,entry)}}}catch{return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE}const frozen=finishSchemaSnapshot(output);return frozen===OMIT_SCHEMA_VALUE?(restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE):frozen}function snapshotSchemaValueArray(value,budget,depth){const checkpoint=checkpointSchemaSnapshot(budget);if(budget.remaining<=0)return NODE_LIMIT_SCHEMA_VALUE;budget.remaining-=1;const sourceLength=safeArrayLength(value);if(sourceLength===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const output=new Array(Math.min(sourceLength,SCHEMA_SNAPSHOT_ARRAY_LENGTH_LIMIT));rememberSchemaSnapshot(budget,value,output);try{for(const key in value){if(!consumeSchemaInspection(budget))break;const index=isArrayIndex(key)?Number(key):null;if(index!==null&&index>=output.length)continue;const descriptor=ownEnumerableDataDescriptor(value,key);if(descriptor===MISSING_SCHEMA_DESCRIPTOR||descriptor===ACCESSOR_SCHEMA_DESCRIPTOR)continue;if(descriptor===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const entryCheckpoint=checkpointSchemaSnapshot(budget),entry=snapshotSchemaValue(descriptor.value,budget,depth+1);if(entry===OMIT_SCHEMA_VALUE){restoreSchemaSnapshot(budget,entryCheckpoint);continue}if(entry!==DEPTH_LIMIT_SCHEMA_VALUE){if(entry===NODE_LIMIT_SCHEMA_VALUE){index!==null&&(output.length=index);break}defineSnapshotValue(output,key,entry)}}}catch{return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE}const frozen=finishSchemaSnapshot(output);return frozen===OMIT_SCHEMA_VALUE?(restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE):frozen}function snapshotSchemaNode(value,depth,budget){if(value===null||typeof value!="object"||!isPlainSchemaRecord(value))return OMIT_SCHEMA_VALUE;if(budget.seen.has(value))return budget.seen.get(value);if(depth>MAX_SCHEMA_DEPTH)return DEPTH_LIMIT_SCHEMA_VALUE;if(budget.remaining<=0)return NODE_LIMIT_SCHEMA_VALUE;const checkpoint=checkpointSchemaSnapshot(budget);budget.remaining-=1;const output=Object.create(null);rememberSchemaSnapshot(budget,value,output);try{for(const key in value){if(!consumeSchemaInspection(budget))break;const descriptor=ownEnumerableDataDescriptor(value,key);if(descriptor===MISSING_SCHEMA_DESCRIPTOR||descriptor===ACCESSOR_SCHEMA_DESCRIPTOR)continue;if(descriptor===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const entryCheckpoint=checkpointSchemaSnapshot(budget),entry=snapshotSchemaNodeField(key,descriptor.value,budget,depth);if(entry===OMIT_SCHEMA_VALUE){restoreSchemaSnapshot(budget,entryCheckpoint);continue}if(entry!==DEPTH_LIMIT_SCHEMA_VALUE){if(entry===NODE_LIMIT_SCHEMA_VALUE)break;defineSnapshotValue(output,key,entry)}}}catch{return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE}const frozen=finishSchemaSnapshot(output);return frozen===OMIT_SCHEMA_VALUE?(restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE):frozen}function snapshotSchemaNodeField(key,value,budget,depth){return depth>=MAX_SCHEMA_DEPTH&&(key==="properties"||key==="items"||key==="allOf"||key==="anyOf"||key==="oneOf")?DEPTH_LIMIT_SCHEMA_VALUE:key==="properties"?snapshotSchemaNodeMap(value,depth+1,budget):key==="allOf"||key==="anyOf"||key==="oneOf"?snapshotSchemaNodeArray(value,depth+1,budget):key==="items"?value!==null&&typeof value=="object"&&isSchemaArray(value)?snapshotSchemaNodeArray(value,depth+1,budget):snapshotSchemaNode(value,depth+1,budget):snapshotSchemaValue(value,budget,depth+1)}function snapshotSchemaNodeMap(value,depth,budget){if(value===null||typeof value!="object"||!isPlainSchemaRecord(value))return OMIT_SCHEMA_VALUE;if(budget.seen.has(value))return budget.seen.get(value);const checkpoint=checkpointSchemaSnapshot(budget),output=Object.create(null);rememberSchemaSnapshot(budget,value,output);try{for(const key in value){if(!consumeSchemaInspection(budget))break;const descriptor=ownEnumerableDataDescriptor(value,key);if(descriptor===MISSING_SCHEMA_DESCRIPTOR||descriptor===ACCESSOR_SCHEMA_DESCRIPTOR)continue;if(descriptor===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const entryCheckpoint=checkpointSchemaSnapshot(budget),entry=snapshotSchemaNode(descriptor.value,depth,budget);if(entry===OMIT_SCHEMA_VALUE){restoreSchemaSnapshot(budget,entryCheckpoint);continue}if(entry!==DEPTH_LIMIT_SCHEMA_VALUE){if(entry===NODE_LIMIT_SCHEMA_VALUE)break;defineSnapshotValue(output,key,entry)}}}catch{return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE}const frozen=finishSchemaSnapshot(output);return frozen===OMIT_SCHEMA_VALUE?(restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE):frozen}function snapshotSchemaNodeArray(value,depth,budget){if(value===null||typeof value!="object"||!isSchemaArray(value))return OMIT_SCHEMA_VALUE;if(budget.seen.has(value))return budget.seen.get(value);const checkpoint=checkpointSchemaSnapshot(budget),sourceLength=safeArrayLength(value);if(sourceLength===UNSAFE_SCHEMA_DESCRIPTOR)return OMIT_SCHEMA_VALUE;const output=new Array(Math.min(sourceLength,SCHEMA_SNAPSHOT_ARRAY_LENGTH_LIMIT));rememberSchemaSnapshot(budget,value,output);try{for(const key in value){if(!consumeSchemaInspection(budget))break;const index=isArrayIndex(key)?Number(key):null;if(index!==null&&index>=output.length)continue;const descriptor=ownEnumerableDataDescriptor(value,key);if(descriptor===MISSING_SCHEMA_DESCRIPTOR||descriptor===ACCESSOR_SCHEMA_DESCRIPTOR)continue;if(descriptor===UNSAFE_SCHEMA_DESCRIPTOR)return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE;const entryCheckpoint=checkpointSchemaSnapshot(budget),entry=index!==null?snapshotSchemaNode(descriptor.value,depth,budget):snapshotSchemaValue(descriptor.value,budget,depth);if(entry===OMIT_SCHEMA_VALUE){restoreSchemaSnapshot(budget,entryCheckpoint);continue}if(entry!==DEPTH_LIMIT_SCHEMA_VALUE){if(entry===NODE_LIMIT_SCHEMA_VALUE){index!==null&&(output.length=index);break}defineSnapshotValue(output,key,entry)}}}catch{return restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE}const frozen=finishSchemaSnapshot(output);return frozen===OMIT_SCHEMA_VALUE?(restoreSchemaSnapshot(budget,checkpoint),OMIT_SCHEMA_VALUE):frozen}function snapshotSchema(value){const snapshot=snapshotSchemaNode(value,0,{remaining:SCHEMA_SNAPSHOT_NODE_LIMIT,remainingInspections:SCHEMA_SNAPSHOT_INSPECTION_LIMIT,seen:new Map,additions:[]});return isSchemaSnapshotFailure(snapshot)?null:snapshot}class LyraJsonSchemaViewer extends LyraElement{constructor(){super(...arguments),this.schemaValue=null,this.issues=[],this.selectedPath=null,this.maxDepth=20,this.label="",this.previousNodeLimitText="",this.previousIssueLimitText="",this.suppressNextLimitAnnouncement=!0}static{this.defaultStrings={...super.defaultStrings,schemaViewerCircular:LYRA_DEFAULT_schemaViewerCircular,schemaViewerEmpty:LYRA_DEFAULT_schemaViewerEmpty,schemaViewerIssueLimit:LYRA_DEFAULT_schemaViewerIssueLimit,schemaViewerLabel:LYRA_DEFAULT_schemaViewerLabel,schemaViewerLimit:LYRA_DEFAULT_schemaViewerLimit,schemaViewerRequired:LYRA_DEFAULT_schemaViewerRequired,schemaViewerType:LYRA_DEFAULT_schemaViewerType}}static{this.ownedCollectionProperties=Object.freeze(["issues"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-schema-select"])}get schema(){return this.schemaValue}set schema(value){const previous=this.schemaValue;this.schemaValue=snapshotSchema(value),this.requestUpdate("schema",previous)}syncAnnouncementSink(){this.isConnected&&this.announcementSink?.element.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&(this.suppressNextLimitAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.announcementSink?.release(),this.announcementSink=void 0,this.suppressNextLimitAnnouncement=!0}updated(_changed){super.updated(_changed);const nodeText=this.renderRoot.querySelector('[part="limit"]')?.textContent?.trim()??"",issueText=this.renderRoot.querySelector('[part="issue-limit"]')?.textContent?.trim()??"";this.suppressNextLimitAnnouncement||(nodeText&&nodeText!==this.previousNodeLimitText&&this.announcementSink?.announce(nodeText),issueText&&issueText!==this.previousIssueLimitText&&this.announcementSink?.announce(issueText)),this.previousNodeLimitText=nodeText,this.previousIssueLimitText=issueText,this.suppressNextLimitAnnouncement=!1}pointerSegment(value){return value.replace(/~/g,"~0").replace(/\//g,"~1")}constraints(schema){const rows=["format","pattern","minimum","maximum","minLength","maxLength","minItems","maxItems","minProperties","maxProperties"].flatMap(key=>schema[key]==null?[]:[`${key}: ${constraintValue(schema[key])}`]);if(schema.enum){const values=schema.enum.slice(0,MAX_CONSTRAINT_VALUES).map(constraintValue);rows.push(`enum: [${values.join(", ")}${schema.enum.length>values.length?", …":""}]`)}if(Object.prototype.hasOwnProperty.call(schema,"const")&&rows.push(`const: ${constraintValue(schema.const)}`),Object.prototype.hasOwnProperty.call(schema,"default")&&rows.push(`default: ${constraintValue(schema.default)}`),schema.examples){const examples=schema.examples.slice(0,MAX_CONSTRAINT_VALUES).map(constraintValue);rows.push(`examples: [${examples.join(", ")}${schema.examples.length>examples.length?", …":""}]`)}return schema.$ref&&rows.push(`$ref: ${schema.$ref.slice(0,MAX_CONSTRAINT_VALUE_CHARACTERS)}`),rows}renderNode(name,schema,path,required,depth,ancestors,budget,issuesByPath){if(budget.remaining<=0)return budget.truncated=!0,nothing;budget.remaining--;const selected=path===this.selectedPath;if(ancestors.has(schema))return html`<li part="node">
2
+ <span part="description">${this.localize("schemaViewerCircular")}</span>
3
+ </li>`;const nextAncestors=new Set(ancestors).add(schema),type=isReadonlyArray(schema.type)?schema.type.join(" | "):schema.type??(schema.properties?"object":""),constraints=this.constraints(schema),issues=issuesByPath.get(path)??[],children=[],addChild=child=>children.length>=budget.remaining?(budget.truncated=!0,!1):(children.push(child),!0);if(depth<finiteCount(this.maxDepth,20,MAX_SCHEMA_DEPTH)){const properties=schema.properties??{};for(const key in properties){if(!Object.prototype.hasOwnProperty.call(properties,key))continue;const node=properties[key];if(node&&!addChild({name:key,node,path:`${path}/properties/${this.pointerSegment(key)}`,required:Array.isArray(schema.required)&&schema.required.includes(key)}))break}for(const keyword of["allOf","anyOf","oneOf"]){const nodes=schema[keyword]??[];for(const key of Object.keys(nodes)){if(!isArrayIndex(key))continue;const index=Number(key),node=nodes[index];if(node&&!addChild({name:`${keyword}[${index}]`,node,path:`${path}/${keyword}/${index}`,required:!1}))break}}if(isReadonlyArray(schema.items))for(const key of Object.keys(schema.items)){if(!isArrayIndex(key))continue;const index=Number(key),node=schema.items[index];if(node&&!addChild({name:`items[${index}]`,node,path:`${path}/items/${index}`,required:!1}))break}else schema.items&&addChild({name:"items",node:schema.items,path:`${path}/items`,required:!1})}return html`
2
4
  <li part=${selected?"node node-selected":"node"} style=${`--_lr-schema-depth:${depth}`}>
3
5
  <button
4
6
  part="node-trigger"
@@ -8,21 +10,32 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
8
10
  @click=${()=>this.emit("lr-schema-select",{schemaPath:path,schema})}
9
11
  >
10
12
  <strong part="name">${name}</strong>
11
- ${type?html`<lr-badge part="type" variant="neutral">${this.localize("schemaViewerType",void 0,{type})}</lr-badge>`:nothing}
12
- ${required?html`<lr-badge part="required" variant="danger">${this.localize("schemaViewerRequired")}</lr-badge>`:nothing}
13
+ ${type?html`<lr-badge part="type" variant="neutral"
14
+ >${this.localize("schemaViewerType",void 0,{type})}</lr-badge
15
+ >`:nothing}
16
+ ${required?html`<lr-badge part="required" variant="danger"
17
+ >${this.localize("schemaViewerRequired")}</lr-badge
18
+ >`:nothing}
13
19
  </button>
14
20
  ${schema.description?html`<p part="description">${schema.description}</p>`:nothing}
15
- ${constraints.length?html`<ul part="constraints">${constraints.map(row=>html`<li>${row}</li>`)}</ul>`:nothing}
16
- ${issues.map(issue=>html`<p part="issue" data-severity=${issue.severity??"error"}>${issue.message}</p>`)}
17
- ${children.length?html`<ul>${children.map(child=>this.renderNode(child.name,child.node,child.path,child.required,depth+1,nextAncestors,budget,issuesByPath))}</ul>`:nothing}
21
+ ${constraints.length?html`<ul part="constraints">
22
+ ${constraints.map(row=>html`<li>${row}</li>`)}
23
+ </ul>`:nothing}
24
+ ${issues.map(issue=>html`<p part="issue" data-severity=${issue.severity??"error"}>
25
+ ${issue.message}
26
+ </p>`)}
27
+ ${children.length?html`<ul>
28
+ ${children.map(child=>this.renderNode(child.name,child.node,child.path,child.required,depth+1,nextAncestors,budget,issuesByPath))}
29
+ </ul>`:nothing}
18
30
  </li>
19
31
  `}render(){const label=overallSemanticLabel(this,this.label||this.localize("schemaViewerLabel"));if(!this.schema||typeof this.schema!="object")return html`<section part="base" aria-label=${label??nothing}>
20
- <lr-empty part="empty" heading=${this.localize("schemaViewerEmpty")}></lr-empty>
32
+ <lr-empty
33
+ part="empty"
34
+ heading=${this.localize("schemaViewerEmpty")}
35
+ ></lr-empty>
21
36
  </section>`;const budget={remaining:MAX_RENDERED_SCHEMA_NODES,truncated:!1},issuesByPath=new Map,visibleIssueCount=Math.min(this.issues.length,MAX_RENDERED_SCHEMA_ISSUES);for(let index=0;index<visibleIssueCount;index++){const issue=this.issues[index];if(!issue)continue;const pathIssues=issuesByPath.get(issue.path)??[];pathIssues.push(issue),issuesByPath.set(issue.path,pathIssues)}const tree=this.renderNode(this.schema.title||"$",this.schema,"",!1,0,new Set,budget,issuesByPath);return html`
22
37
  <section part="base" aria-label=${label??nothing}>
23
- <ul part="tree">
24
- ${tree}
25
- </ul>
38
+ <ul part="tree">${tree}</ul>
26
39
  ${budget.truncated?html`<p part="limit">${this.localize("schemaViewerLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_SCHEMA_NODES)})}</p>`:nothing}
27
40
  ${this.issues.length>MAX_RENDERED_SCHEMA_ISSUES?html`<p part="issue-limit">${this.localize("schemaViewerIssueLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_SCHEMA_ISSUES)})}</p>`:nothing}
28
41
  </section>