@aceshooting/lyra-ui 13.0.1 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +18 -13
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{nextId}from"../../../internal/a11y.js";import{AnchoredValidityController,resolveValidityAnchor,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./tool-param-form.styles.js";import"../../forms/select/select.class.js";import"../../forms/combobox/option.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldMustBeBoolean,LYRA_DEFAULT_fieldMustBeInteger,LYRA_DEFAULT_fieldMustBeNumber,LYRA_DEFAULT_fieldMustBeOneOf,LYRA_DEFAULT_fieldMustBeString,LYRA_DEFAULT_fieldMustEqual,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noData,LYRA_DEFAULT_schemaMustBeObject,LYRA_DEFAULT_schemaPropertiesMustBeFlat,LYRA_DEFAULT_toolParamBooleanFalse,LYRA_DEFAULT_toolParamBooleanTrue,LYRA_DEFAULT_toolParamBooleanUnset,LYRA_DEFAULT_toolParamMissingProperty,LYRA_DEFAULT_toolParamSchemaLimit,LYRA_DEFAULT_unsupportedFieldType,LYRA_DEFAULT_valueMustBeSerializable}from"../../../internal/default-strings.generated.js";const MAX_SCHEMA_FIELDS=100,MAX_ENUM_OPTIONS=500,MAX_VALUE_ENTRIES=1e4,MAX_VALUE_NODES=5e4,MAX_VALUE_DEPTH=16,OMIT_VALUE=Symbol("omit-tool-param-value");function isPlainRecord(value){try{const prototype=Object.getPrototypeOf(value);return prototype===null||Object.getPrototypeOf(prototype)===null}catch{return!1}}function snapshotValueEntry(value,budget,depth){if(value===null||typeof value!="object"&&typeof value!="function"||typeof value=="function")return value;if(depth>MAX_VALUE_DEPTH||budget.remaining<=0)return budget.truncated=!0,OMIT_VALUE;const existing=budget.seen.get(value);if(existing!==void 0)return existing;let isArray=!1;try{isArray=Array.isArray(value)}catch{return budget.invalid=!0,OMIT_VALUE}if(isArray){const output2=[];budget.seen.set(value,output2);let length=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(descriptor.value>MAX_VALUE_ENTRIES&&(budget.truncated=!0),length=Math.min(descriptor.value,MAX_VALUE_ENTRIES))}catch{budget.invalid=!0}for(let index=0;index<length&&budget.remaining>0;index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{budget.invalid=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){budget.invalid=!0;continue}budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&output2.push(entry)}return budget.remaining<=0&&length>output2.length&&(budget.truncated=!0),Object.freeze(output2)}if(!isPlainRecord(value))return value;const output={};budget.seen.set(value,output);let descriptors;try{descriptors=Object.getOwnPropertyDescriptors(value)}catch{return budget.invalid=!0,OMIT_VALUE}let retained=0;for(const key of Reflect.ownKeys(descriptors)){const descriptor=descriptors[key];if(!descriptor?.enumerable)continue;if(retained>=MAX_VALUE_ENTRIES||budget.remaining<=0){budget.truncated=!0;break}if(!("value"in descriptor)){budget.invalid=!0;continue}retained+=1,budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&Object.defineProperty(output,key,{value:entry,enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(output)}function snapshotFormValue(value){if(value==null)return{value:Object.freeze({}),invalid:!1,truncated:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{value:Object.freeze({}),invalid:!0,truncated:!1}}if(typeof value!="object"||isArray||!isPlainRecord(value))return{value:Object.freeze({}),invalid:!0,truncated:!1};const budget={remaining:MAX_VALUE_NODES,seen:new WeakMap,invalid:!1,truncated:!1},snapshot=snapshotValueEntry(value,budget,0);return{value:snapshot===OMIT_VALUE?Object.freeze({}):snapshot,invalid:budget.invalid||snapshot===OMIT_VALUE,truncated:budget.truncated}}const EMPTY_SCHEMA=Object.freeze({type:"object",properties:Object.freeze({})});function snapshotSchemaStringArray(value){let isArray=!1;try{isArray=Array.isArray(value)}catch{return{isArray:!1,exceededLimit:!1}}if(!isArray)return{isArray:!1,exceededLimit:!1};let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(sourceLength=descriptor.value)}catch{return{isArray:!0,value:Object.freeze([]),exceededLimit:!1}}const output=[];for(let index=0;index<Math.min(sourceLength,MAX_SCHEMA_FIELDS);index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}descriptor&&"value"in descriptor&&typeof descriptor.value=="string"&&output.push(descriptor.value)}return{isArray:!0,value:Object.freeze(output),exceededLimit:sourceLength>MAX_SCHEMA_FIELDS}}function snapshotSchema(value){if(value==null)return{schema:EMPTY_SCHEMA,shapeError:"",exceededLimits:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}if(typeof value!="object"||isArray)return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};let rootDescriptors;try{rootDescriptors=Object.getOwnPropertyDescriptors(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}const typeDescriptor=rootDescriptors.type;if(!typeDescriptor||!("value"in typeDescriptor)||typeDescriptor.value!=="object")return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};const propertiesDescriptor=rootDescriptors.properties,propertiesValue=propertiesDescriptor&&"value"in propertiesDescriptor?propertiesDescriptor.value:void 0;if(propertiesValue===null||typeof propertiesValue!="object"||!isPlainRecord(propertiesValue))return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1};const properties=Object.create(null);let shapeError="",exceededLimits=!1,seenFields=0,propertyDescriptors;try{propertyDescriptors=Object.getOwnPropertyDescriptors(propertiesValue)}catch{return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1}}for(const key of Reflect.ownKeys(propertyDescriptors)){const descriptor=propertyDescriptors[key];if(typeof key!="string"||!descriptor?.enumerable)continue;if(seenFields+=1,seenFields>MAX_SCHEMA_FIELDS){exceededLimits=!0;break}if(!("value"in descriptor)||descriptor.value===null||typeof descriptor.value!="object"||!isPlainRecord(descriptor.value)){shapeError="properties";continue}const propertySnapshot=snapshotFormValue(descriptor.value);if(propertySnapshot.invalid||propertySnapshot.truncated){shapeError="properties";continue}const property=propertySnapshot.value;let choices=property.enum;Array.isArray(choices)&&choices.length>MAX_ENUM_OPTIONS&&(exceededLimits=!0,choices=Object.freeze(choices.slice(0,MAX_ENUM_OPTIONS))),properties[key]=Object.freeze({...property,...choices===void 0?{}:{enum:choices}})}const requiredDescriptor=rootDescriptors.required;let required;if(requiredDescriptor&&"value"in requiredDescriptor){const requiredSnapshot=snapshotSchemaStringArray(requiredDescriptor.value);requiredSnapshot.isArray?(required=requiredSnapshot.value,requiredSnapshot.exceededLimit&&(exceededLimits=!0)):requiredDescriptor.enumerable&&(shapeError="properties")}else requiredDescriptor?.enumerable&&(shapeError="properties");return{schema:Object.freeze({type:"object",properties:Object.freeze(properties),...required===void 0?{}:{required}}),shapeError,exceededLimits}}function cloneFormValue(value,_ownerWindow){return snapshotFormValue(value).value}class LyraToolParamForm extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldMustBeBoolean:LYRA_DEFAULT_fieldMustBeBoolean,fieldMustBeInteger:LYRA_DEFAULT_fieldMustBeInteger,fieldMustBeNumber:LYRA_DEFAULT_fieldMustBeNumber,fieldMustBeOneOf:LYRA_DEFAULT_fieldMustBeOneOf,fieldMustBeString:LYRA_DEFAULT_fieldMustBeString,fieldMustEqual:LYRA_DEFAULT_fieldMustEqual,fieldRequired:LYRA_DEFAULT_fieldRequired,noData:LYRA_DEFAULT_noData,schemaMustBeObject:LYRA_DEFAULT_schemaMustBeObject,schemaPropertiesMustBeFlat:LYRA_DEFAULT_schemaPropertiesMustBeFlat,toolParamBooleanFalse:LYRA_DEFAULT_toolParamBooleanFalse,toolParamBooleanTrue:LYRA_DEFAULT_toolParamBooleanTrue,toolParamBooleanUnset:LYRA_DEFAULT_toolParamBooleanUnset,toolParamMissingProperty:LYRA_DEFAULT_toolParamMissingProperty,toolParamSchemaLimit:LYRA_DEFAULT_toolParamSchemaLimit,unsupportedFieldType:LYRA_DEFAULT_unsupportedFieldType,valueMustBeSerializable:LYRA_DEFAULT_valueMustBeSerializable}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-validity-change","lr-input"])}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0},schema:{attribute:!1,noAccessor:!0},value:{attribute:!1,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0}}}constructor(){super(),this._errors={},this._formError="",this.showFormError=!1,this.touchedFields=new Set,this.baseId=nextId("tool-param-form"),this._fieldsetDisabled=!1,this._name="",this._schema=EMPTY_SCHEMA,this.schemaInputShapeError="",this.schemaInputExceededLimits=!1,this._value=Object.freeze({}),this.valueInputInvalid=!1,this.valueInputTruncated=!1,this.defaultValueSnapshot=Object.freeze({}),this.defaultValueCaptured=!1,this._effectiveValue=Object.freeze({}),this._validityFlags={},this._disabled=!1,this.hasInteracted=!1,this.visibleErrorSnapshot=new Map,this.suppressNextErrorAnnouncement=!0,this.stopNestedControlEvent=e=>{e.stopPropagation()},this.onFieldFocus=()=>{this.emit("focus")},this.onFieldBlur=()=>{this.emit("blur")},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),this.syncFormState()}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){const field=this.firstInvalidField();if(field){const input=field.querySelector("input.control");if(input)return input;for(const child of field.children){const anchor=resolveValidityAnchor(child);if(anchor)return anchor}}return this.firstMissingPropertyError()}firstInvalidField(){if(!this.renderRoot)return;const fields=Array.from(this.renderRoot.querySelectorAll('[part="field"]'));for(const key of Object.keys(this._errors)){const field=fields.find(candidate=>candidate.dataset.key===key);if(field)return field}}get missingRequiredKeys(){const properties=this.schemaProperties;return this.requiredKeys.filter(key=>!Object.prototype.hasOwnProperty.call(properties,key)&&!!this._errors[key])}firstMissingPropertyError(){if(!this.renderRoot)return;const errors=Array.from(this.renderRoot.querySelectorAll('[part="error"][data-missing-property]'));for(const key of Object.keys(this._errors)){const error=errors.find(candidate=>candidate.dataset.key===key);if(error)return error}}focusFirstControl(){if(!this.renderRoot)return;const controls=this.renderRoot.querySelectorAll("input.control, lr-select");for(const control of controls)if(!(control.disabled||control.getAttribute("aria-disabled")==="true")){control.focus();return}}click(){this.effectiveDisabled||this.focusFirstControl()}connectedCallback(){this.defaultValueCaptured||(this.defaultValueSnapshot=cloneFormValue(this._value,this.ownerDocument.defaultView),this.defaultValueCaptured=!0),super.connectedCallback(),this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})),this.hasUpdated&&(this.suppressNextErrorAnnouncement=!0,this.requestUpdate()),this.syncFormState()}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveValue(){return snapshotFormValue(this._effectiveValue).value}get schemaProperties(){return this._schema.properties}get requiredKeys(){return this._schema.required??Object.freeze([])}resolveEffectiveValue(){const props=this.schemaProperties,out={...this.value};for(const[key,prop]of Object.entries(props))!Object.prototype.hasOwnProperty.call(this.value,key)&&prop.default!==void 0&&Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:prop.default});return snapshotFormValue(out).value}get schema(){return this._schema}set schema(next){const old=this._schema,snapshot=snapshotSchema(next);this._schema=snapshot.schema,this.schemaInputShapeError=snapshot.shapeError,this.schemaInputExceededLimits=snapshot.exceededLimits,this.syncFormState(),this.requestUpdate("schema",old)}get value(){return this._value}set value(next){const old=this._value,snapshot=snapshotFormValue(next);this._value=snapshot.value,this.valueInputInvalid=snapshot.invalid,this.valueInputTruncated=snapshot.truncated,this.syncFormState(),this.requestUpdate("value",old)}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this.applyValidity(),this.requestUpdate("disabled",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get errors(){return this.publicValidityErrors()}publicValidityErrors(){const errors={...this._errors};return this.willValidate&&(this.validityController.customValidityMessage||this._formError)&&(errors.base=this.validationMessage),Object.freeze(errors)}publishValiditySnapshot(){if(!this.isConnected)return;const valid=!this.willValidate||this.validity.valid,errors=valid?Object.freeze({}):this.publicValidityErrors(),key=JSON.stringify({valid,errors});key!==this.lastValidityKey&&(this.lastValidityKey=key,this.emit("lr-validity-change",Object.freeze({valid,errors})))}get formError(){return this._formError}computeValidation(effective){const props=this.schemaProperties,required=new Set(this.requiredKeys),out={},flags={},addError=(key,message)=>{Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:message})};for(const[key,prop]of Object.entries(props)){const type=prop?.type;if(type!=="string"&&type!=="number"&&type!=="integer"&&type!=="boolean"){addError(key,this.localize("unsupportedFieldType",void 0,{type:String(type)})),flags.customError=!0;continue}if(!(Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0)){required.has(key)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);continue}const v=effective[key];if(type==="string"&&typeof v!="string"){addError(key,this.localize("fieldMustBeString")),flags.typeMismatch=!0;continue}if(type==="number"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeNumber")),flags.typeMismatch=!0;continue}if(type==="integer"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeInteger")),flags.typeMismatch=!0;continue}if(type==="integer"&&!Number.isInteger(v)){addError(key,this.localize("fieldMustBeInteger")),flags.stepMismatch=!0;continue}if(type==="boolean"&&typeof v!="boolean"){addError(key,this.localize("fieldMustBeBoolean")),flags.typeMismatch=!0;continue}if(type==="string"&&Array.isArray(prop.enum)&&!prop.enum.includes(v)){addError(key,this.localize("fieldMustBeOneOf",void 0,{values:getListFormat(this.effectiveLocale,{style:"long",type:"disjunction"}).format(prop.enum)})),flags.customError=!0;continue}prop.const!==void 0&&v!==prop.const&&(addError(key,this.localize("fieldMustEqual",void 0,{value:JSON.stringify(prop.const)})),flags.customError=!0)}for(const key of required)Object.prototype.hasOwnProperty.call(props,key)||(!Object.prototype.hasOwnProperty.call(effective,key)||effective[key]===void 0)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);return{errors:out,flags}}checkValidity(){return this.syncFormState(),this.internals.checkValidity()}reportValidity(){this.hasInteracted=!0,this.syncFormState(),Object.keys(this._errors).length>0&&(this.touchedFields=new Set([...this.touchedFields,...Object.keys(this._errors)])),this._formError&&(this.showFormError=!0);const valid=this.internals.reportValidity();return!valid&&!this.firstInvalidField()&&this.missingRequiredKeys.length>0&&this.updateComplete.then(()=>{const error=this.firstMissingPropertyError();this.validityController.refreshAnchor(),error?.focus()}),valid}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.syncValidityCustomStates(),this.publishValiditySnapshot()}formResetCallback(){this.hasInteracted=!1,this.value=cloneFormValue(this.defaultValueSnapshot,this.ownerDocument.defaultView),this.touchedFields=new Set,this.showFormError=!1}formStateRestoreCallback(state2,_mode){let restored={};if(typeof state2=="string")try{const parsed=JSON.parse(state2);parsed!==null&&typeof parsed=="object"&&!Array.isArray(parsed)&&(restored=parsed)}catch{}this.value=restored}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,this.applyValidity(),this.requestUpdate()}schemaShapeError(){return this.schemaInputShapeError==="object"?this.localize("schemaMustBeObject"):this.schemaInputShapeError==="properties"?this.localize("schemaPropertiesMustBeFlat"):this.schemaInputExceededLimits?this.localize("toolParamSchemaLimit",void 0,{fields:getNumberFormat(this.effectiveLocale).format(MAX_SCHEMA_FIELDS),options:getNumberFormat(this.effectiveLocale).format(MAX_ENUM_OPTIONS)}):""}serializeEffectiveValue(effective){const serialized=JSON.stringify(effective,(_key,value)=>{if(typeof value=="number"&&!Number.isFinite(value))throw new TypeError("Non-finite numbers are not JSON values.");return value});if(typeof serialized!="string")throw new TypeError("Value did not serialize to JSON.");return serialized}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}syncInternals(formValue){this.internals.setFormValue(formValue,formValue),this.applyValidity()}applyValidity(){if(this.validityController){if(this.barredFromValidation||Object.keys(this._validityFlags).length===0)this.validityController.setValidity({});else{const firstMessage=Object.values(this._errors)[0]??this._formError;this.validityController.setValidity(this._validityFlags,firstMessage)}this.syncValidityCustomStates(),this.publishValiditySnapshot()}}syncValidityCustomStates(){syncValidityStates(this.internals,{required:this.requiredKeys.length>0,hasInteracted:this.hasInteracted,barred:this.barredFromValidation})}syncFormState(){let effective=Object.freeze({}),errors={},flags={},formError="",formValue=null;try{if(formError=this.schemaShapeError(),this.valueInputInvalid||this.valueInputTruncated)throw new TypeError("The value could not be retained within the public snapshot boundary.");effective=this.resolveEffectiveValue();const validation=this.computeValidation(effective);errors=validation.errors,flags=validation.flags,formValue=this.serializeEffectiveValue(effective)}catch{formError=this.localize("valueMustBeSerializable"),formValue=null}formError&&(flags.customError=!0,formValue=null),this._effectiveValue=effective,JSON.stringify(this._errors)!==JSON.stringify(errors)&&(this._errors=errors),this._formError=formError,this._validityFlags=flags,this.syncInternals(formValue)}updated(changed){if(super.updated(changed),this.publishValiditySnapshot(),changed.has("value")||changed.has("schema")||changed.has("_errors")||changed.has("_formError")){const nestedUpdates=Array.from(this.firstInvalidField()?.children??[]).filter(element=>typeof element[VALIDITY_ANCHOR]=="function").map(element=>element.updateComplete).filter(update=>update!==void 0);nestedUpdates.length>0&&Promise.all(nestedUpdates).then(()=>this.validityController.refreshAnchor())}const currentErrors=new Map;for(const node of this.renderRoot.querySelectorAll('[part="error"]')){const fieldKey=node.closest('[part~="field"]')?.dataset.key,key=node.dataset.key??fieldKey??"form",text=node.textContent?.trim()??"";text&&currentErrors.set(key,text)}if(!this.suppressNextErrorAnnouncement){const freshMessages=[];for(const[key,text]of currentErrors)this.visibleErrorSnapshot.get(key)!==text&&!freshMessages.includes(text)&&freshMessages.push(text);freshMessages.length>0&&this.errorAnnouncementSink?.announce(freshMessages.join(" "))}this.visibleErrorSnapshot=currentErrors,this.suppressNextErrorAnnouncement=!1}setFieldValue(key,val){this.effectiveDisabled||(this.hasInteracted=!0,this.value={...this.value,[key]:val},this.emit("lr-input",{value:this.effectiveValue}))}markTouched(key){this.hasInteracted=!0,this.syncValidityCustomStates(),!this.touchedFields.has(key)&&(this.touchedFields=new Set(this.touchedFields).add(key))}onTextInput(key,e){this.setFieldValue(key,e.target.value)}onNumberInput(key,e){const n=e.target.valueAsNumber;this.setFieldValue(key,Number.isNaN(n)?void 0:n)}onSelectChange(key,e){e.stopPropagation(),this.setFieldValue(key,e.target.value)}onBooleanSelectChange(key,e){e.stopPropagation();const value=e.target.value;if(value===""){if(this.effectiveDisabled)return;this.hasInteracted=!0;const next={...this.value};Reflect.deleteProperty(next,key),this.value=next,this.emit("lr-input",{value:this.effectiveValue});return}this.setFieldValue(key,value==="true")}renderControl(key,prop,fieldId,label,required,describedBy,errorMessage,effective){if(prop.type==="string"&&prop.enum&&prop.enum.length>0)return html`<lr-select
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{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{nextId}from"../../../internal/a11y.js";import{AnchoredValidityController,resolveValidityAnchor,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./tool-param-form.styles.js";import"../../forms/select/select.class.js";import"../../forms/combobox/option.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldMustBeBoolean,LYRA_DEFAULT_fieldMustBeInteger,LYRA_DEFAULT_fieldMustBeNumber,LYRA_DEFAULT_fieldMustBeOneOf,LYRA_DEFAULT_fieldMustBeString,LYRA_DEFAULT_fieldMustEqual,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noData,LYRA_DEFAULT_schemaMustBeObject,LYRA_DEFAULT_schemaPropertiesMustBeFlat,LYRA_DEFAULT_toolParamBooleanFalse,LYRA_DEFAULT_toolParamBooleanTrue,LYRA_DEFAULT_toolParamBooleanUnset,LYRA_DEFAULT_toolParamMissingProperty,LYRA_DEFAULT_toolParamSchemaLimit,LYRA_DEFAULT_unsupportedFieldType,LYRA_DEFAULT_valueMustBeSerializable}from"../../../internal/default-strings.generated.js";const MAX_SCHEMA_FIELDS=100,MAX_ENUM_OPTIONS=500,MAX_VALUE_ENTRIES=1e4,MAX_VALUE_NODES=5e4,MAX_VALUE_INSPECTIONS=MAX_VALUE_NODES*2,MAX_VALUE_DEPTH=16,OMIT_VALUE=Symbol("omit-tool-param-value"),LIMIT_VALUE=Symbol("limit-tool-param-value"),FUNCTION_TO_STRING=Function.prototype.toString,OBJECT_CONSTRUCTOR_SOURCE=FUNCTION_TO_STRING.call(Object);function isPlainRecord(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 checkpointSnapshot(budget){return{remaining:budget.remaining,seenEntries:budget.seenEntries.length,truncated:budget.truncated}}function restoreSnapshotCheckpoint(budget,checkpoint){for(budget.remaining=checkpoint.remaining,budget.truncated=checkpoint.truncated;budget.seenEntries.length>checkpoint.seenEntries;){const source=budget.seenEntries.pop();source&&budget.seen.delete(source)}}function rememberSnapshot(budget,source,output){budget.seen.set(source,output),budget.seenEntries.push(source)}function omitInvalidValue(budget,checkpoint){return restoreSnapshotCheckpoint(budget,checkpoint),budget.invalid=!0,OMIT_VALUE}function snapshotValueEntry(value,budget,depth){if(value===null||typeof value!="object"&&typeof value!="function")return value;const checkpoint=checkpointSnapshot(budget);if(typeof value=="function")return omitInvalidValue(budget,checkpoint);if(depth>MAX_VALUE_DEPTH||budget.remaining<=0)return budget.truncated=!0,LIMIT_VALUE;const existing=budget.seen.get(value);if(existing!==void 0)return existing;let isArray=!1;try{isArray=Array.isArray(value)}catch{return omitInvalidValue(budget,checkpoint)}if(isArray){if(budget.remainingInspections<=0)return budget.truncated=!0,LIMIT_VALUE;budget.remainingInspections-=1;const output2=[];rememberSnapshot(budget,value,output2);let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");if(descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0)sourceLength=descriptor.value;else return omitInvalidValue(budget,checkpoint)}catch{return omitInvalidValue(budget,checkpoint)}sourceLength>MAX_VALUE_ENTRIES&&(budget.truncated=!0);const length=Math.min(sourceLength,MAX_VALUE_ENTRIES);let outputLength=length;for(let index=0;index<length;index+=1){if(budget.remaining<=0||budget.remainingInspections<=0){budget.truncated=!0,outputLength=index;break}budget.remainingInspections-=1;let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{budget.invalid=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){budget.invalid=!0;continue}const entryCheckpoint=checkpointSnapshot(budget);budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);if(entry===OMIT_VALUE){restoreSnapshotCheckpoint(budget,entryCheckpoint);continue}if(entry===LIMIT_VALUE){outputLength=index;break}Object.defineProperty(output2,String(index),{value:entry,enumerable:!0,configurable:!1,writable:!1})}return output2.length=outputLength,Object.freeze(output2)}if(!isPlainRecord(value))return omitInvalidValue(budget,checkpoint);const output={};rememberSnapshot(budget,value,output);let retained=0;try{for(const key in value){if(retained>=MAX_VALUE_ENTRIES||budget.remaining<=0||budget.remainingInspections<=0){budget.truncated=!0;break}budget.remainingInspections-=1;const descriptor=Object.getOwnPropertyDescriptor(value,key);if(!descriptor||!descriptor.enumerable)continue;if(!("value"in descriptor)){budget.invalid=!0;continue}const entryCheckpoint=checkpointSnapshot(budget);budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);if(entry===OMIT_VALUE){restoreSnapshotCheckpoint(budget,entryCheckpoint);continue}if(entry===LIMIT_VALUE)break;retained+=1,Object.defineProperty(output,key,{value:entry,enumerable:!0,configurable:!1,writable:!1})}}catch{return omitInvalidValue(budget,checkpoint)}return Object.freeze(output)}function snapshotFormValue(value){if(value==null)return{value:Object.freeze({}),invalid:!1,truncated:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{value:Object.freeze({}),invalid:!0,truncated:!1}}if(typeof value!="object"||isArray||!isPlainRecord(value))return{value:Object.freeze({}),invalid:!0,truncated:!1};const budget={remaining:MAX_VALUE_NODES,remainingInspections:MAX_VALUE_INSPECTIONS,seen:new WeakMap,seenEntries:[],invalid:!1,truncated:!1},snapshot=snapshotValueEntry(value,budget,0);return{value:snapshot===OMIT_VALUE||snapshot===LIMIT_VALUE?Object.freeze({}):snapshot,invalid:budget.invalid||snapshot===OMIT_VALUE,truncated:budget.truncated||snapshot===LIMIT_VALUE}}const EMPTY_SCHEMA=Object.freeze({type:"object",properties:Object.freeze({})});function snapshotSchemaStringArray(value){let isArray=!1;try{isArray=Array.isArray(value)}catch{return{isArray:!1,exceededLimit:!1}}if(!isArray)return{isArray:!1,exceededLimit:!1};let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(sourceLength=descriptor.value)}catch{return{isArray:!0,value:Object.freeze([]),exceededLimit:!1}}const output=[];for(let index=0;index<Math.min(sourceLength,MAX_SCHEMA_FIELDS);index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}descriptor&&"value"in descriptor&&typeof descriptor.value=="string"&&output.push(descriptor.value)}return{isArray:!0,value:Object.freeze(output),exceededLimit:sourceLength>MAX_SCHEMA_FIELDS}}function snapshotSchemaEnum(value){let isArray=!1;try{isArray=Array.isArray(value)}catch{return{malformed:!0,exceededLimit:!1}}if(!isArray)return{malformed:!0,exceededLimit:!1};let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");if(!descriptor||!("value"in descriptor)||typeof descriptor.value!="number"||!Number.isSafeInteger(descriptor.value)||descriptor.value<0)return{malformed:!0,exceededLimit:!1};sourceLength=descriptor.value}catch{return{malformed:!0,exceededLimit:!1}}const output=[];for(let index=0;index<Math.min(sourceLength,MAX_ENUM_OPTIONS);index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{return{malformed:!0,exceededLimit:sourceLength>MAX_ENUM_OPTIONS}}if(descriptor){if(!("value"in descriptor)||typeof descriptor.value!="string")return{malformed:!0,exceededLimit:sourceLength>MAX_ENUM_OPTIONS};output.push(descriptor.value)}}return{value:Object.freeze(output),malformed:!1,exceededLimit:sourceLength>MAX_ENUM_OPTIONS}}function snapshotSchemaProperty(value){let descriptors;try{descriptors=Object.getOwnPropertyDescriptors(value)}catch{return{malformed:!0,exceededLimit:!1}}const withoutEnum={};let enumDescriptor;for(const key of Reflect.ownKeys(descriptors)){const descriptor=descriptors[key];if(descriptor?.enumerable){if(key==="enum"){enumDescriptor=descriptor;continue}if(!("value"in descriptor))return{malformed:!0,exceededLimit:!1};Object.defineProperty(withoutEnum,key,{value:descriptor.value,enumerable:!0,configurable:!1,writable:!1})}}const propertySnapshot=snapshotFormValue(withoutEnum);if(propertySnapshot.invalid||propertySnapshot.truncated)return{malformed:!0,exceededLimit:!1};let choices,exceededLimit=!1,hasEnum=!1;if(enumDescriptor){if(!("value"in enumDescriptor))return{malformed:!0,exceededLimit:!1};if(hasEnum=!0,enumDescriptor.value!==void 0){const enumSnapshot=snapshotSchemaEnum(enumDescriptor.value);if(enumSnapshot.malformed)return{malformed:!0,exceededLimit:enumSnapshot.exceededLimit};choices=enumSnapshot.value,exceededLimit=enumSnapshot.exceededLimit}}const output={};for(const key of Reflect.ownKeys(propertySnapshot.value)){const descriptor=Object.getOwnPropertyDescriptor(propertySnapshot.value,key);!descriptor?.enumerable||!("value"in descriptor)||Object.defineProperty(output,key,{value:descriptor.value,enumerable:!0,configurable:!1,writable:!1})}return hasEnum&&Object.defineProperty(output,"enum",{value:choices,enumerable:!0,configurable:!1,writable:!1}),{value:Object.freeze(output),malformed:!1,exceededLimit}}function snapshotSchema(value){if(value==null)return{schema:EMPTY_SCHEMA,shapeError:"",exceededLimits:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}if(typeof value!="object"||isArray)return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};let rootDescriptors;try{rootDescriptors=Object.getOwnPropertyDescriptors(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}const typeDescriptor=rootDescriptors.type;if(!typeDescriptor||!("value"in typeDescriptor)||typeDescriptor.value!=="object")return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};const propertiesDescriptor=rootDescriptors.properties,propertiesValue=propertiesDescriptor&&"value"in propertiesDescriptor?propertiesDescriptor.value:void 0;if(propertiesValue===null||typeof propertiesValue!="object"||!isPlainRecord(propertiesValue))return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1};const properties=Object.create(null);let shapeError="",exceededLimits=!1,seenFields=0,propertyDescriptors;try{propertyDescriptors=Object.getOwnPropertyDescriptors(propertiesValue)}catch{return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1}}for(const key of Reflect.ownKeys(propertyDescriptors)){const descriptor=propertyDescriptors[key];if(typeof key!="string"||!descriptor?.enumerable)continue;if(seenFields+=1,seenFields>MAX_SCHEMA_FIELDS){exceededLimits=!0;break}if(!("value"in descriptor)||descriptor.value===null||typeof descriptor.value!="object"||!isPlainRecord(descriptor.value)){shapeError="properties";continue}const propertySnapshot=snapshotSchemaProperty(descriptor.value);if(propertySnapshot.malformed||!propertySnapshot.value){shapeError="properties",propertySnapshot.exceededLimit&&(exceededLimits=!0);continue}propertySnapshot.exceededLimit&&(exceededLimits=!0),properties[key]=propertySnapshot.value}const requiredDescriptor=rootDescriptors.required;let required;if(requiredDescriptor&&"value"in requiredDescriptor){const requiredSnapshot=snapshotSchemaStringArray(requiredDescriptor.value);requiredSnapshot.isArray?(required=requiredSnapshot.value,requiredSnapshot.exceededLimit&&(exceededLimits=!0)):requiredDescriptor.enumerable&&(shapeError="properties")}else requiredDescriptor?.enumerable&&(shapeError="properties");return{schema:Object.freeze({type:"object",properties:Object.freeze(properties),...required===void 0?{}:{required}}),shapeError,exceededLimits}}function cloneFormValue(value,_ownerWindow){return snapshotFormValue(value).value}class LyraToolParamForm extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldMustBeBoolean:LYRA_DEFAULT_fieldMustBeBoolean,fieldMustBeInteger:LYRA_DEFAULT_fieldMustBeInteger,fieldMustBeNumber:LYRA_DEFAULT_fieldMustBeNumber,fieldMustBeOneOf:LYRA_DEFAULT_fieldMustBeOneOf,fieldMustBeString:LYRA_DEFAULT_fieldMustBeString,fieldMustEqual:LYRA_DEFAULT_fieldMustEqual,fieldRequired:LYRA_DEFAULT_fieldRequired,noData:LYRA_DEFAULT_noData,schemaMustBeObject:LYRA_DEFAULT_schemaMustBeObject,schemaPropertiesMustBeFlat:LYRA_DEFAULT_schemaPropertiesMustBeFlat,toolParamBooleanFalse:LYRA_DEFAULT_toolParamBooleanFalse,toolParamBooleanTrue:LYRA_DEFAULT_toolParamBooleanTrue,toolParamBooleanUnset:LYRA_DEFAULT_toolParamBooleanUnset,toolParamMissingProperty:LYRA_DEFAULT_toolParamMissingProperty,toolParamSchemaLimit:LYRA_DEFAULT_toolParamSchemaLimit,unsupportedFieldType:LYRA_DEFAULT_unsupportedFieldType,valueMustBeSerializable:LYRA_DEFAULT_valueMustBeSerializable}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-validity-change","lr-input"])}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0},schema:{attribute:!1,noAccessor:!0},value:{attribute:!1,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0}}}constructor(){super(),this._errors={},this._formError="",this.showFormError=!1,this.touchedFields=new Set,this.baseId=nextId("tool-param-form"),this._fieldsetDisabled=!1,this._name="",this._schema=EMPTY_SCHEMA,this.schemaInputShapeError="",this.schemaInputExceededLimits=!1,this._value=Object.freeze({}),this.valueInputInvalid=!1,this.valueInputTruncated=!1,this.defaultValueSnapshot=Object.freeze({}),this.defaultValueCaptured=!1,this._effectiveValue=Object.freeze({}),this._validityFlags={},this._disabled=!1,this.hasInteracted=!1,this.visibleErrorSnapshot=new Map,this.suppressNextErrorAnnouncement=!0,this.stopNestedControlEvent=e=>{e.stopPropagation()},this.onFieldFocus=()=>{this.emit("focus")},this.onFieldBlur=()=>{this.emit("blur")},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),this.syncFormState()}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){const field=this.firstInvalidField();if(field){const input=field.querySelector("input.control");if(input)return input;for(const child of field.children){const anchor=resolveValidityAnchor(child);if(anchor)return anchor}}return this.firstMissingPropertyError()}firstInvalidField(){if(!this.renderRoot)return;const fields=Array.from(this.renderRoot.querySelectorAll('[part="field"]'));for(const key of Object.keys(this._errors)){const field=fields.find(candidate=>candidate.dataset.key===key);if(field)return field}}get missingRequiredKeys(){const properties=this.schemaProperties;return this.requiredKeys.filter(key=>!Object.prototype.hasOwnProperty.call(properties,key)&&!!this._errors[key])}firstMissingPropertyError(){if(!this.renderRoot)return;const errors=Array.from(this.renderRoot.querySelectorAll('[part="error"][data-missing-property]'));for(const key of Object.keys(this._errors)){const error=errors.find(candidate=>candidate.dataset.key===key);if(error)return error}}focusFirstControl(){if(!this.renderRoot)return;const controls=this.renderRoot.querySelectorAll("input.control, lr-select");for(const control of controls)if(!(control.disabled||control.getAttribute("aria-disabled")==="true")){control.focus();return}}click(){this.effectiveDisabled||this.focusFirstControl()}connectedCallback(){this.defaultValueCaptured||(this.defaultValueSnapshot=cloneFormValue(this._value,this.ownerDocument.defaultView),this.defaultValueCaptured=!0),super.connectedCallback(),this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})),this.hasUpdated&&(this.suppressNextErrorAnnouncement=!0,this.requestUpdate()),this.syncFormState()}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveValue(){return snapshotFormValue(this._effectiveValue).value}get schemaProperties(){return this._schema.properties}get requiredKeys(){return this._schema.required??Object.freeze([])}resolveEffectiveValue(){const props=this.schemaProperties,out={...this.value};for(const[key,prop]of Object.entries(props))!Object.prototype.hasOwnProperty.call(this.value,key)&&prop.default!==void 0&&Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:prop.default});return snapshotFormValue(out).value}get schema(){return this._schema}set schema(next){const old=this._schema,snapshot=snapshotSchema(next);this._schema=snapshot.schema,this.schemaInputShapeError=snapshot.shapeError,this.schemaInputExceededLimits=snapshot.exceededLimits,this.syncFormState(),this.requestUpdate("schema",old)}get value(){return this._value}set value(next){const old=this._value,snapshot=snapshotFormValue(next);this._value=snapshot.value,this.valueInputInvalid=snapshot.invalid,this.valueInputTruncated=snapshot.truncated,this.syncFormState(),this.requestUpdate("value",old)}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this.applyValidity(),this.requestUpdate("disabled",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get errors(){return this.publicValidityErrors()}publicValidityErrors(){const errors={...this._errors};return this.willValidate&&(this.validityController.customValidityMessage||this._formError)&&(errors.base=this.validationMessage),Object.freeze(errors)}publishValiditySnapshot(){if(!this.isConnected)return;const valid=!this.willValidate||this.validity.valid,errors=valid?Object.freeze({}):this.publicValidityErrors(),key=JSON.stringify({valid,errors});key!==this.lastValidityKey&&(this.lastValidityKey=key,this.emit("lr-validity-change",Object.freeze({valid,errors})))}get formError(){return this._formError}computeValidation(effective){const props=this.schemaProperties,required=new Set(this.requiredKeys),out={},flags={},addError=(key,message)=>{Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:message})};for(const[key,prop]of Object.entries(props)){const type=prop?.type;if(type!=="string"&&type!=="number"&&type!=="integer"&&type!=="boolean"){addError(key,this.localize("unsupportedFieldType",void 0,{type:String(type)})),flags.customError=!0;continue}if(!(Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0)){required.has(key)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);continue}const v=effective[key];if(type==="string"&&typeof v!="string"){addError(key,this.localize("fieldMustBeString")),flags.typeMismatch=!0;continue}if(type==="number"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeNumber")),flags.typeMismatch=!0;continue}if(type==="integer"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeInteger")),flags.typeMismatch=!0;continue}if(type==="integer"&&!Number.isInteger(v)){addError(key,this.localize("fieldMustBeInteger")),flags.stepMismatch=!0;continue}if(type==="boolean"&&typeof v!="boolean"){addError(key,this.localize("fieldMustBeBoolean")),flags.typeMismatch=!0;continue}if(type==="string"&&Array.isArray(prop.enum)&&!prop.enum.includes(v)){addError(key,this.localize("fieldMustBeOneOf",void 0,{values:getListFormat(this.effectiveLocale,{style:"long",type:"disjunction"}).format(prop.enum)})),flags.customError=!0;continue}prop.const!==void 0&&v!==prop.const&&(addError(key,this.localize("fieldMustEqual",void 0,{value:JSON.stringify(prop.const)})),flags.customError=!0)}for(const key of required)Object.prototype.hasOwnProperty.call(props,key)||(!Object.prototype.hasOwnProperty.call(effective,key)||effective[key]===void 0)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);return{errors:out,flags}}checkValidity(){return this.syncFormState(),this.internals.checkValidity()}reportValidity(){this.hasInteracted=!0,this.syncFormState(),Object.keys(this._errors).length>0&&(this.touchedFields=new Set([...this.touchedFields,...Object.keys(this._errors)])),this._formError&&(this.showFormError=!0),this.requestUpdate();const valid=this.internals.reportValidity();return!valid&&!this.firstInvalidField()&&this.missingRequiredKeys.length>0&&this.updateComplete.then(()=>{const error=this.firstMissingPropertyError();this.validityController.refreshAnchor(),error?.focus()}),valid}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.syncValidityCustomStates(),this.publishValiditySnapshot(),this.requestUpdate()}formResetCallback(){this.hasInteracted=!1,this.value=cloneFormValue(this.defaultValueSnapshot,this.ownerDocument.defaultView),this.touchedFields=new Set,this.showFormError=!1}formStateRestoreCallback(state2,_mode){let restored={};if(typeof state2=="string")try{const parsed=JSON.parse(state2);parsed!==null&&typeof parsed=="object"&&!Array.isArray(parsed)&&(restored=parsed)}catch{}this.value=restored}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,this.applyValidity(),this.requestUpdate()}schemaShapeError(){return this.schemaInputShapeError==="object"?this.localize("schemaMustBeObject"):this.schemaInputShapeError==="properties"?this.localize("schemaPropertiesMustBeFlat"):this.schemaInputExceededLimits?this.localize("toolParamSchemaLimit",void 0,{fields:getNumberFormat(this.effectiveLocale).format(MAX_SCHEMA_FIELDS),options:getNumberFormat(this.effectiveLocale).format(MAX_ENUM_OPTIONS)}):""}serializeEffectiveValue(effective){const serialized=JSON.stringify(effective,(_key,value)=>{if(typeof value=="number"&&!Number.isFinite(value))throw new TypeError("Non-finite numbers are not JSON values.");return value});if(typeof serialized!="string")throw new TypeError("Value did not serialize to JSON.");return serialized}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}syncInternals(formValue){this.internals.setFormValue(formValue,formValue),this.applyValidity()}applyValidity(){if(this.validityController){if(this.barredFromValidation||Object.keys(this._validityFlags).length===0)this.validityController.setValidity({});else{const firstMessage=Object.values(this._errors)[0]??this._formError;this.validityController.setValidity(this._validityFlags,firstMessage)}this.syncValidityCustomStates(),this.publishValiditySnapshot()}}syncValidityCustomStates(){syncValidityStates(this.internals,{required:this.requiredKeys.length>0,hasInteracted:this.hasInteracted,barred:this.barredFromValidation})}syncFormState(){let effective=Object.freeze({}),errors={},flags={},formError="",formValue=null;try{if(formError=this.schemaShapeError(),this.valueInputInvalid||this.valueInputTruncated)throw new TypeError("The value could not be retained within the public snapshot boundary.");effective=this.resolveEffectiveValue();const validation=this.computeValidation(effective);errors=validation.errors,flags=validation.flags,formValue=this.serializeEffectiveValue(effective)}catch{formError=this.localize("valueMustBeSerializable"),formValue=null}formError&&(flags.customError=!0,formValue=null),this._effectiveValue=effective,JSON.stringify(this._errors)!==JSON.stringify(errors)&&(this._errors=errors),this._formError=formError,this._validityFlags=flags,this.syncInternals(formValue)}updated(changed){if(super.updated(changed),this.publishValiditySnapshot(),changed.has("value")||changed.has("schema")||changed.has("_errors")||changed.has("_formError")){const nestedUpdates=Array.from(this.firstInvalidField()?.children??[]).filter(element=>typeof element[VALIDITY_ANCHOR]=="function").map(element=>element.updateComplete).filter(update=>update!==void 0);nestedUpdates.length>0&&Promise.all(nestedUpdates).then(()=>this.validityController.refreshAnchor())}const currentErrors=new Map;for(const node of this.renderRoot.querySelectorAll('[part="error"]')){const fieldKey=node.closest('[part~="field"]')?.dataset.key,key=node.dataset.key??fieldKey??"form",text=node.textContent?.trim()??"";text&&currentErrors.set(key,text)}if(!this.suppressNextErrorAnnouncement){const freshMessages=[];for(const[key,text]of currentErrors)this.visibleErrorSnapshot.get(key)!==text&&!freshMessages.includes(text)&&freshMessages.push(text);freshMessages.length>0&&this.errorAnnouncementSink?.announce(freshMessages.join(" "))}this.visibleErrorSnapshot=currentErrors,this.suppressNextErrorAnnouncement=!1}setFieldValue(key,val){this.effectiveDisabled||(this.hasInteracted=!0,this.value={...this.value,[key]:val},this.emit("lr-input",{value:this.effectiveValue}))}markTouched(key){this.hasInteracted=!0,this.syncValidityCustomStates(),!this.touchedFields.has(key)&&(this.touchedFields=new Set(this.touchedFields).add(key))}onTextInput(key,e){this.setFieldValue(key,e.target.value)}onNumberInput(key,e){const n=e.target.valueAsNumber;this.setFieldValue(key,Number.isNaN(n)?void 0:n)}onSelectChange(key,e){e.stopPropagation(),this.setFieldValue(key,e.target.value)}onBooleanSelectChange(key,e){e.stopPropagation();const value=e.target.value;if(value===""){if(this.effectiveDisabled)return;this.hasInteracted=!0;const next={...this.value};Reflect.deleteProperty(next,key),this.value=next,this.emit("lr-input",{value:this.effectiveValue});return}this.setFieldValue(key,value==="true")}renderControl(key,prop,fieldId,label,required,describedBy,errorMessage,effective){if(prop.type==="string"&&prop.enum&&prop.enum.length>0)return html`<lr-select
2
2
  id=${fieldId}
3
3
  .label=${label}
4
4
  .hint=${prop.description??""}
@@ -78,10 +78,11 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
78
78
  ${prop.description&&!isComposedSelect?html`<p part="description" id=${descId}>${prop.description}</p>`:nothing}
79
79
  ${hasError&&!isComposedSelect?html`<p part="error" id=${errId}>${this._errors[key]}</p>`:nothing}
80
80
  </div>
81
- `}render(){const props=this.schemaProperties,entries=Object.entries(props),missingRequiredKeys=this.missingRequiredKeys.filter(key=>this.touchedFields.has(key)),hostLabel=this.getAttribute("aria-label");return html`<div
81
+ `}render(){const props=this.schemaProperties,entries=Object.entries(props),missingRequiredKeys=this.missingRequiredKeys.filter(key=>this.touchedFields.has(key)),hostLabel=this.getAttribute("aria-label"),groupInvalid=this.hasInteracted&&!this.barredFromValidation&&!this.internals.validity.valid;return html`<div
82
82
  part="base"
83
83
  role="group"
84
84
  aria-label=${hostLabel??nothing}
85
+ aria-invalid=${groupInvalid?"true":"false"}
85
86
  >
86
87
  ${entries.length===0?html`<p part="empty">${this.localize("noData")}</p>`:entries.map(([key,prop],i)=>this.renderField(key,prop,i))}
87
88
  ${missingRequiredKeys.map(key=>html`<p
@@ -1 +1 @@
1
- export*from'./tool-param-form.class.js';import'../../forms/checkbox/checkbox.js';import'../../forms/combobox/option.js';import'../../forms/select/select.js';
1
+ export*from'./tool-param-form.class.js';import'../../forms/select/select.js';
@@ -1 +1 @@
1
- export*from"./tool-param-form.class.js";import{LyraToolParamForm}from"./tool-param-form.class.js";import{defineElement}from"../../../internal/prefix.js";import"../../forms/checkbox/checkbox.js";import"../../forms/combobox/option.js";import"../../forms/select/select.js";defineElement("tool-param-form",LyraToolParamForm);
1
+ export*from"./tool-param-form.class.js";import{LyraToolParamForm}from"./tool-param-form.class.js";import{defineElement}from"../../../internal/prefix.js";import"../../forms/select/select.js";defineElement("tool-param-form",LyraToolParamForm);
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-tool-result-dialog-overlay-color:var(--lr-color-overlay);--_lr-tool-result-dialog-maximized-inset:max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start));--_lr-tool-result-dialog-spin:var(--lr-transition-ambient);--_lr-tool-result-dialog-pending-color:var(--lr-color-text-quiet);--_lr-tool-result-dialog-pending-bg:transparent;--_lr-tool-result-dialog-running-color:var(--lr-color-brand);--_lr-tool-result-dialog-running-bg:var(--lr-color-brand-quiet);--_lr-tool-result-dialog-success-color:var(--lr-color-success);--_lr-tool-result-dialog-success-bg:var(--lr-color-success-quiet);--_lr-tool-result-dialog-error-color:var(--lr-color-danger);--_lr-tool-result-dialog-error-bg:var(--lr-color-danger-quiet);--_lr-tool-result-dialog-denied-color:var(--lr-color-warning);--_lr-tool-result-dialog-denied-bg:var(--lr-color-warning-quiet);z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));justify-content:center;align-items:center;padding-block-start:max(var(--lr-space-l), var(--lr-safe-area-top));padding-block-end:max(var(--lr-space-l), var(--lr-safe-area-bottom));padding-inline-start:max(var(--lr-space-l), var(--lr-safe-area-inline-start));padding-inline-end:max(var(--lr-space-l), var(--lr-safe-area-inline-end));display:none;position:fixed;inset:0}:host([open]){display:flex}[part=backdrop]{background:var(--lr-tool-result-dialog-overlay-color,var(--_lr-tool-result-dialog-overlay-color));position:absolute;inset:0}[part=panel]{inline-size:min(var(--lr-size-48rem), 100%);box-sizing:border-box;background:var(--lr-color-surface-overlay);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);max-block-size:100%;min-inline-size:0;box-shadow:var(--lr-shadow-xl);transition:inline-size var(--lr-transition-base), block-size var(--lr-transition-base);flex-direction:column;display:flex;position:relative;overflow:hidden}:host([maximized]) [part=panel]{inset:var(--lr-tool-result-dialog-maximized-inset,var(--_lr-tool-result-dialog-maximized-inset));max-block-size:none;inline-size:auto;position:fixed}[part=header]{align-items:center;gap:var(--lr-space-s);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-m) var(--lr-space-l);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=title]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;flex:auto;min-inline-size:0;max-inline-size:100%;display:flex}[part=tool-name]{min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=status]{align-items:center;gap:var(--lr-size-0-25rem);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border-radius:var(--lr-radius);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);white-space:normal;overflow-wrap:anywhere;color:var(--lr-tool-result-dialog-pending-color,var(--_lr-tool-result-dialog-pending-color));background:var(--lr-tool-result-dialog-pending-bg,var(--_lr-tool-result-dialog-pending-bg));flex:0 auto;display:inline-flex}[part=status] svg{inline-size:var(--lr-size-1em);block-size:var(--lr-size-1em);flex:none}[part=status] span{overflow-wrap:anywhere;min-inline-size:0}:host([status=running]) [part=status]{color:var(--lr-tool-result-dialog-running-color,var(--_lr-tool-result-dialog-running-color));background:var(--lr-tool-result-dialog-running-bg,var(--_lr-tool-result-dialog-running-bg))}:host([status=success]) [part=status]{color:var(--lr-tool-result-dialog-success-color,var(--_lr-tool-result-dialog-success-color));background:var(--lr-tool-result-dialog-success-bg,var(--_lr-tool-result-dialog-success-bg))}:host([status=error]) [part=status]{color:var(--lr-tool-result-dialog-error-color,var(--_lr-tool-result-dialog-error-color));background:var(--lr-tool-result-dialog-error-bg,var(--_lr-tool-result-dialog-error-bg))}:host([status=denied]) [part=status]{color:var(--lr-tool-result-dialog-denied-color,var(--_lr-tool-result-dialog-denied-color));background:var(--lr-tool-result-dialog-denied-bg,var(--_lr-tool-result-dialog-denied-bg))}:host([status=running]) [part=status] svg{animation:lr-tool-result-dialog-spin var(--lr-tool-result-dialog-spin,var(--_lr-tool-result-dialog-spin)) infinite}[part=duration]{max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);white-space:nowrap}[part=header-actions]{align-items:center;gap:var(--lr-space-xs);flex:none;max-inline-size:100%;margin-inline-start:auto;display:flex}[part=maximize-button],[part=close-button]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=maximize-button]:hover,[part=close-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=maximize-button]:active,[part=close-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=maximize-button]:focus-visible,[part=close-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{min-block-size:0;padding:var(--lr-space-l);flex:auto;overflow:auto}[part=footer]{justify-content:flex-end;align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-m) var(--lr-space-l);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=footer][hidden]{display:none}@keyframes lr-tool-result-dialog-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=panel]{transition:none!important}:host([status=running]) [part=status] svg{animation:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-tool-result-dialog-overlay-color:var(--lr-color-overlay);--_lr-tool-result-dialog-maximized-inset:max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start));--_lr-tool-result-dialog-spin:var(--lr-transition-ambient);--_lr-tool-result-dialog-pending-color:var(--lr-color-text-quiet);--_lr-tool-result-dialog-pending-bg:transparent;--_lr-tool-result-dialog-running-color:var(--lr-color-brand);--_lr-tool-result-dialog-running-bg:var(--lr-color-brand-quiet);--_lr-tool-result-dialog-success-color:var(--lr-color-success);--_lr-tool-result-dialog-success-bg:var(--lr-color-success-quiet);--_lr-tool-result-dialog-error-color:var(--lr-color-danger);--_lr-tool-result-dialog-error-bg:var(--lr-color-danger-quiet);--_lr-tool-result-dialog-denied-color:var(--lr-color-warning);--_lr-tool-result-dialog-denied-bg:var(--lr-color-warning-quiet);z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));justify-content:center;align-items:center;padding-block-start:max(var(--lr-space-l), var(--lr-safe-area-top));padding-block-end:max(var(--lr-space-l), var(--lr-safe-area-bottom));padding-inline-start:max(var(--lr-space-l), var(--lr-safe-area-inline-start));padding-inline-end:max(var(--lr-space-l), var(--lr-safe-area-inline-end));display:none;position:fixed;inset:0}:host([open]){display:flex}[part=backdrop]{background:var(--lr-tool-result-dialog-overlay-color,var(--_lr-tool-result-dialog-overlay-color));position:absolute;inset:0}[part=panel]{inline-size:min(var(--lr-size-48rem), 100%);box-sizing:border-box;background:var(--lr-color-surface-overlay);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);max-block-size:100%;min-inline-size:0;box-shadow:var(--lr-shadow-xl);transition:inline-size var(--lr-transition-base), block-size var(--lr-transition-base);flex-direction:column;display:flex;position:relative;overflow:hidden}:host([maximized]) [part=panel]{inset:var(--lr-tool-result-dialog-maximized-inset,var(--_lr-tool-result-dialog-maximized-inset));max-block-size:none;inline-size:auto;position:fixed}[part=header]{align-items:center;gap:var(--lr-space-s);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-m) var(--lr-space-l);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=title]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;flex:auto;min-inline-size:0;max-inline-size:100%;display:flex}[part=tool-name]{min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=status]{align-items:center;gap:var(--lr-size-0-25rem);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border-radius:var(--lr-radius);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);white-space:normal;overflow-wrap:anywhere;color:var(--lr-tool-result-dialog-pending-color,var(--_lr-tool-result-dialog-pending-color));background:var(--lr-tool-result-dialog-pending-bg,var(--_lr-tool-result-dialog-pending-bg));flex:0 auto;display:inline-flex}[part=status] svg{inline-size:var(--lr-size-1em);block-size:var(--lr-size-1em);flex:none}[part=status] span{overflow-wrap:anywhere;min-inline-size:0}:host([status=running]) [part=status]{color:var(--lr-tool-result-dialog-running-color,var(--_lr-tool-result-dialog-running-color));background:var(--lr-tool-result-dialog-running-bg,var(--_lr-tool-result-dialog-running-bg))}:host([status=success]) [part=status]{color:var(--lr-tool-result-dialog-success-color,var(--_lr-tool-result-dialog-success-color));background:var(--lr-tool-result-dialog-success-bg,var(--_lr-tool-result-dialog-success-bg))}:host([status=error]) [part=status]{color:var(--lr-tool-result-dialog-error-color,var(--_lr-tool-result-dialog-error-color));background:var(--lr-tool-result-dialog-error-bg,var(--_lr-tool-result-dialog-error-bg))}:host([status=denied]) [part=status]{color:var(--lr-tool-result-dialog-denied-color,var(--_lr-tool-result-dialog-denied-color));background:var(--lr-tool-result-dialog-denied-bg,var(--_lr-tool-result-dialog-denied-bg))}:host([status=running]) [part=status] svg{animation:lr-tool-result-dialog-spin var(--lr-tool-result-dialog-spin,var(--_lr-tool-result-dialog-spin)) infinite}[part=duration]{max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);white-space:nowrap}[part=header-actions]{align-items:center;gap:var(--lr-space-xs);flex:none;max-inline-size:100%;margin-inline-start:auto;display:flex}[part=maximize-button],[part=close-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=maximize-button]:hover,[part=close-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=maximize-button]:active,[part=close-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=maximize-button]:focus-visible,[part=close-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{min-block-size:0;padding:var(--lr-space-l);flex:auto;overflow:auto}[part=footer]{justify-content:flex-end;align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-m) var(--lr-space-l);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);flex-wrap:wrap;display:flex}[part=footer][hidden]{display:none}@keyframes lr-tool-result-dialog-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=panel]{transition:none!important}:host([status=running]) [part=status] svg{animation:none!important}}`;export{styles};
@@ -35,7 +35,8 @@ export interface ToolRenderContext{
35
35
  * the outcome via its `status` property while still keeping the renderer's own template mounted,
36
36
  * rather than discarding it for the `<lr-json-viewer>` fallback the way a *thrown* error does.
37
37
  * Calling this is entirely optional: a renderer that never calls it leaves `status` at its
38
- * default, `'success'`.
38
+ * default, `'success'`. Calls from a renderer that throws, or after a later render has started,
39
+ * are ignored.
39
40
  */
40
41
  reportStatus:(status:ToolResultStatus)=>void;}interface ToolRendererDefinitionBase{
41
42
  /** Facade/shape-based dispatch predicate -- see the module doc's dispatch order. */
@@ -67,4 +67,4 @@ copyable:boolean;
67
67
  * later renderer that stays quiet doesn't inherit a stale outcome from a previous one. Reuses the
68
68
  * same vocabulary as `<lr-tool-result-dialog>`'s own `status` property.
69
69
  */
70
- status:ToolResultStatus;private renderState;private generation;private resolvedLazy?;protected willUpdate(changed:PropertyValues):void;private resolve;private renderWith;private fail;render():TemplateResult;private renderFallback;}declare global{interface HTMLElementTagNameMap{'lr-tool-result-view':LyraToolResultView;}}
70
+ status:ToolResultStatus;private renderState;private generation;private renderAttempt?;private resolvedLazy?;protected willUpdate(changed:PropertyValues):void;private resolve;private renderWith;private fail;render():TemplateResult;private renderFallback;}declare global{interface HTMLElementTagNameMap{'lr-tool-result-view':LyraToolResultView;}}
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{findToolRenderer,getDefaultToolRendererRegistry,loadToolRenderer}from"./registry.js";import{styles}from"./tool-result-view.styles.js";import"../../overlays/skeleton/skeleton.class.js";import"../../utility/json-viewer/json-viewer.class.js";import"../../utility/copy-button/copy-button.class.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loading}from"../../../internal/default-strings.generated.js";const FALLBACK_STATE={kind:"fallback"};class LyraToolResultView extends LyraElement{constructor(){super(...arguments),this.toolName="",this._fallback="json",this.copyable=!1,this.status="success",this.renderState=FALLBACK_STATE,this.generation=0}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loading:LYRA_DEFAULT_loading}}static{this.ownedCollectionProperties=Object.freeze(["registry"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.properties={fallback:{reflect:!0,noAccessor:!0}}}get fallback(){return this._fallback}set fallback(next){const old=this._fallback;this._fallback=next==="text"?"text":"json",this.requestUpdate("fallback",old)}willUpdate(changed){super.willUpdate(changed),(!this.hasUpdated||changed.has("toolName")||changed.has("result")||changed.has("args")||changed.has("registry"))&&this.resolve()}async resolve(){const generation=++this.generation,registry=this.registry??getDefaultToolRendererRegistry();let def;try{def=findToolRenderer(this.toolName,this.result,registry)}catch(error){this.fail(error);return}if(!def){this.fail(new Error(`<lr-tool-result-view>: no renderer registered for tool "${this.toolName}"`));return}if(def.load){if(this.resolvedLazy?.def===def){this.renderWith(this.resolvedLazy.resolved);return}this.renderState={kind:"loading"};let resolved;try{resolved=await loadToolRenderer(def)}catch(error){if(generation!==this.generation)return;this.fail(error);return}if(generation!==this.generation)return;this.resolvedLazy={def,resolved},this.renderWith(resolved);return}this.renderWith(def)}renderWith(def){const generation=this.generation;this.status="success";const context={reportStatus:status=>{generation===this.generation&&(this.status=status)}};try{this.renderState={kind:"rendered",template:def.render(this.result,this.args,context)}}catch(error){this.fail(error)}}fail(error){this.emit("lr-render-error",{toolName:this.toolName,error}),this.status="success",this.renderState=FALLBACK_STATE}render(){const state2=this.renderState;return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{findToolRenderer,getDefaultToolRendererRegistry,loadToolRenderer}from"./registry.js";import{styles}from"./tool-result-view.styles.js";import"../../overlays/skeleton/skeleton.class.js";import"../../utility/json-viewer/json-viewer.class.js";import"../../utility/copy-button/copy-button.class.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loading}from"../../../internal/default-strings.generated.js";const FALLBACK_STATE={kind:"fallback"};class LyraToolResultView extends LyraElement{constructor(){super(...arguments),this.toolName="",this._fallback="json",this.copyable=!1,this.status="success",this.renderState=FALLBACK_STATE,this.generation=0}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loading:LYRA_DEFAULT_loading}}static{this.ownedCollectionProperties=Object.freeze(["registry"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.properties={fallback:{reflect:!0,noAccessor:!0}}}get fallback(){return this._fallback}set fallback(next){const old=this._fallback;this._fallback=next==="text"?"text":"json",this.requestUpdate("fallback",old)}willUpdate(changed){super.willUpdate(changed),(!this.hasUpdated||changed.has("toolName")||changed.has("result")||changed.has("args")||changed.has("registry"))&&this.resolve()}async resolve(){const generation=++this.generation;this.renderAttempt=void 0;const registry=this.registry??getDefaultToolRendererRegistry();let def;try{def=findToolRenderer(this.toolName,this.result,registry)}catch(error){this.fail(error);return}if(!def){this.fail(new Error(`<lr-tool-result-view>: no renderer registered for tool "${this.toolName}"`));return}if(def.load){if(this.resolvedLazy?.def===def){this.renderWith(this.resolvedLazy.resolved);return}this.renderState={kind:"loading"};let resolved;try{resolved=await loadToolRenderer(def)}catch(error){if(generation!==this.generation)return;this.fail(error);return}if(generation!==this.generation)return;this.resolvedLazy={def,resolved},this.renderWith(resolved);return}this.renderWith(def)}renderWith(def){const generation=this.generation,attempt=Symbol();this.renderAttempt=attempt,this.status="success";const context={reportStatus:status=>{generation!==this.generation||this.renderAttempt!==attempt||(this.status=status)}};try{const template=def.render(this.result,this.args,context);if(generation!==this.generation||this.renderAttempt!==attempt)return;this.renderState={kind:"rendered",template}}catch(error){if(generation!==this.generation||this.renderAttempt!==attempt)return;this.renderAttempt=void 0,this.fail(error)}}fail(error){this.emit("lr-render-error",{toolName:this.toolName,error}),this.status="success",this.renderState=FALLBACK_STATE}render(){const state2=this.renderState;return html`
2
2
  <div part="base" aria-busy=${state2.kind==="loading"?"true":"false"}>
3
3
  ${state2.kind==="loading"?html`
4
4
  <span class="sr-only">${this.localize("loading")}</span>
@@ -1,7 +1,7 @@
1
1
  import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import'../../forms/checkbox/checkbox.class.js';import'../../forms/switch/switch.class.js';
2
- /** One selectable agent tool. `id` is the stable, nonempty selection identity; empty ids are
3
- * omitted and when the input collection repeats an id, its first occurrence wins before
4
- * grouping, searching, counting, or rendering.
2
+ /** One selectable agent tool. `id` is the stable, nonempty selection identity; canonicalization
3
+ * inspects at most the first 10,000 input positions, omits empty ids, and lets the first valid
4
+ * admitted occurrence of a repeated id win before grouping, searching, counting, or rendering.
5
5
  * `category` groups the row; tools with no `category` (or an empty one) fall into the trailing
6
6
  * localized "Other" bucket. A literal caller category named "Other" remains a separate ordinary
7
7
  * category. */
@@ -59,7 +59,10 @@ export type ToolSelectDialogCloseReason='escape'|'backdrop'|'api'|(string&Record
59
59
  * `selectedToolIds` summary remain available without first loading every preceding tool. When more
60
60
  * matches remain, a localized limit notice and Load more button make the bounded projection
61
61
  * explicit and provide a keyboard-reachable continuation; search can independently narrow the
62
- * complete catalog. `tools`, selection counts, and emitted ids retain the caller's complete catalog.
62
+ * catalog. Both canonical projections inspect at most their first 10,000 input positions. Within
63
+ * that prefix, a repeated tool id's first valid admitted occurrence wins; selected ids retain
64
+ * their first nonblank occurrence. Selected ids absent from `tools` remain in that canonical
65
+ * selection and in `lr-change` proposals, preserving independently managed selection state.
63
66
  *
64
67
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
65
68
  * collection and reassign it after changes; mutating the assigned array does not update the view.
@@ -70,8 +73,9 @@ export type ToolSelectDialogCloseReason='escape'|'backdrop'|'api'|(string&Record
70
73
  * @slot footer - Optional action buttons (e.g. a "Done" button), rendered in a bottom row.
71
74
  * Changes already apply live via `lr-change`, so this is optional.
72
75
  * @event lr-change - A proposed enabled-tool selection or `useDefaults` toggle.
73
- * `detail: { selectedToolIds: string[], useDefaults: boolean }`. Cancelable; preventing it preserves
74
- * both properties and restores the built-in checkbox or switch to its current checked state.
76
+ * `detail: { selectedToolIds: string[], useDefaults: boolean }`, with `selectedToolIds` from the
77
+ * canonical first-10,000-input-position selection. Cancelable; preventing it preserves both
78
+ * properties and restores the built-in checkbox or switch to its current checked state.
75
79
  * @event lr-close - `detail: ToolSelectDialogCloseReason`. Fired exactly once per dismissal,
76
80
  * via Escape, an opted-in backdrop click, or a `close()` call.
77
81
  * @event focus - Re-dispatched when the internal search input receives focus.
@@ -114,11 +118,13 @@ open:boolean;
114
118
  /** Dismisses the dialog on a backdrop click. Opt-in and `false` by default, matching
115
119
  * `<lr-dialog>`, `<lr-drawer>`, and `<lr-lightbox>`. */
116
120
  lightDismiss:boolean;
117
- /** The full set of tools a consumer offers, across all categories. Empty ids are omitted and
118
- * duplicate ids use a deterministic first-wins projection. */
121
+ /** The full set of tools a consumer offers, across all categories. The first 10,000 input
122
+ * positions are inspected; empty ids are omitted and duplicate ids use a deterministic
123
+ * first-valid-admitted-occurrence projection. */
119
124
  tools:readonly ToolSelectDialogTool[];
120
- /** The currently-enabled tool ids. Empty ids are omitted and duplicates are treated as one
121
- * selection. */
125
+ /** The currently-enabled tool ids. The first 10,000 input positions form the canonicalization
126
+ * prefix; empty ids are omitted and duplicates are treated as one selection. Ids absent from
127
+ * `tools` remain independently selected. */
122
128
  selectedToolIds:readonly string[];
123
129
  /** Whether the conversation is using the default tool set (`true`) or a custom selection (`false`) — see the class doc for the exact interaction with `selectedToolIds`/per-tool editing. */
124
130
  useDefaults:boolean;
@@ -136,7 +142,7 @@ searchPlaceholder?:string;
136
142
  /** Native editing-assistance and virtual-keyboard hints forwarded to the search input. */
137
143
  autocomplete:string;spellcheck:boolean;autocapitalize:string;autoCorrect:string;inputMode:string;enterKeyHint:string;
138
144
  /** Overrides the built-in case-insensitive name/description substring match. */
139
- filter:ToolSelectFilter|null;private query;private hasFooterSlot;private renderedToolLimit;private overlay?;private readonly titleId;private readonly categoryIds;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;connectedCallback():void;disconnectedCallback():void;private activateOverlay;private onFooterSlotChange;
145
+ filter:ToolSelectFilter|null;private query;private hasFooterSlot;private renderedToolLimit;private overlay?;private canonicalToolsCache?;private canonicalSelectedToolIdsCache?;private canonicalSelectedToolIdsSource?;private readonly titleId;private readonly categoryIds;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;connectedCallback():void;disconnectedCallback():void;private activateOverlay;private onFooterSlotChange;
140
146
  /**
141
147
  * Close the dialog and return focus to whatever had it before the dialog
142
148
  * opened. `reason` is forwarded as the `lr-close` detail — built-in
@@ -149,7 +155,7 @@ close(reason?:ToolSelectDialogCloseReason):void;
149
155
  /** Opens the dialog. No-op when already open. */
150
156
  show():void;
151
157
  /** Closes the dialog through the same reasoned lifecycle as `close()`. */
152
- hide(reason?:ToolSelectDialogCloseReason):void;private onBackdropClick;private emitChange;private restoreChildChecked;private onSearchInput;private onSearchFocus;private onSearchBlur;private stopNestedControlEvent;private onDefaultsToggle;private onToolToggle;private categoryId;private get uniqueTools();private get uniqueSelectedToolIds();
158
+ hide(reason?:ToolSelectDialogCloseReason):void;private onBackdropClick;private emitChange;private restoreChildChecked;private onSearchInput;private onSearchFocus;private onSearchBlur;private stopNestedControlEvent;private onDefaultsToggle;private onToolToggle;private categoryId;private get canonicalTools();private get canonicalSelectedToolIds();
153
159
  /** Tools grouped by `category` (first-seen order), with an uncategorized
154
160
  * bucket always last, then filtered by the active search query -- a
155
161
  * category left with zero matches is dropped entirely rather than
@@ -1,9 +1,9 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{styles}from"./tool-select-dialog.styles.js";import"../../forms/checkbox/checkbox.class.js";import"../../forms/switch/switch.class.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_noMatchesQuery,LYRA_DEFAULT_otherCategory,LYRA_DEFAULT_searchToolsPlaceholder,LYRA_DEFAULT_selectTools,LYRA_DEFAULT_toolCount,LYRA_DEFAULT_toolSelectCustomizeHint,LYRA_DEFAULT_toolSelectLimit,LYRA_DEFAULT_toolSelectNoneAvailable,LYRA_DEFAULT_toolSelectSummary,LYRA_DEFAULT_useDefaultTools}from"../../../internal/default-strings.generated.js";const UNCATEGORIZED=null,MAX_RENDERED_TOOLS=200;function defaultFilter(tool,query,locale){const intlLocale=resolveIntlLocale(locale);return tool.name.toLocaleLowerCase(intlLocale).includes(query)||(tool.description??"").toLocaleLowerCase(intlLocale).includes(query)}class LyraToolSelectDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.tools=[],this.selectedToolIds=[],this.useDefaults=!1,this.accessibleLabel=null,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.filter=null,this.query="",this.hasFooterSlot=!1,this.renderedToolLimit=MAX_RENDERED_TOOLS,this.titleId=nextId("tool-select-dialog-title"),this.categoryIds=new Map,this.onFooterSlotChange=e=>{this.hasFooterSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onSearchInput=e=>{this.query=e.target.value,this.renderedToolLimit=MAX_RENDERED_TOOLS},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.stopNestedControlEvent=event=>{event.stopPropagation()},this.onDefaultsToggle=e=>{e.stopPropagation();const next={selectedToolIds:this.uniqueSelectedToolIds,useDefaults:e.detail.checked};if(this.emitChange(next)){this.useDefaults=next.useDefaults;return}this.restoreChildChecked(e,this.useDefaults)},this.onLoadMore=()=>{this.renderedToolLimit+=MAX_RENDERED_TOOLS,this.updateComplete.then(()=>{if(!this.isConnected||!this.open)return;(this.shadowRoot?.querySelector('[part="load-more"]')??this.shadowRoot?.querySelector('[part="body"]'))?.focus()})}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loadMore:LYRA_DEFAULT_loadMore,noMatchesQuery:LYRA_DEFAULT_noMatchesQuery,otherCategory:LYRA_DEFAULT_otherCategory,searchToolsPlaceholder:LYRA_DEFAULT_searchToolsPlaceholder,selectTools:LYRA_DEFAULT_selectTools,toolCount:LYRA_DEFAULT_toolCount,toolSelectCustomizeHint:LYRA_DEFAULT_toolSelectCustomizeHint,toolSelectLimit:LYRA_DEFAULT_toolSelectLimit,toolSelectNoneAvailable:LYRA_DEFAULT_toolSelectNoneAvailable,toolSelectSummary:LYRA_DEFAULT_toolSelectSummary,useDefaultTools:LYRA_DEFAULT_useDefaultTools}}static{this.ownedCollectionProperties=Object.freeze(["tools","selectedToolIds"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-change"])}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),(changed.has("tools")||changed.has("filter"))&&(this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0,this.query="",this.renderedToolLimit=MAX_RENDERED_TOOLS))}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0})}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}emitChange(next){return!this.emit("lr-change",{selectedToolIds:[...next.selectedToolIds],useDefaults:next.useDefaults},{cancelable:!0}).defaultPrevented}restoreChildChecked(event,checked){const control=event.currentTarget;control&&(control.checked=checked)}onToolToggle(tool,e){if(e.stopPropagation(),tool.disabled||this.useDefaults)return;const set=new Set(this.selectedToolIds);e.detail.checked?set.add(tool.id):set.delete(tool.id);const next={selectedToolIds:[...set],useDefaults:this.useDefaults};if(this.emitChange(next)){this.selectedToolIds=next.selectedToolIds;return}this.restoreChildChecked(e,this.selectedToolIds.includes(tool.id))}categoryId(category){let id=this.categoryIds.get(category);return id||(id=nextId("tool-select-dialog-category"),this.categoryIds.set(category,id)),id}get uniqueTools(){return firstByIdentity(Array.isArray(this.tools)?this.tools:[],tool=>tool.id)}get uniqueSelectedToolIds(){return[...new Set(this.selectedToolIds.filter(id=>typeof id=="string"&&id.trim().length>0))]}get projection(){const order=[],byCategory=new Map;for(const tool of this.uniqueTools){const category=tool.category?.trim()||UNCATEGORIZED;let bucket=byCategory.get(category);bucket||(bucket=[],byCategory.set(category,bucket),category!==UNCATEGORIZED&&order.push(category)),bucket.push(tool)}byCategory.has(UNCATEGORIZED)&&order.push(UNCATEGORIZED);const q=this.query.trim().toLocaleLowerCase(this.effectiveLocale),matches=q?tool=>this.filter?this.filter(tool,q):defaultFilter(tool,q,this.effectiveLocale):()=>!0,matchingGroups=order.map(category=>({category,tools:byCategory.get(category).filter(matches)})).filter(group=>group.tools.length>0),totalMatches=matchingGroups.reduce((total,group)=>total+group.tools.length,0),selectedIds=new Set(this.uniqueSelectedToolIds),chosenIds=new Set;for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;selectedIds.has(tool.id)&&chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}const groups=matchingGroups.map(group=>({category:group.category,tools:group.tools.filter(tool=>chosenIds.has(tool.id))})).filter(group=>group.tools.length>0),renderedCount=chosenIds.size;return{groups,renderedCount,totalMatches,truncated:renderedCount<totalMatches}}renderTool(tool){const rowDisabled=!!tool.disabled||this.useDefaults;return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId,srOnly}from"../../../internal/a11y.js";import{MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR,getOwnDataDescriptor}from"../../../internal/data-descriptors.js";import{styles}from"./tool-select-dialog.styles.js";import"../../forms/checkbox/checkbox.class.js";import"../../forms/switch/switch.class.js";import{trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{getNumberFormat,resolveIntlLocale}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_loadMore,LYRA_DEFAULT_noMatchesQuery,LYRA_DEFAULT_otherCategory,LYRA_DEFAULT_searchToolsPlaceholder,LYRA_DEFAULT_selectTools,LYRA_DEFAULT_toolCount,LYRA_DEFAULT_toolSelectCustomizeHint,LYRA_DEFAULT_toolSelectLimit,LYRA_DEFAULT_toolSelectNoneAvailable,LYRA_DEFAULT_toolSelectSummary,LYRA_DEFAULT_useDefaultTools}from"../../../internal/default-strings.generated.js";const UNCATEGORIZED=null,MAX_RENDERED_TOOLS=200,MAX_NORMALIZED_TOOL_ENTRIES=1e4,FUNCTION_TO_STRING=Function.prototype.toString,OBJECT_CONSTRUCTOR_SOURCE=FUNCTION_TO_STRING.call(Object);function isRuntimeArray(value){try{return Array.isArray(value)}catch{return!1}}function ownDataArrayValues(value,limit){if(!isRuntimeArray(value))return[];const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return[];const values=[];for(let index=0;index<Math.min(length.value,limit);index+=1){const entry=getOwnDataDescriptor(value,String(index));entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||values.push(entry.value)}return values}function isPlainToolRecord(value){if(value===null||typeof value!="object")return!1;try{const prototype=Object.getPrototypeOf(value);if(prototype===null)return!0;if(Object.getPrototypeOf(prototype)!==null)return!1;const constructor=getOwnDataDescriptor(prototype,"constructor");if(constructor===MISSING_OWN_DATA_DESCRIPTOR||constructor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof constructor.value!="function")return!1;const name=getOwnDataDescriptor(constructor.value,"name"),constructorPrototype=getOwnDataDescriptor(constructor.value,"prototype");return name!==MISSING_OWN_DATA_DESCRIPTOR&&name!==UNSAFE_OWN_DATA_DESCRIPTOR&&name.value==="Object"&&constructorPrototype!==MISSING_OWN_DATA_DESCRIPTOR&&constructorPrototype!==UNSAFE_OWN_DATA_DESCRIPTOR&&constructorPrototype.value===prototype&&FUNCTION_TO_STRING.call(constructor.value)===OBJECT_CONSTRUCTOR_SOURCE}catch{return!1}}function requiredToolString(record,key){const value=getOwnDataDescriptor(record,key);if(!(value===MISSING_OWN_DATA_DESCRIPTOR||value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"||value.value.trim().length===0))return value.value}function optionalToolString(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="string"?null:value.value}function optionalToolBoolean(record,key){const value=getOwnDataDescriptor(record,key);if(value!==MISSING_OWN_DATA_DESCRIPTOR)return value===UNSAFE_OWN_DATA_DESCRIPTOR||typeof value.value!="boolean"?null:value.value}function canonicalTool(value){if(!isPlainToolRecord(value))return;const id=requiredToolString(value,"id"),name=requiredToolString(value,"name"),description=optionalToolString(value,"description"),category=optionalToolString(value,"category"),icon=optionalToolString(value,"icon"),disabled=optionalToolBoolean(value,"disabled"),disabledReason=optionalToolString(value,"disabledReason");if(!(id===void 0||name===void 0||description===null||category===null||icon===null||disabled===null||disabledReason===null))return Object.freeze({id,name,...description===void 0?{}:{description},...category===void 0?{}:{category},...icon===void 0?{}:{icon},...disabled===void 0?{}:{disabled},...disabledReason===void 0?{}:{disabledReason}})}function projectCanonicalTools(input){const tools=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES)){const tool=canonicalTool(entry);!tool||seen.has(tool.id)||(seen.add(tool.id),tools.push(tool))}return Object.freeze(tools)}function projectCanonicalSelectedToolIds(input){const ids=[],seen=new Set;for(const entry of ownDataArrayValues(input,MAX_NORMALIZED_TOOL_ENTRIES))typeof entry!="string"||entry.trim().length===0||seen.has(entry)||(seen.add(entry),ids.push(entry));return Object.freeze(ids)}function defaultFilter(tool,query,locale){const intlLocale=resolveIntlLocale(locale);return tool.name.toLocaleLowerCase(intlLocale).includes(query)||(tool.description??"").toLocaleLowerCase(intlLocale).includes(query)}class LyraToolSelectDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.tools=[],this.selectedToolIds=[],this.useDefaults=!1,this.accessibleLabel=null,this.autocomplete="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.inputMode="",this.enterKeyHint="",this.filter=null,this.query="",this.hasFooterSlot=!1,this.renderedToolLimit=MAX_RENDERED_TOOLS,this.titleId=nextId("tool-select-dialog-title"),this.categoryIds=new Map,this.onFooterSlotChange=e=>{this.hasFooterSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onSearchInput=e=>{this.query=e.target.value,this.renderedToolLimit=MAX_RENDERED_TOOLS,e.stopPropagation()},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.stopNestedControlEvent=event=>{event.stopPropagation()},this.onDefaultsToggle=e=>{e.stopPropagation();const next={selectedToolIds:this.canonicalSelectedToolIds,useDefaults:e.detail.checked};if(this.emitChange(next)){this.useDefaults=next.useDefaults;return}this.restoreChildChecked(e,this.useDefaults)},this.onLoadMore=()=>{this.renderedToolLimit+=MAX_RENDERED_TOOLS,this.updateComplete.then(()=>{if(!this.isConnected||!this.open)return;(this.shadowRoot?.querySelector('[part="load-more"]')??this.shadowRoot?.querySelector('[part="body"]'))?.focus()})}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,loadMore:LYRA_DEFAULT_loadMore,noMatchesQuery:LYRA_DEFAULT_noMatchesQuery,otherCategory:LYRA_DEFAULT_otherCategory,searchToolsPlaceholder:LYRA_DEFAULT_searchToolsPlaceholder,selectTools:LYRA_DEFAULT_selectTools,toolCount:LYRA_DEFAULT_toolCount,toolSelectCustomizeHint:LYRA_DEFAULT_toolSelectCustomizeHint,toolSelectLimit:LYRA_DEFAULT_toolSelectLimit,toolSelectNoneAvailable:LYRA_DEFAULT_toolSelectNoneAvailable,toolSelectSummary:LYRA_DEFAULT_toolSelectSummary,useDefaultTools:LYRA_DEFAULT_useDefaultTools}}static{this.ownedCollectionProperties=Object.freeze(["tools","selectedToolIds"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-change"])}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),changed.has("tools")&&(this.canonicalToolsCache=void 0,this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("selectedToolIds")&&(this.canonicalSelectedToolIdsCache=void 0,this.canonicalSelectedToolIdsSource=void 0),changed.has("filter")&&(this.renderedToolLimit=MAX_RENDERED_TOOLS),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0,this.query="",this.renderedToolLimit=MAX_RENDERED_TOOLS))}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0})}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}emitChange(next){return!this.emit("lr-change",{selectedToolIds:[...next.selectedToolIds],useDefaults:next.useDefaults},{cancelable:!0}).defaultPrevented}restoreChildChecked(event,checked){const control=event.currentTarget;control&&(control.checked=checked)}onToolToggle(tool,e){if(e.stopPropagation(),tool.disabled||this.useDefaults)return;const selected=this.canonicalSelectedToolIds,index=selected.indexOf(tool.id),next={selectedToolIds:e.detail.checked?index>=0?selected:[...selected.slice(0,MAX_NORMALIZED_TOOL_ENTRIES-1),tool.id]:index<0?selected:[...selected.slice(0,index),...selected.slice(index+1)],useDefaults:this.useDefaults};if(this.emitChange(next)){this.selectedToolIds=next.selectedToolIds,this.canonicalSelectedToolIdsCache=next.selectedToolIds,this.canonicalSelectedToolIdsSource=this.selectedToolIds;return}this.restoreChildChecked(e,this.canonicalSelectedToolIds.includes(tool.id))}categoryId(category){let id=this.categoryIds.get(category);return id||(id=nextId("tool-select-dialog-category"),this.categoryIds.set(category,id)),id}get canonicalTools(){return this.canonicalToolsCache||(this.canonicalToolsCache=projectCanonicalTools(this.tools)),this.canonicalToolsCache}get canonicalSelectedToolIds(){const source=this.selectedToolIds;return(this.canonicalSelectedToolIdsCache===void 0||this.canonicalSelectedToolIdsSource!==source)&&(this.canonicalSelectedToolIdsCache=projectCanonicalSelectedToolIds(source),this.canonicalSelectedToolIdsSource=source),this.canonicalSelectedToolIdsCache}get projection(){const order=[],byCategory=new Map;for(const tool of this.canonicalTools){const category=tool.category?.trim()||UNCATEGORIZED;let bucket=byCategory.get(category);bucket||(bucket=[],byCategory.set(category,bucket),category!==UNCATEGORIZED&&order.push(category)),bucket.push(tool)}byCategory.has(UNCATEGORIZED)&&order.push(UNCATEGORIZED);const q=this.query.trim().toLocaleLowerCase(this.effectiveLocale),filter=typeof this.filter=="function"?this.filter:null,matches=q?tool=>{if(!filter)return defaultFilter(tool,q,this.effectiveLocale);try{return!!filter(tool,q)}catch{return!1}}:()=>!0,matchingGroups=order.map(category=>({category,tools:byCategory.get(category).filter(matches)})).filter(group=>group.tools.length>0),totalMatches=matchingGroups.reduce((total,group)=>total+group.tools.length,0),selectedIds=new Set(this.canonicalSelectedToolIds),chosenIds=new Set;for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;selectedIds.has(tool.id)&&chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}for(const group of matchingGroups){for(const tool of group.tools){if(chosenIds.size>=this.renderedToolLimit)break;chosenIds.add(tool.id)}if(chosenIds.size>=this.renderedToolLimit)break}const groups=matchingGroups.map(group=>({category:group.category,tools:group.tools.filter(tool=>chosenIds.has(tool.id))})).filter(group=>group.tools.length>0),renderedCount=chosenIds.size;return{groups,renderedCount,totalMatches,truncated:renderedCount<totalMatches}}renderTool(tool,selectedIds){const rowDisabled=!!tool.disabled||this.useDefaults;return html`
2
2
  <li part="tool-row" ?data-disabled=${rowDisabled}>
3
3
  <lr-checkbox
4
4
  part="tool-checkbox"
5
5
  value=${tool.id}
6
- ?checked=${this.selectedToolIds.includes(tool.id)}
6
+ ?checked=${selectedIds.has(tool.id)}
7
7
  ?disabled=${rowDisabled}
8
8
  @input=${this.stopNestedControlEvent}
9
9
  @lr-input=${this.stopNestedControlEvent}
@@ -17,7 +17,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
17
17
  ${tool.disabled&&tool.disabledReason?html`<span slot="hint" part="tool-disabled-reason">${tool.disabledReason}</span>`:nothing}
18
18
  </lr-checkbox>
19
19
  </li>
20
- `}renderCategory(group){const headingId=this.categoryId(group.category),formattedCount=getNumberFormat(this.effectiveLocale).format(group.tools.length);return html`
20
+ `}renderCategory(group,selectedIds){const headingId=this.categoryId(group.category),formattedCount=getNumberFormat(this.effectiveLocale).format(group.tools.length);return html`
21
21
  <div part="category" role="group" aria-labelledby=${headingId}>
22
22
  <h3 part="category-heading" id=${headingId}>
23
23
  ${group.category===UNCATEGORIZED?this.localize("otherCategory"):group.category}<span
@@ -29,10 +29,10 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
29
29
  >
30
30
  </h3>
31
31
  <ul part="category-list">
32
- ${group.tools.map(tool=>this.renderTool(tool))}
32
+ ${group.tools.map(tool=>this.renderTool(tool,selectedIds))}
33
33
  </ul>
34
34
  </div>
35
- `}render(){const projection=this.projection,groups=projection.groups,uniqueTools=this.uniqueTools,hasTools=uniqueTools.length>0,label=this.label===void 0?this.localize("selectTools"):this.label,searchPlaceholder=this.searchPlaceholder===void 0?this.localize("searchToolsPlaceholder"):this.searchPlaceholder,searchAccessibleName=searchPlaceholder.trim().length>0?searchPlaceholder:this.localize("searchToolsPlaceholder"),knownIds=new Set(uniqueTools.map(tool=>tool.id)),selectedCount=new Set(this.selectedToolIds.filter(id=>knownIds.has(id))).size,number=getNumberFormat(this.effectiveLocale),panelLabel=hostAriaLabel(this)===null&&this.accessibleLabel?this.accessibleLabel:null;return html`
35
+ `}render(){const projection=this.projection,groups=projection.groups,tools=this.canonicalTools,selectedToolIds=this.canonicalSelectedToolIds,selectedIds=new Set(selectedToolIds),hasTools=tools.length>0,label=this.label===void 0?this.localize("selectTools"):this.label,searchPlaceholder=this.searchPlaceholder===void 0?this.localize("searchToolsPlaceholder"):this.searchPlaceholder,searchAccessibleName=searchPlaceholder.trim().length>0?searchPlaceholder:this.localize("searchToolsPlaceholder"),knownIds=new Set(tools.map(tool=>tool.id)),selectedCount=selectedToolIds.filter(id=>knownIds.has(id)).length,number=getNumberFormat(this.effectiveLocale),panelLabel=!this.hasAttribute("aria-label")&&typeof this.accessibleLabel=="string"&&this.accessibleLabel.length>0?this.accessibleLabel:null;return html`
36
36
  <div part="backdrop" @click=${this.onBackdropClick}></div>
37
37
  <div
38
38
  part="panel"
@@ -84,7 +84,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
84
84
  <div part="body" tabindex="0">
85
85
  ${groups.length===0?html`<p part="empty">
86
86
  ${hasTools?this.localize("noMatchesQuery",void 0,{query:this.query}):this.localize("toolSelectNoneAvailable")}
87
- </p>`:groups.map(group=>this.renderCategory(group))}
87
+ </p>`:groups.map(group=>this.renderCategory(group,selectedIds))}
88
88
  ${projection.truncated?html`<div part="limit">
89
89
  <span>${this.localize("toolSelectLimit",void 0,{count:number.format(projection.renderedCount)})}</span>
90
90
  <button part="load-more" type="button" @click=${this.onLoadMore}>
@@ -89,8 +89,11 @@ export type ToolTimelineApprovalPending=ApprovalAction|null;export interface Lyr
89
89
  * belonging to an entry that isn't pending approval emits the timeline-owned, correlated
90
90
  * `lr-tool-activate`; raw child selection and disclosure lifecycle events are contained.
91
91
  *
92
- * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
93
- * collection and reassign it after changes; mutating the assigned array does not update the view.
92
+ * Public collection properties take bounded readonly snapshots. `entries` retains each source
93
+ * object and its opaque `args`/`result` payloads by identity only while a closed descriptor-safe
94
+ * projection copies the fields this component uses; later rendering never re-reads an admitted
95
+ * source record. Create a new collection and reassign it after changes; mutating the assigned
96
+ * array does not update the view.
94
97
  *
95
98
  * @customElement lr-tool-timeline
96
99
  * @event lr-tool-approval-decide - A pending entry's approval dialog was resolved.
@@ -144,7 +147,10 @@ export type ToolTimelineApprovalPending=ApprovalAction|null;export interface Lyr
144
147
  * @status stable
145
148
  * @since 4.1.0
146
149
  */
147
- export declare class LyraToolTimeline extends LyraElement<LyraToolTimelineEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
150
+ export declare class LyraToolTimeline extends LyraElement<LyraToolTimelineEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
151
+ /** Provider tool payloads can be opaque objects. Preserve row identity at the array boundary,
152
+ * then admit only one descriptor-safe canonical record for every rendering path. */
153
+ protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
148
154
  /** The calls to render, in any order — see the class doc's ordering note. Entries with empty
149
155
  * invocation ids are omitted; duplicate `(sourceKey, id)` identities normalize first-wins. */
150
156
  entries:readonly ToolTimelineEntry[];
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{eyeOffIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./tool-timeline.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{firstByIdentity}from"../collection-identity.js";import{LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_toolTimelineDetailsFor,LYRA_DEFAULT_toolTimelineLimit}from"../../../internal/default-strings.generated.js";function entrySourceKey(entry){return entry.sourceKey?.trim()?entry.sourceKey:void 0}function entryIdentity(entry){return JSON.stringify([entrySourceKey(entry)??null,entry.id])}function entryCorrelation(entry){const sourceKey=entrySourceKey(entry);return sourceKey===void 0?{invocationId:entry.id}:{invocationId:entry.id,sourceKey}}const MAX_RENDERED_ENTRIES=500,MAX_REDACTION_PATHS=100,MAX_REDACTION_DEPTH=64,MAX_REDACTION_NODES=1e4,TOOL_STATUSES=new Set(["pending","running","success","error","denied"]);function normalizeEntry(entry){const status=TOOL_STATUSES.has(entry.status)?entry.status:"pending";return status===entry.status?entry:{...entry,status}}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale||"en",{hour:"numeric",minute:"2-digit"}).format(date)}function redactBranch(value,currentPath,paths,placeholder,budget,depth){if(paths.includes(currentPath)||depth>=MAX_REDACTION_DEPTH||budget.nodes>=MAX_REDACTION_NODES)return placeholder;if(budget.nodes++,!paths.some(p=>p.startsWith(`${currentPath}.`)))return value;if(Array.isArray(value))try{const result=[];for(let index=0;index<value.length;index++){if(budget.nodes>=MAX_REDACTION_NODES)return placeholder;result.push(redactBranch(value[index],`${currentPath}.${index}`,paths,placeholder,budget,depth+1))}return result}catch{return placeholder}if(value!==null&&typeof value=="object"){const result=Object.create(null);try{for(const key in value)if(Object.prototype.propertyIsEnumerable.call(value,key)){if(budget.nodes>=MAX_REDACTION_NODES)return placeholder;result[key]=redactBranch(value[key],`${currentPath}.${key}`,paths,placeholder,budget,depth+1)}}catch{return placeholder}return result}return value}function redactField(value,root,paths,placeholder){if(paths.length===0)return value;if(paths.length>MAX_REDACTION_PATHS)return placeholder;const relevant=[];for(const path of paths){if(typeof path!="string"||path.length>4096)return placeholder;if(!(path!==root&&!path.startsWith(`${root}.`))){if(path.split(".").length-1>MAX_REDACTION_DEPTH)return placeholder;relevant.push(path)}}return relevant.length===0?value:redactBranch(value,root,relevant,placeholder,{nodes:0},0)}class LyraToolTimeline extends LyraElement{constructor(){super(...arguments),this.entries=[],this.approvalEditable=!0,this.approvalPending=null,this.openedEntryIds=new Set,this.projectedEntriesCache=[],this.projectionTruncated=!1,this.redactionCache=new WeakMap,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onDialogApprove=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented){this.approvalPending="approve",event.preventDefault();return}this.reviewingEntryKey=void 0},this.onDialogDeny=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!1},{cancelable:!0}).defaultPrevented){this.approvalPending="deny",event.preventDefault();return}this.reviewingEntryKey=void 0},this.onDialogClose=event=>{event.stopPropagation(),this.approvalPending=null,this.reviewingEntryKey=void 0}}static{this.defaultStrings={...super.defaultStrings,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied,envListValueHidden:LYRA_DEFAULT_envListValueHidden,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,toolTimelineDetailsFor:LYRA_DEFAULT_toolTimelineDetailsFor,toolTimelineLimit:LYRA_DEFAULT_toolTimelineLimit}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}get pendingApproval(){return this.approvalPending}willUpdate(changed){if(super.willUpdate(changed),!changed.has("entries"))return;this.rebuildProjection();const projected=this.projectedEntriesCache,identities=new Set(projected.map(entryIdentity));if(this.reviewingEntryKey!==void 0){const still=projected.find(entry=>entryIdentity(entry)===this.reviewingEntryKey);(!still||!(still.needsApproval&&still.approved===void 0))&&(this.reviewingEntryKey=void 0,this.approvalPending=null)}const opened=new Set([...this.openedEntryIds].filter(key=>identities.has(key)));opened.size!==this.openedEntryIds.size&&(this.openedEntryIds=opened)}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("toolTimelineLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_ENTRIES)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}rebuildProjection(){const entries=Array.isArray(this.entries)?this.entries:[],projected=[],projectedIndex=new Map,reservedKeys=new Set(this.openedEntryIds);this.reviewingEntryKey!==void 0&&reservedKeys.add(this.reviewingEntryKey);const displacedReserved=new Map,seen=new Set;for(const sourceEntry of firstByIdentity(entries,entry=>typeof entry?.id=="string"&&entry.id.trim().length>0?entryIdentity(entry):void 0)){const entry=normalizeEntry(sourceEntry),key=entryIdentity(entry);seen.has(key)||(seen.add(key),projected.length<MAX_RENDERED_ENTRIES?(projectedIndex.set(key,projected.length),projected.push(entry)):reservedKeys.has(key)&&displacedReserved.set(key,entry))}for(const[key,entry]of displacedReserved){if(projectedIndex.has(key))continue;let replacement=projected.length-1;for(;replacement>=0&&reservedKeys.has(entryIdentity(projected[replacement]));)replacement--;if(replacement<0)break;projectedIndex.delete(entryIdentity(projected[replacement])),projected[replacement]=entry,projectedIndex.set(key,replacement)}this.projectedEntriesCache=projected,this.projectionTruncated=seen.size>projected.length}get sortedEntries(){return this.projectedEntriesCache.map((entry,index)=>({entry,index})).sort((a,b)=>{const ak=Number.isFinite(a.entry.startedAt)?a.entry.startedAt:Number.POSITIVE_INFINITY,bk=Number.isFinite(b.entry.startedAt)?b.entry.startedAt:Number.POSITIVE_INFINITY;return ak!==bk?ak-bk:a.index-b.index}).map(({entry})=>entry)}get reviewingEntry(){return this.reviewingEntryKey===void 0?void 0:this.projectedEntriesCache.find(entry=>entryIdentity(entry)===this.reviewingEntryKey)}durationFor(entry){if(entry.startedAt==null||entry.endedAt==null)return;const diff=entry.endedAt-entry.startedAt;return Number.isFinite(diff)?diff:void 0}normalizedDate(ms){if(ms==null||!Number.isFinite(ms))return;const date=new Date(ms);return Number.isNaN(date.getTime())?void 0:date}onChipSelect(entry,event){if(event.stopPropagation(),entry.needsApproval&&entry.approved===void 0){this.reviewingEntryKey=entryIdentity(entry);return}this.emit("lr-tool-activate",entryCorrelation(entry))}finalizePendingApproval(){this.approvalPending!==null&&(this.approvalPending=null,this.reviewingEntryKey=void 0)}revertPendingApproval(){this.approvalPending!==null&&(this.approvalPending=null)}onDetailsToggle(entry,event){event.stopPropagation();const key=entryIdentity(entry),next=new Set(this.openedEntryIds);event.detail.open?next.add(key):next.delete(key),this.openedEntryIds=next}stopOwnedEvent(event){event.stopPropagation()}onRenderError(entry,event){event.stopPropagation(),this.emit("lr-tool-render-error",{...entryCorrelation(entry),...event.detail})}redactedEntry(entry,placeholder){const paths=Array.isArray(entry.redactedFields)?entry.redactedFields:[],cached=this.redactionCache.get(entry);if(cached&&cached.sourceArgs===entry.args&&cached.sourceResult===entry.result&&cached.sourceError===entry.error&&cached.sourcePaths===paths&&cached.placeholder===placeholder)return cached;const redacted={sourceArgs:entry.args,sourceResult:entry.result,sourceError:entry.error,sourcePaths:paths,placeholder,args:redactField(entry.args,"args",paths,placeholder),result:entry.result===void 0?void 0:redactField(entry.result,"result",paths,placeholder),error:entry.error===void 0?void 0:redactField(entry.error,"error",paths,placeholder)};return this.redactionCache.set(entry,redacted),redacted}openedDetailsTemplate(entry,placeholder){const redacted=this.redactedEntry(entry,placeholder);return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{eyeOffIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./tool-timeline.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_toolTimelineDetailsFor,LYRA_DEFAULT_toolTimelineLimit}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_ENTRIES=500,MAX_REDACTION_PATHS=100,MAX_REDACTION_DEPTH=64,MAX_REDACTION_NODES=1e4,TOOL_STATUSES=new Set(["pending","running","success","error","denied"]),EMPTY_REDACTION_PATHS=Object.freeze([]),TOO_MANY_REDACTION_PATHS=Object.freeze(new Array(MAX_REDACTION_PATHS+1));function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function projectedRedactionFields(value){try{if(!Array.isArray(value))return EMPTY_REDACTION_PATHS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return;if(lengthDescriptor.value>MAX_REDACTION_PATHS)return TOO_MANY_REDACTION_PATHS;const fields=[];for(let index=0;index<lengthDescriptor.value;index+=1){const field=descriptorValue(value,String(index));if(field===UNSAFE_OWN_DATA_DESCRIPTOR)return;fields.push(field===MISSING_OWN_DATA_DESCRIPTOR?void 0:field.value)}return Object.freeze(fields)}catch{return}}function projectToolTimelineEntry(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),argsDescriptor=descriptorValue(value,"args"),statusDescriptor=descriptorValue(value,"status"),resultDescriptor=descriptorValue(value,"result"),errorDescriptor=descriptorValue(value,"error"),sourceKeyDescriptor=descriptorValue(value,"sourceKey"),iconDescriptor=descriptorValue(value,"icon"),startedAtDescriptor=descriptorValue(value,"startedAt"),endedAtDescriptor=descriptorValue(value,"endedAt"),retryCountDescriptor=descriptorValue(value,"retryCount"),redactedFieldsDescriptor=descriptorValue(value,"redactedFields"),needsApprovalDescriptor=descriptorValue(value,"needsApproval"),approvedDescriptor=descriptorValue(value,"approved");if([idDescriptor,nameDescriptor,argsDescriptor,statusDescriptor,resultDescriptor,errorDescriptor,sourceKeyDescriptor,iconDescriptor,startedAtDescriptor,endedAtDescriptor,retryCountDescriptor,redactedFieldsDescriptor,needsApprovalDescriptor,approvedDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const valueOf=descriptor=>{if(!(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return descriptor.value},id=valueOf(idDescriptor);if(typeof id!="string"||id.trim().length===0)return;const redactedFieldsValue=valueOf(redactedFieldsDescriptor),redactedFields=redactedFieldsValue===void 0?EMPTY_REDACTION_PATHS:projectedRedactionFields(redactedFieldsValue);if(redactedFields===void 0)return;const name=valueOf(nameDescriptor),status=valueOf(statusDescriptor),result=valueOf(resultDescriptor),error=valueOf(errorDescriptor),sourceKey=valueOf(sourceKeyDescriptor),icon=valueOf(iconDescriptor),startedAt=valueOf(startedAtDescriptor),endedAt=valueOf(endedAtDescriptor),retryCount=valueOf(retryCountDescriptor),needsApproval=valueOf(needsApprovalDescriptor),approved=valueOf(approvedDescriptor);return Object.freeze({source:value,id,name:typeof name=="string"?name:"",args:valueOf(argsDescriptor),status:TOOL_STATUSES.has(status)?status:"pending",...result===void 0?{}:{result},...typeof error=="string"?{error}:{},...typeof sourceKey=="string"?{sourceKey}:{},...typeof icon=="string"?{icon}:{},...typeof startedAt=="number"?{startedAt}:{},...typeof endedAt=="number"?{endedAt}:{},...typeof retryCount=="number"?{retryCount}:{},redactedFields,...typeof needsApproval=="boolean"?{needsApproval}:{},...typeof approved=="boolean"?{approved}:{}})}catch{return}}function entrySourceKey(entry){return entry.sourceKey?.trim()?entry.sourceKey:void 0}function entryIdentity(entry){return JSON.stringify([entrySourceKey(entry)??null,entry.id])}function entryCorrelation(entry){const sourceKey=entrySourceKey(entry);return sourceKey===void 0?{invocationId:entry.id}:{invocationId:entry.id,sourceKey}}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale||"en",{hour:"numeric",minute:"2-digit"}).format(date)}function redactBranch(value,currentPath,paths,placeholder,budget,depth){if(paths.includes(currentPath)||depth>=MAX_REDACTION_DEPTH||budget.nodes>=MAX_REDACTION_NODES)return placeholder;if(budget.nodes++,!paths.some(p=>p.startsWith(`${currentPath}.`)))return value;if(Array.isArray(value))try{const result=[];for(let index=0;index<value.length;index++){if(budget.nodes>=MAX_REDACTION_NODES)return placeholder;result.push(redactBranch(value[index],`${currentPath}.${index}`,paths,placeholder,budget,depth+1))}return result}catch{return placeholder}if(value!==null&&typeof value=="object"){const result=Object.create(null);try{for(const key in value)if(Object.prototype.propertyIsEnumerable.call(value,key)){if(budget.nodes>=MAX_REDACTION_NODES)return placeholder;result[key]=redactBranch(value[key],`${currentPath}.${key}`,paths,placeholder,budget,depth+1)}}catch{return placeholder}return result}return value}function redactField(value,root,paths,placeholder){if(paths.length===0)return value;if(paths.length>MAX_REDACTION_PATHS)return placeholder;const relevant=[];for(const path of paths){if(typeof path!="string"||path.length>4096)return placeholder;if(!(path!==root&&!path.startsWith(`${root}.`))){if(path.split(".").length-1>MAX_REDACTION_DEPTH)return placeholder;relevant.push(path)}}return relevant.length===0?value:redactBranch(value,root,relevant,placeholder,{nodes:0},0)}class LyraToolTimeline extends LyraElement{constructor(){super(...arguments),this.entries=[],this.approvalEditable=!0,this.approvalPending=null,this.openedEntryIds=new Set,this.projectedEntriesCache=[],this.projectionTruncated=!1,this.redactionCache=new WeakMap,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onDialogApprove=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented){this.approvalPending="approve",event.preventDefault();return}this.reviewingEntryKey=void 0},this.onDialogDeny=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!1},{cancelable:!0}).defaultPrevented){this.approvalPending="deny",event.preventDefault();return}this.reviewingEntryKey=void 0},this.onDialogClose=event=>{event.stopPropagation(),this.approvalPending=null,this.reviewingEntryKey=void 0}}static{this.defaultStrings={...super.defaultStrings,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied,envListValueHidden:LYRA_DEFAULT_envListValueHidden,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,toolTimelineDetailsFor:LYRA_DEFAULT_toolTimelineDetailsFor,toolTimelineLimit:LYRA_DEFAULT_toolTimelineLimit}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.identityCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}get pendingApproval(){return this.approvalPending}willUpdate(changed){if(super.willUpdate(changed),!changed.has("entries"))return;this.rebuildProjection();const projected=this.projectedEntriesCache,identities=new Set(projected.map(entryIdentity));if(this.reviewingEntryKey!==void 0){const still=projected.find(entry=>entryIdentity(entry)===this.reviewingEntryKey);(!still||!(still.needsApproval&&still.approved===void 0))&&(this.reviewingEntryKey=void 0,this.approvalPending=null)}const opened=new Set([...this.openedEntryIds].filter(key=>identities.has(key)));opened.size!==this.openedEntryIds.size&&(this.openedEntryIds=opened)}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("toolTimelineLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_ENTRIES)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}rebuildProjection(){const entries=Array.isArray(this.entries)?this.entries:[],projected=[],projectedIndex=new Map,reservedKeys=new Set(this.openedEntryIds);this.reviewingEntryKey!==void 0&&reservedKeys.add(this.reviewingEntryKey);const displacedReserved=new Map,seen=new Set;for(const sourceEntry of entries){const entry=projectToolTimelineEntry(sourceEntry);if(!entry)continue;const key=entryIdentity(entry);seen.has(key)||(seen.add(key),projected.length<MAX_RENDERED_ENTRIES?(projectedIndex.set(key,projected.length),projected.push(entry)):reservedKeys.has(key)&&displacedReserved.set(key,entry))}for(const[key,entry]of displacedReserved){if(projectedIndex.has(key))continue;let replacement=projected.length-1;for(;replacement>=0&&reservedKeys.has(entryIdentity(projected[replacement]));)replacement--;if(replacement<0)break;projectedIndex.delete(entryIdentity(projected[replacement])),projected[replacement]=entry,projectedIndex.set(key,replacement)}this.projectedEntriesCache=projected,this.projectionTruncated=seen.size>projected.length}get sortedEntries(){return this.projectedEntriesCache.map((entry,index)=>({entry,index})).sort((a,b)=>{const ak=Number.isFinite(a.entry.startedAt)?a.entry.startedAt:Number.POSITIVE_INFINITY,bk=Number.isFinite(b.entry.startedAt)?b.entry.startedAt:Number.POSITIVE_INFINITY;return ak!==bk?ak-bk:a.index-b.index}).map(({entry})=>entry)}get reviewingEntry(){return this.reviewingEntryKey===void 0?void 0:this.projectedEntriesCache.find(entry=>entryIdentity(entry)===this.reviewingEntryKey)}durationFor(entry){if(entry.startedAt==null||entry.endedAt==null)return;const diff=entry.endedAt-entry.startedAt;return Number.isFinite(diff)?diff:void 0}normalizedDate(ms){if(ms==null||!Number.isFinite(ms))return;const date=new Date(ms);return Number.isNaN(date.getTime())?void 0:date}onChipSelect(entry,event){if(event.stopPropagation(),entry.needsApproval&&entry.approved===void 0){this.reviewingEntryKey=entryIdentity(entry);return}this.emit("lr-tool-activate",entryCorrelation(entry))}finalizePendingApproval(){this.approvalPending!==null&&(this.approvalPending=null,this.reviewingEntryKey=void 0)}revertPendingApproval(){this.approvalPending!==null&&(this.approvalPending=null)}onDetailsToggle(entry,event){event.stopPropagation();const key=entryIdentity(entry),next=new Set(this.openedEntryIds);event.detail.open?next.add(key):next.delete(key),this.openedEntryIds=next}stopOwnedEvent(event){event.stopPropagation()}onRenderError(entry,event){event.stopPropagation(),this.emit("lr-tool-render-error",{...entryCorrelation(entry),...event.detail})}redactedEntry(entry,placeholder){const paths=entry.redactedFields,cached=this.redactionCache.get(entry);if(cached&&cached.sourceArgs===entry.args&&cached.sourceResult===entry.result&&cached.sourceError===entry.error&&cached.sourcePaths===paths&&cached.placeholder===placeholder)return cached;const redacted={sourceArgs:entry.args,sourceResult:entry.result,sourceError:entry.error,sourcePaths:paths,placeholder,args:redactField(entry.args,"args",paths,placeholder),result:entry.result===void 0?void 0:redactField(entry.result,"result",paths,placeholder),error:entry.error===void 0?void 0:redactField(entry.error,"error",paths,placeholder)};return this.redactionCache.set(entry,redacted),redacted}openedDetailsTemplate(entry,placeholder){const redacted=this.redactedEntry(entry,placeholder);return html`
2
2
  <lr-tool-result-view
3
3
  part="entry-result"
4
4
  tool-name=${entry.name}
@@ -1 +1 @@
1
- import{finiteRange}from"../../../internal/numbers.js";function normalizeLyraSpanKind(value){switch(value){case"agent":case"llm":case"tool":case"retriever":case"embedding":case"other":return value;default:return"other"}}function normalizeLyraSpanStatus(value){switch(value){case"pending":case"running":case"success":case"error":case"denied":return value;default:return"pending"}}const MAX_RENDERED_LYRA_SPANS=500;function normalizeLyraSpans(values,activeSpanId=null){const normalized=[],normalizedById=new Map,source=Array.isArray(values)?values:[];for(const value of source){if(value===null||typeof value!="object")continue;const candidate=value;if(typeof candidate.id!="string"||candidate.id.length===0||normalizedById.has(candidate.id)||typeof candidate.startMs!="number"||!Number.isFinite(candidate.startMs)||candidate.endMs!=null&&(typeof candidate.endMs!="number"||!Number.isFinite(candidate.endMs)))continue;const startMs=finiteRange(candidate.startMs,0,0,Number.MAX_SAFE_INTEGER),endMs=candidate.endMs==null?void 0:finiteRange(candidate.endMs,startMs,startMs,Number.MAX_SAFE_INTEGER),span={...candidate,id:candidate.id,name:typeof candidate.name=="string"?candidate.name:"",kind:normalizeLyraSpanKind(candidate.kind),status:normalizeLyraSpanStatus(candidate.status),startMs,...endMs===void 0?{}:{endMs},...typeof candidate.parentId=="string"&&candidate.parentId.length>0?{parentId:candidate.parentId}:{}};(typeof candidate.parentId!="string"||candidate.parentId.length===0)&&Reflect.deleteProperty(span,"parentId"),normalized.push(span),normalizedById.set(span.id,span)}const chosenIds=new Set,visitedPath=new Set;let current=activeSpanId?normalizedById.get(activeSpanId):void 0;for(;current&&chosenIds.size<MAX_RENDERED_LYRA_SPANS&&!visitedPath.has(current.id);)chosenIds.add(current.id),visitedPath.add(current.id),current=current.parentId?normalizedById.get(current.parentId):void 0;for(const span of normalized){if(chosenIds.size>=MAX_RENDERED_LYRA_SPANS)break;chosenIds.add(span.id)}const spans=normalized.filter(span=>chosenIds.has(span.id)),byId=new Map(spans.map(span=>[span.id,span]));return{spans,byId,truncated:spans.length<normalized.length}}export{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpanKind,normalizeLyraSpanStatus,normalizeLyraSpans};
1
+ import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{finiteRange}from"../../../internal/numbers.js";function normalizeLyraSpanKind(value){switch(value){case"agent":case"llm":case"tool":case"retriever":case"embedding":case"other":return value;default:return"other"}}function normalizeLyraSpanStatus(value){switch(value){case"pending":case"running":case"success":case"error":case"denied":return value;default:return"pending"}}const MAX_RENDERED_LYRA_SPANS=500,SPAN_PROPERTIES=["id","parentId","name","kind","startMs","endMs","status","tokensIn","tokensOut","costText","detail"],normalizedSpanCache=new WeakMap;function descriptorValue(value,property){return getOwnDataDescriptor(value,property)}function projectLyraSpan(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const descriptors=new Map;for(const property of SPAN_PROPERTIES){const descriptor2=descriptorValue(value,property);if(descriptor2===UNSAFE_OWN_DATA_DESCRIPTOR)return;descriptors.set(property,descriptor2)}const descriptor=property=>{const valueDescriptor=descriptors.get(property);if(!(valueDescriptor===void 0||valueDescriptor===MISSING_OWN_DATA_DESCRIPTOR||valueDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return valueDescriptor.value},id=descriptor("id"),start=descriptor("startMs"),end=descriptor("endMs");if(typeof id!="string"||id.length===0||typeof start!="number"||!Number.isFinite(start)||end!=null&&(typeof end!="number"||!Number.isFinite(end)))return;const startMs=finiteRange(start,0,0,Number.MAX_SAFE_INTEGER),endMs=end==null?void 0:finiteRange(end,startMs,startMs,Number.MAX_SAFE_INTEGER),parentId=descriptor("parentId"),name=descriptor("name"),kind=descriptor("kind"),status=descriptor("status"),tokensIn=descriptor("tokensIn"),tokensOut=descriptor("tokensOut"),costText=descriptor("costText"),detail=descriptor("detail"),span={id,name:typeof name=="string"?name:"",kind:normalizeLyraSpanKind(kind),startMs,status:normalizeLyraSpanStatus(status),...endMs===void 0?{}:{endMs},...typeof parentId=="string"&&parentId.length>0?{parentId}:{},...typeof tokensIn=="number"?{tokensIn}:{},...typeof tokensOut=="number"?{tokensOut}:{},...typeof costText=="string"?{costText}:{},...typeof detail=="string"?{detail}:{}};return Object.freeze(span),Object.freeze({source:value,span})}catch{return}}function canonicalLyraSpans(values){let cacheable=!1;try{cacheable=Object.isFrozen(values)}catch{return[]}if(cacheable){const cached=normalizedSpanCache.get(values);if(cached)return cached}const canonical=[],seenIds=new Set;try{for(const value of values){const projected=projectLyraSpan(value);!projected||seenIds.has(projected.span.id)||(seenIds.add(projected.span.id),canonical.push(projected))}}catch{return[]}const result=Object.freeze(canonical);return cacheable&&normalizedSpanCache.set(values,result),result}function normalizeLyraSpans(values,activeSpanId=null){const source=Array.isArray(values)?values:[],normalized=canonicalLyraSpans(source).map(({span})=>span),normalizedById=new Map;for(const span of normalized)normalizedById.set(span.id,span);const chosenIds=new Set,visitedPath=new Set;let current=activeSpanId?normalizedById.get(activeSpanId):void 0;for(;current&&chosenIds.size<MAX_RENDERED_LYRA_SPANS&&!visitedPath.has(current.id);)chosenIds.add(current.id),visitedPath.add(current.id),current=current.parentId?normalizedById.get(current.parentId):void 0;for(const span of normalized){if(chosenIds.size>=MAX_RENDERED_LYRA_SPANS)break;chosenIds.add(span.id)}const spans=normalized.filter(span=>chosenIds.has(span.id)),byId=new Map(spans.map(span=>[span.id,span]));return{spans,byId,truncated:spans.length<normalized.length}}export{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpanKind,normalizeLyraSpanStatus,normalizeLyraSpans};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-trace-tree-bar-column:var(--lr-size-6rem);--_lr-trace-tree-tokens-in-column:0;--_lr-trace-tree-tokens-out-column:0;--_lr-trace-tree-cost-column:0;display:block;container-type:inline-size}:host([hide-bars]){--_lr-trace-tree-bar-column:0}:host([show-tokens]){--_lr-trace-tree-tokens-in-column:var(--lr-size-3-5rem);--_lr-trace-tree-tokens-out-column:var(--lr-size-3-5rem)}:host([show-cost]){--_lr-trace-tree-cost-column:var(--lr-size-3-5rem)}[part=base]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text);flex-direction:column;display:flex;overflow:auto hidden}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--_lr-trace-tree-bar-column) var(--lr-size-3-5rem) var(--_lr-trace-tree-tokens-in-column) var(--_lr-trace-tree-tokens-out-column) var(--_lr-trace-tree-cost-column);align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-xs);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);box-sizing:border-box;padding-inline-end:var(--lr-space-s);display:grid}[part=header]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}[part=row]{cursor:pointer}[part=row]:hover{background:var(--lr-color-surface-raised)}[part=row]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part=row][data-active]{background:var(--lr-trace-tree-row-active-bg,var(--lr-color-brand-quiet))}[part=row]:where([data-active]):hover{background:color-mix(in oklab, var(--lr-trace-tree-row-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=row]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=row][data-active] :is([part=detail],[part=duration],[part=tokens-in],[part=tokens-out],[part=cost]),[part=row][data-active] [part=status-text][data-status=pending]{color:var(--lr-trace-tree-row-active-color,var(--lr-color-text))}[part=row][data-active] [part=status-text][data-status=success]{color:color-mix(in srgb, var(--lr-trace-tree-success-color,var(--lr-color-success)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=error]{color:color-mix(in srgb, var(--lr-trace-tree-error-color,var(--lr-color-danger)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=denied]{color:color-mix(in srgb, var(--lr-trace-tree-denied-color,var(--lr-color-warning)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=running]{color:color-mix(in srgb, var(--lr-trace-tree-running-color,var(--lr-color-brand)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=toggle]{inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=toggle]:hover{background:var(--lr-trace-tree-toggle-hover-bg,var(--lr-color-brand-quiet))}[part=toggle]:active{background:color-mix(in oklab, var(--lr-trace-tree-toggle-hover-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=toggle]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=toggle][hidden]{visibility:hidden;display:inline-flex}[part=row][aria-expanded=true] [part=toggle] svg{transform:rotate(90deg)}:host(:dir(rtl)) [part=row]:not([aria-expanded=true]) [part=toggle] svg{transform:rotate(180deg)}[part=icon]{color:var(--lr-color-text-quiet);flex:none;display:inline-flex}[part=name]{min-inline-size:var(--lr-size-4rem);text-overflow:ellipsis;white-space:nowrap;padding-inline-start:min(calc(var(--_lr-trace-tree-depth,0) * var(--lr-space-l)), var(--lr-trace-tree-max-indent,var(--lr-size-12rem)));overflow:hidden}[part=detail]{color:var(--lr-color-text-quiet);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=status-text]{font-size:var(--lr-font-size-xs)}[part=status-text][data-status=success]{color:var(--lr-trace-tree-success-color,var(--lr-color-success))}[part=status-text][data-status=error]{color:var(--lr-trace-tree-error-color,var(--lr-color-danger))}[part=status-text][data-status=denied]{color:var(--lr-trace-tree-denied-color,var(--lr-color-warning))}[part=status-text][data-status=running]{color:var(--lr-trace-tree-running-color,var(--lr-color-brand))}[part=status-text][data-status=pending]{color:var(--lr-trace-tree-pending-color,var(--lr-color-text-quiet))}[part=bar-track]{inline-size:100%;block-size:var(--lr-size-0-5rem);background:var(--lr-trace-tree-bar-track-bg,var(--lr-color-surface-raised));border-radius:var(--lr-radius-xs);position:relative;overflow:hidden}[part=bar]{border-radius:inherit;position:absolute;inset-block:0}[part=bar][data-status=success]{background:var(--lr-trace-tree-success-color,var(--lr-color-success))}[part=bar][data-status=error]{background:var(--lr-trace-tree-error-color,var(--lr-color-danger))}[part=bar][data-status=denied]{background:var(--lr-trace-tree-denied-color,var(--lr-color-warning))}[part=bar][data-status=pending]{background:var(--lr-trace-tree-pending-color,var(--lr-color-text-quiet))}[part=bar][data-status=running]{background-image:repeating-linear-gradient(45deg, var(--lr-trace-tree-running-color,var(--lr-color-brand)) 0 var(--lr-size-6px), var(--lr-trace-tree-running-stripe-bg,var(--lr-color-brand-quiet)) var(--lr-size-6px) calc(var(--lr-size-6px) * 2));animation:lr-trace-tree-stripe var(--lr-transition-ambient) infinite;background-size:200% 100%}:host(:dir(rtl)) [part=bar][data-status=running]{animation-name:lr-trace-tree-stripe-rtl}@media (prefers-reduced-motion:reduce){[part=bar][data-status=running],:host(:dir(rtl)) [part=bar][data-status=running]{background-position:0 0;animation:none}}@keyframes lr-trace-tree-stripe{to{background-position:calc(var(--lr-size-24px) * -1) 0}}@keyframes lr-trace-tree-stripe-rtl{to{background-position:var(--lr-size-24px) 0}}[part=duration],[part=tokens-in],[part=tokens-out],[part=cost]{text-align:end;font-variant-numeric:tabular-nums;min-inline-size:0;color:var(--lr-color-text-quiet)}[part=empty]{padding:var(--lr-space-l)}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}@container (inline-size<=479.98px){[part=tokens-in],[part=tokens-out],[part=cost],[part=header] .col-tokens,[part=header] .col-cost{display:none}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--_lr-trace-tree-bar-column) var(--lr-size-3-5rem)}}@container (inline-size<=359.98px){[part=bar-track]{display:none}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--lr-size-3-5rem)}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-trace-tree-bar-column:var(--lr-size-6rem);--_lr-trace-tree-tokens-in-column:0;--_lr-trace-tree-tokens-out-column:0;--_lr-trace-tree-cost-column:0;display:block;container-type:inline-size}:host([hide-bars]){--_lr-trace-tree-bar-column:0}:host([show-tokens]){--_lr-trace-tree-tokens-in-column:var(--lr-size-3-5rem);--_lr-trace-tree-tokens-out-column:var(--lr-size-3-5rem)}:host([show-cost]){--_lr-trace-tree-cost-column:var(--lr-size-3-5rem)}[part=base]{font:inherit;color:var(--lr-color-text);flex-direction:column;display:flex;overflow:auto hidden}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--_lr-trace-tree-bar-column) var(--lr-size-3-5rem) var(--_lr-trace-tree-tokens-in-column) var(--_lr-trace-tree-tokens-out-column) var(--_lr-trace-tree-cost-column);align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-xs);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);box-sizing:border-box;padding-inline-end:var(--lr-space-s);display:grid}[part=header]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}[part=row]{cursor:pointer}[part=row]:hover{background:var(--lr-color-surface-raised)}[part=row]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part=row][data-active]{background:var(--lr-trace-tree-row-active-bg,var(--lr-color-brand-quiet))}[part=row]:where([data-active]):hover{background:color-mix(in oklab, var(--lr-trace-tree-row-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=row]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=row][data-active] :is([part=detail],[part=duration],[part=tokens-in],[part=tokens-out],[part=cost]),[part=row][data-active] [part=status-text][data-status=pending]{color:var(--lr-trace-tree-row-active-color,var(--lr-color-text))}[part=row][data-active] [part=status-text][data-status=success]{color:color-mix(in srgb, var(--lr-trace-tree-success-color,var(--lr-color-success)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=error]{color:color-mix(in srgb, var(--lr-trace-tree-error-color,var(--lr-color-danger)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=denied]{color:color-mix(in srgb, var(--lr-trace-tree-denied-color,var(--lr-color-warning)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=row][data-active] [part=status-text][data-status=running]{color:color-mix(in srgb, var(--lr-trace-tree-running-color,var(--lr-color-brand)) 75%, var(--lr-trace-tree-row-active-color,var(--lr-color-text)))}[part=toggle]{font:inherit;inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=toggle]:hover{background:var(--lr-trace-tree-toggle-hover-bg,var(--lr-color-brand-quiet))}[part=toggle]:active{background:color-mix(in oklab, var(--lr-trace-tree-toggle-hover-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=toggle]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=toggle][hidden]{visibility:hidden;display:inline-flex}[part=row][aria-expanded=true] [part=toggle] svg{transform:rotate(90deg)}:host(:dir(rtl)) [part=row]:not([aria-expanded=true]) [part=toggle] svg{transform:rotate(180deg)}[part=icon]{color:var(--lr-color-text-quiet);flex:none;display:inline-flex}[part=name]{min-inline-size:var(--lr-size-4rem);text-overflow:ellipsis;white-space:nowrap;padding-inline-start:min(calc(var(--_lr-trace-tree-depth,0) * var(--lr-space-l)), var(--lr-trace-tree-max-indent,var(--lr-size-12rem)));overflow:hidden}[part=detail]{color:var(--lr-color-text-quiet);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=status-text]{font-size:var(--lr-font-size-xs)}[part=status-text][data-status=success]{color:var(--lr-trace-tree-success-color,var(--lr-color-success))}[part=status-text][data-status=error]{color:var(--lr-trace-tree-error-color,var(--lr-color-danger))}[part=status-text][data-status=denied]{color:var(--lr-trace-tree-denied-color,var(--lr-color-warning))}[part=status-text][data-status=running]{color:var(--lr-trace-tree-running-color,var(--lr-color-brand))}[part=status-text][data-status=pending]{color:var(--lr-trace-tree-pending-color,var(--lr-color-text-quiet))}[part=bar-track]{inline-size:100%;block-size:var(--lr-size-0-5rem);background:var(--lr-trace-tree-bar-track-bg,var(--lr-color-surface-raised));border-radius:var(--lr-radius-xs);position:relative;overflow:hidden}[part=bar]{border-radius:inherit;position:absolute;inset-block:0}[part=bar][data-status=success]{background:var(--lr-trace-tree-success-color,var(--lr-color-success))}[part=bar][data-status=error]{background:var(--lr-trace-tree-error-color,var(--lr-color-danger))}[part=bar][data-status=denied]{background:var(--lr-trace-tree-denied-color,var(--lr-color-warning))}[part=bar][data-status=pending]{background:var(--lr-trace-tree-pending-color,var(--lr-color-text-quiet))}[part=bar][data-status=running]{background-image:repeating-linear-gradient(45deg, var(--lr-trace-tree-running-color,var(--lr-color-brand)) 0 var(--lr-size-6px), var(--lr-trace-tree-running-stripe-bg,var(--lr-color-brand-quiet)) var(--lr-size-6px) calc(var(--lr-size-6px) * 2));animation:lr-trace-tree-stripe var(--lr-transition-ambient) infinite;background-size:200% 100%}:host(:dir(rtl)) [part=bar][data-status=running]{animation-name:lr-trace-tree-stripe-rtl}@media (prefers-reduced-motion:reduce){[part=bar][data-status=running],:host(:dir(rtl)) [part=bar][data-status=running]{background-position:0 0;animation:none}}@keyframes lr-trace-tree-stripe{to{background-position:calc(var(--lr-size-24px) * -1) 0}}@keyframes lr-trace-tree-stripe-rtl{to{background-position:var(--lr-size-24px) 0}}[part=duration],[part=tokens-in],[part=tokens-out],[part=cost]{text-align:end;font-variant-numeric:tabular-nums;min-inline-size:0;color:var(--lr-color-text-quiet)}[part=empty]{padding:var(--lr-space-l)}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}@container (inline-size<=479.98px){[part=tokens-in],[part=tokens-out],[part=cost],[part=header] .col-tokens,[part=header] .col-cost{display:none}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--_lr-trace-tree-bar-column) var(--lr-size-3-5rem)}}@container (inline-size<=359.98px){[part=bar-track]{display:none}[part=header],[part=row]{grid-template-columns:var(--lr-icon-button-size) var(--lr-size-1em) minmax(var(--lr-size-4rem), 1fr) minmax(0, .75fr) max-content var(--lr-size-3-5rem)}}`;export{styles};
@@ -49,8 +49,9 @@ export interface LyraBoxPlotPointDetail{datasetIndex:number;index:number;label:s
49
49
  * @cssprop [--lr-chart-legend-item-hover-bg=var(--lr-color-brand-quiet)] - Legend-item hover background.
50
50
  * @cssprop --lr-chart-legend-item-active-bg - Legend-item pressed background.
51
51
  * @cssprop [--lr-chart-canvas-hover-outline-width=var(--lr-border-width-thin)] - Width of the
52
- * `[part='canvas']` hover-state outline (its color is `--lr-chart-grid-color`). Same token and
53
- * default as `<lr-chart>`.
52
+ * `[part='canvas']` hover-state outline.
53
+ * @cssprop [--lr-chart-canvas-hover-outline-color=var(--lr-chart-grid-color)] - Color of the
54
+ * `[part='canvas']` hover-state outline. Same token and default as `<lr-chart>`.
54
55
  * @cssprop [--lr-chart-pattern-step=var(--lr-space-2xs)] - Tile size of the texture painted on
55
56
  * `[part='legend-swatch']` while `forced-colors: active` matches, where the eight-color series
56
57
  * ramp collapses onto a repeating system-color cycle and the stripe/crosshatch pattern becomes
@@ -103,7 +104,7 @@ formatter?:LyraChartFormatter;
103
104
  */
104
105
  private loading;private loadFailed;private visible;
105
106
  /** Position of the keyboard cursor within `boxDatums()`; clamped on every read, never persisted. */
106
- private keyboardDatumIndex;private keyboardDatumAnnouncement;private intersectionObserver?;private intersectionGeneration;private reducedMotionQuery?;private reducedMotionWindow?;private canvasEl?;private chart?;private chartJsModule?;private loadGeneration;private descriptionId;private lastDrawnDirection?;private lastDrawnLocale?;private politeAnnouncementSink?;private assertiveAnnouncementSink?;private lastDataTruncationAnnouncement;
107
+ private keyboardDatumIndex;private keyboardDatumAnnouncement;private intersectionObserver?;private intersectionGeneration;private reducedMotionQuery?;private reducedMotionWindow?;private canvasEl?;private chart?;private stopAnnotationRegistrationWatch?;private chartJsModule?;private loadGeneration;private descriptionId;private lastDrawnDirection?;private lastDrawnLocale?;private politeAnnouncementSink?;private assertiveAnnouncementSink?;private lastDataTruncationAnnouncement;
107
108
  /** Gates the sampling notice so an initially supplied large dataset is described, not announced. */
108
109
  private isMounting;connectedCallback():void;private onBoxPlotPluginLoaded;disconnectedCallback():void;adoptedCallback():void;private readonly onReducedMotionChange;private armReducedMotionWatcher;private disarmReducedMotionWatcher;private syncAnnouncementSinks;private releaseAnnouncementSinks;private get ownerWindow();private effectiveHiddenDatasetIndexes;
109
110
  /** Synchronizes the public controlled visibility snapshot with Chart.js after data replacement. */
@@ -131,6 +132,12 @@ private seriesColor;
131
132
  * cycle the way a Chart.js line dataset does.
132
133
  */
133
134
  private forcedColorFill;private styleColor;private buildConfig;private draw;private drawIfVisible;
135
+ /**
136
+ * A sibling `<lr-chart>` registering `chartjs-plugin-annotation` globally leaves this instance
137
+ * without the plugin's per-chart state (created only in `beforeInit`), so the plugin would throw
138
+ * on the next update. Rebuild from the current configuration instead.
139
+ */
140
+ private rebuildAfterAnnotationRegistration;
134
141
  /** Re-reads canvas theme custom properties after an out-of-band ancestor theme change. */
135
142
  refreshTheme():void;private formatValue;
136
143
  /** Returns a spreadsheet-safe CSV snapshot or the current canvas PNG data URL. */