@aceshooting/lyra-ui 13.0.1 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +199 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +18 -13
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{styles}from"./message-feedback.styles.js";import{LYRA_DEFAULT_feedbackCommentLabel,LYRA_DEFAULT_feedbackCommentPlaceholder,LYRA_DEFAULT_feedbackNegative,LYRA_DEFAULT_feedbackPositive,LYRA_DEFAULT_feedbackReasonsLabel,LYRA_DEFAULT_feedbackSubmit,LYRA_DEFAULT_feedbackSubmitted}from"../../../internal/default-strings.generated.js";function thumbIcon(direction,filled){return svg`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{autocorrectConverter,declaredDefaultConverter,normalizeAutocorrect,omittedEmptyStringConverter,trueDefaultSpellcheckConverter}from"../../../internal/converters.js";import{styles}from"./message-feedback.styles.js";import{LYRA_DEFAULT_feedbackCommentLabel,LYRA_DEFAULT_feedbackCommentPlaceholder,LYRA_DEFAULT_feedbackNegative,LYRA_DEFAULT_feedbackPositive,LYRA_DEFAULT_feedbackReasonsLabel,LYRA_DEFAULT_feedbackSubmit,LYRA_DEFAULT_feedbackSubmitted}from"../../../internal/default-strings.generated.js";function thumbIcon(direction,filled){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -11,7 +11,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
11
11
  aria-hidden="true"
12
12
  focusable="false"
13
13
  ><path d=${direction==="up"?"M7 11v9a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-8a1 1 0 0 1 1-1h3Z":"M17 13V4a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v8h4Z"}></path><path d=${direction==="up"?"M7 11l3.5-7A2 2 0 0 1 12 3a1 1 0 0 1 1 1v6h4.5a2 2 0 0 1 2 2.3l-1.2 7A2 2 0 0 1 16.3 21H9a2 2 0 0 1-2-2v-8Z":"M17 13l-3.5 7A2 2 0 0 1 12 21a1 1 0 0 1-1-1v-6H6.5a2 2 0 0 1-2-2.3l1.2-7A2 2 0 0 1 7.7 3H15a2 2 0 0 1 2 2v8Z"}></path></svg>
14
- `}class LyraMessageFeedback extends LyraElement{constructor(){super(...arguments),this.rating=null,this.detailFor="down",this.disabled=!1,this.pending=!1,this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="",this.submitGeneration=0,this.panelId=nextId("message-feedback-panel"),this.upToolbarAction=this.createToolbarAction("up"),this.downToolbarAction=this.createToolbarAction("down"),this.onPanelKeyDown=e=>{e.key==="Escape"&&(e.stopPropagation(),this.closePanel())},this.onCommentInput=e=>{this.commentDraft=e.target.value},this.onCommentFocus=()=>{this.emit("focus",null)},this.onCommentBlur=()=>{this.emit("blur",null)},this.onSubmit=()=>{if(this.disabled||this.pending||!this.rating||!this.panelOpen)return;const validReasonIds=new Set(this.detailReasons.map(reason=>reason.id));this.requestSubmission({rating:this.rating,reasonIds:this.selectedReasonIds.filter(id=>validReasonIds.has(id)),comment:this.detailCommentable?this.commentDraft.trim():""},this.rating,!0)}}static{this.defaultStrings={...super.defaultStrings,feedbackCommentLabel:LYRA_DEFAULT_feedbackCommentLabel,feedbackCommentPlaceholder:LYRA_DEFAULT_feedbackCommentPlaceholder,feedbackNegative:LYRA_DEFAULT_feedbackNegative,feedbackPositive:LYRA_DEFAULT_feedbackPositive,feedbackReasonsLabel:LYRA_DEFAULT_feedbackReasonsLabel,feedbackSubmit:LYRA_DEFAULT_feedbackSubmit,feedbackSubmitted:LYRA_DEFAULT_feedbackSubmitted}}static{this.ownedCollectionProperties=Object.freeze(["detail"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-feedback-submit"])}createToolbarAction(direction){const host=this,button=()=>direction==="up"?host.upButtonEl:host.downButtonEl;return{id:direction,get disabled(){return!button()||button().disabled},focus(options){button()?.focus(options)},setTabIndex(tabIndex){const target=button();target&&(target.tabIndex=tabIndex)},matchesEventPath(path){const target=button();return target!==void 0&&path.includes(target)}}}getToolbarActions(){return[this.upToolbarAction,this.downToolbarAction]}focus(options){(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.focus(options)}blur(){this.upButtonEl?.blur(),this.downButtonEl?.blur()}click(){this.disabled||this.pending||(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.click()}get detailReasons(){const seen=new Set;return(this.detail?.reasons??[]).filter(reason=>!reason||typeof reason.id!="string"||reason.id.trim().length===0||seen.has(reason.id)?!1:(seen.add(reason.id),!0))}get detailCommentable(){return this.detail?.commentable===!0}get hasDetailContent(){return this.detailReasons.length>0||this.detailCommentable}detailApplies(direction){return this.detailFor==="both"||this.detailFor===direction}willUpdate(changed){if(super.willUpdate(changed),changed.has("rating")){const internal=this.pendingInternalRating?.rating===this.rating;this.pendingInternalRating=void 0,internal||(this.pendingSubmission=void 0,this.pending=!1,this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="")}if(changed.has("detail")){const validIds=new Set(this.detailReasons.map(reason=>reason.id));this.selectedReasonIds=this.selectedReasonIds.filter(id=>validIds.has(id)),this.detailCommentable||(this.commentDraft="")}this.panelOpen&&(!this.rating||!this.detailApplies(this.rating)||!this.hasDetailContent)&&(this.pending=!1,this.panelOpen=!1,changed.has("detailFor")&&(this.selectedReasonIds=[],this.commentDraft=""))}updated(changed){super.updated(changed),(changed.has("disabled")||changed.has("pending"))&&this.emit("lr-toolbar-actions-change")}setRatingFromInteraction(rating){this.pendingInternalRating={rating},this.rating=rating}activateThumb(next){if(this.disabled||this.pending)return;const previousRating=this.rating;if(this.rating===next){if(this.panelOpen){this.setRatingFromInteraction(null),this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="",this.emit("lr-feedback-change",{rating:null}),this.requestSubmission({rating:null,reasonIds:[],comment:""},previousRating,!0);return}if(this.detailApplies(next)&&this.hasDetailContent){this.panelOpen=!0;return}this.setRatingFromInteraction(null),this.emit("lr-feedback-change",{rating:null}),this.requestSubmission({rating:null,reasonIds:[],comment:""},previousRating,!1);return}this.selectedReasonIds=[],this.commentDraft="",this.setRatingFromInteraction(next),this.panelOpen=this.detailApplies(next)&&this.hasDetailContent,this.emit("lr-feedback-change",{rating:next}),this.panelOpen||this.requestSubmission({rating:next,reasonIds:[],comment:""},previousRating,!1)}focusActiveThumb(){(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.focus()}closePanel(){this.panelOpen&&(this.panelOpen=!1,this.focusActiveThumb())}toggleReason(id){this.disabled||this.pending||(this.selectedReasonIds=this.selectedReasonIds.includes(id)?this.selectedReasonIds.filter(r=>r!==id):[...this.selectedReasonIds,id])}completeSubmission(){this.pending=!1,this.panelOpen=!1,this.liveRegion?.announce(this.localize("feedbackSubmitted"),{force:!0}),this.updateComplete.then(()=>{this.isConnected&&!this.pending&&this.focusActiveThumb()})}finalizePendingSubmit(){this.pendingSubmission&&(this.pendingSubmission=void 0,this.completeSubmission())}revertPendingSubmit(){const transaction=this.pendingSubmission;transaction&&(this.pendingSubmission=void 0,this.pending=!1,this.setRatingFromInteraction(transaction.previousRating),this.panelOpen=transaction.panelWasOpen,this.updateComplete.then(()=>{!this.isConnected||this.pending||(this.panelOpen?this.submitButtonEl?.focus():this.focusActiveThumb())}))}requestSubmission(detail,previousRating,panelWasOpen){const token=++this.submitGeneration;this.pendingSubmission={token,previousRating,panelWasOpen},this.pending=!0;const event=this.emit("lr-feedback-submit",detail,{cancelable:!0});this.pendingSubmission?.token===token&&(event.defaultPrevented||this.finalizePendingSubmit())}renderThumb(direction){const pressed=this.rating===direction,canExpand=this.detailApplies(direction)&&this.hasDetailContent;return html`
14
+ `}const MAX_PROJECTED_FEEDBACK_REASONS=1e4,EMPTY_FEEDBACK_DETAIL_PROJECTION=Object.freeze({reasons:Object.freeze([]),commentable:!1});function isObjectValue(value){return value!==null&&(typeof value=="object"||typeof value=="function")}function isArrayValue(value){try{return Array.isArray(value)}catch{return!1}}function projectFeedbackDetail(detail){if(!isObjectValue(detail))return EMPTY_FEEDBACK_DETAIL_PROJECTION;const reasonsDescriptor=getOwnDataDescriptor(detail,"reasons"),commentableDescriptor=getOwnDataDescriptor(detail,"commentable"),commentable=commentableDescriptor!==MISSING_OWN_DATA_DESCRIPTOR&&commentableDescriptor!==UNSAFE_OWN_DATA_DESCRIPTOR&&commentableDescriptor.value===!0,reasonsValue=reasonsDescriptor!==MISSING_OWN_DATA_DESCRIPTOR&&reasonsDescriptor!==UNSAFE_OWN_DATA_DESCRIPTOR?reasonsDescriptor.value:void 0;if(!isArrayValue(reasonsValue))return commentable?Object.freeze({reasons:Object.freeze([]),commentable}):EMPTY_FEEDBACK_DETAIL_PROJECTION;const lengthDescriptor=getOwnDataDescriptor(reasonsValue,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return commentable?Object.freeze({reasons:Object.freeze([]),commentable}):EMPTY_FEEDBACK_DETAIL_PROJECTION;const reasons=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_FEEDBACK_REASONS);for(let index=0;index<length;index+=1){const rowDescriptor=getOwnDataDescriptor(reasonsValue,String(index));if(rowDescriptor===MISSING_OWN_DATA_DESCRIPTOR||rowDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!isObjectValue(rowDescriptor.value))continue;const row=rowDescriptor.value,idDescriptor=getOwnDataDescriptor(row,"id"),labelDescriptor=getOwnDataDescriptor(row,"label");if(idDescriptor===MISSING_OWN_DATA_DESCRIPTOR||idDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||labelDescriptor===MISSING_OWN_DATA_DESCRIPTOR||labelDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof idDescriptor.value!="string"||typeof labelDescriptor.value!="string")continue;const id=idDescriptor.value,label=labelDescriptor.value;id.trim().length===0||seen.has(id)||(seen.add(id),reasons.push(Object.freeze({id,label})))}return Object.freeze({reasons:Object.freeze(reasons),commentable})}class LyraMessageFeedback extends LyraElement{constructor(){super(...arguments),this.rating=null,this.detailFor="down",this.disabled=!1,this.pending=!1,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="",this.detailProjectionSource=Symbol("unprojected-feedback-detail"),this.detailProjection=EMPTY_FEEDBACK_DETAIL_PROJECTION,this.submissionSequence=0,this.submissionCount=0,this.legacyNoArgumentSettlementInvalidated=!1,this.lifecycleGeneration=0,this.focusGeneration=0,this.settingPending=!1,this.panelId=nextId("message-feedback-panel"),this.upToolbarAction=this.createToolbarAction("up"),this.downToolbarAction=this.createToolbarAction("down"),this.onPanelKeyDown=e=>{e.key==="Escape"&&(e.stopPropagation(),this.closePanel())},this.onCommentInput=e=>{this.commentDraft=e.target.value},this.onCommentFocus=()=>{this.emit("focus",null)},this.onCommentBlur=()=>{this.emit("blur",null)},this.onSubmit=()=>{if(this.disabled||this.pending||!this.rating||!this.panelOpen)return;const validReasonIds=new Set(this.detailReasons.map(reason=>reason.id));this.requestSubmission({rating:this.rating,reasonIds:this.selectedReasonIds.filter(id=>validReasonIds.has(id)),comment:this.detailCommentable?this.commentDraft.trim():""},this.rating,!0)}}static{this.defaultStrings={...super.defaultStrings,feedbackCommentLabel:LYRA_DEFAULT_feedbackCommentLabel,feedbackCommentPlaceholder:LYRA_DEFAULT_feedbackCommentPlaceholder,feedbackNegative:LYRA_DEFAULT_feedbackNegative,feedbackPositive:LYRA_DEFAULT_feedbackPositive,feedbackReasonsLabel:LYRA_DEFAULT_feedbackReasonsLabel,feedbackSubmit:LYRA_DEFAULT_feedbackSubmit,feedbackSubmitted:LYRA_DEFAULT_feedbackSubmitted}}static{this.ownedCollectionProperties=Object.freeze(["detail"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-feedback-submit"])}get autocorrect(){return this.autocorrectValue}set autocorrect(next){const previous=this.autocorrectValue;this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate("autocorrect",previous)}createToolbarAction(direction){const host=this,button=()=>direction==="up"?host.upButtonEl:host.downButtonEl;let leasedButton,authoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1;const releaseTabIndex=()=>{const target=leasedButton;target&&target.getAttribute("tabindex")===lastManagedTabIndex&&(authoredTabIndex===null?target.removeAttribute("tabindex"):target.setAttribute("tabindex",authoredTabIndex)),leasedButton=void 0,authoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1};return{id:direction,get disabled(){return!button()||button().disabled},focus(options){button()?.focus(options)},setTabIndex(tabIndex){const target=button();if(!target){releaseTabIndex();return}if(leasedButton!==target&&(releaseTabIndex(),leasedButton=target,authoredTabIndex=target.getAttribute("tabindex")),consumerOwnsTabIndex||lastManagedTabIndex!==null&&target.getAttribute("tabindex")!==lastManagedTabIndex){consumerOwnsTabIndex=!0;return}target.tabIndex=tabIndex,lastManagedTabIndex=target.getAttribute("tabindex")},releaseTabIndex,matchesEventPath(path){const target=button();return target!==void 0&&path.includes(target)}}}getToolbarActions(){return[this.upToolbarAction,this.downToolbarAction]}focus(options){(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.focus(options)}blur(){this.upButtonEl?.blur(),this.downButtonEl?.blur()}click(){this.disabled||this.pending||(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.click()}get detailReasons(){return this.currentDetailProjection.reasons}get detailCommentable(){return this.currentDetailProjection.commentable}get currentDetailProjection(){const detail=this.detail;return detail!==this.detailProjectionSource&&(this.detailProjectionSource=detail,this.detailProjection=projectFeedbackDetail(detail)),this.detailProjection}get hasDetailContent(){return this.detailReasons.length>0||this.detailCommentable}detailApplies(direction){return this.detailFor==="both"||this.detailFor===direction}requestUpdate(name,oldValue,options){const currentValue=name==="rating"?this.rating:name==="detail"?this.detail:name==="detailFor"?this.detailFor:name==="pending"?this.pending:void 0,changed=oldValue!==currentValue,internalRatingWrite=name==="rating"&&this.pendingInternalRating?.rating===this.rating;changed&&(name==="rating"||name==="detail"||name==="detailFor"||name==="pending")&&!(name==="rating"&&internalRatingWrite)&&(this.focusGeneration=(this.focusGeneration??0)+1,this.pendingSubmission&&(name!=="pending"||!this.settingPending&&this.pending===!1)&&this.invalidatePendingSubmission()),super.requestUpdate(name,oldValue,options)}disconnectedCallback(){this.lifecycleGeneration+=1,this.invalidatePendingSubmission(),this.upToolbarAction.releaseTabIndex?.(),this.downToolbarAction.releaseTabIndex?.(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.lifecycleGeneration+=1,this.invalidatePendingSubmission(),this.upToolbarAction.releaseTabIndex?.(),this.downToolbarAction.releaseTabIndex?.()}willUpdate(changed){if(super.willUpdate(changed),changed.has("rating")){const internal=this.pendingInternalRating?.rating===this.rating;this.pendingInternalRating=void 0,internal||(this.invalidatePendingSubmission(),this.setPending(!1),this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="")}if(changed.has("detail")){const validIds=new Set(this.detailReasons.map(reason=>reason.id));this.selectedReasonIds=this.selectedReasonIds.filter(id=>validIds.has(id)),this.detailCommentable||(this.commentDraft="")}this.panelOpen&&(!this.rating||!this.detailApplies(this.rating)||!this.hasDetailContent)&&(this.invalidatePendingSubmission(),this.setPending(!1),this.panelOpen=!1,changed.has("detailFor")&&(this.selectedReasonIds=[],this.commentDraft=""))}updated(changed){super.updated(changed),(changed.has("disabled")||changed.has("pending"))&&this.emit("lr-toolbar-actions-change")}setRatingFromInteraction(rating){this.pendingInternalRating={rating},this.rating=rating}activateThumb(next){if(this.disabled||this.pending)return;const previousRating=this.rating;if(this.rating===next){if(this.panelOpen){this.setRatingFromInteraction(null),this.panelOpen=!1,this.selectedReasonIds=[],this.commentDraft="",this.emit("lr-feedback-change",{rating:null}),this.requestSubmission({rating:null,reasonIds:[],comment:""},previousRating,!0);return}if(this.detailApplies(next)&&this.hasDetailContent){this.panelOpen=!0;return}this.setRatingFromInteraction(null),this.emit("lr-feedback-change",{rating:null}),this.requestSubmission({rating:null,reasonIds:[],comment:""},previousRating,!1);return}this.selectedReasonIds=[],this.commentDraft="",this.setRatingFromInteraction(next),this.panelOpen=this.detailApplies(next)&&this.hasDetailContent,this.emit("lr-feedback-change",{rating:next}),this.panelOpen||this.requestSubmission({rating:next,reasonIds:[],comment:""},previousRating,!1)}focusActiveThumb(){(this.rating==="down"?this.downButtonEl:this.upButtonEl)?.focus()}closePanel(){this.panelOpen&&(this.panelOpen=!1,this.focusActiveThumb())}toggleReason(id){this.disabled||this.pending||(this.selectedReasonIds=this.selectedReasonIds.includes(id)?this.selectedReasonIds.filter(r=>r!==id):[...this.selectedReasonIds,id])}setPending(pending){this.settingPending=!0,this.pending=pending,this.settingPending=!1}invalidatePendingSubmission(){const transaction=this.pendingSubmission;transaction&&(this.pendingSubmission=void 0,this.dispatchingSubmission===transaction&&(this.dispatchingSubmission=void 0),this.legacyNoArgumentSettlementInvalidated=!0,this.focusGeneration+=1,this.setPending(!1))}isCurrentPendingSubmission(transaction){return this.pendingSubmission===transaction&&this.pending&&this.isConnected&&transaction.lifecycleGeneration===this.lifecycleGeneration&&transaction.rating===this.rating&&transaction.detail===this.detail&&transaction.detailFor===this.detailFor?!0:(this.pendingSubmission===transaction&&this.invalidatePendingSubmission(),!1)}canSettleWithoutSubmissionId(transaction){return!this.legacyNoArgumentSettlementInvalidated&&this.submissionCount===1&&transaction.sequence===1}scheduleSettlementFocus(transaction,destination){const focusGeneration=++this.focusGeneration,lifecycleGeneration=transaction.lifecycleGeneration;this.updateComplete.then(()=>{focusGeneration!==this.focusGeneration||lifecycleGeneration!==this.lifecycleGeneration||!this.isConnected||this.pending||this.pendingSubmission||(destination==="submit"&&this.panelOpen?this.submitButtonEl?.focus():this.focusActiveThumb())})}settlePendingSubmission(settlement,submissionId){const transaction=this.pendingSubmission;if(!transaction||!this.isCurrentPendingSubmission(transaction))return!1;if(submissionId===void 0){if(!this.canSettleWithoutSubmissionId(transaction))return!1}else if(submissionId!==transaction.submissionId)return!1;return transaction.settlement?!1:this.dispatchingSubmission===transaction?(transaction.settlement=settlement,!0):(this.commitSettlement(transaction,settlement),!0)}commitSettlement(transaction,settlement){if(this.isCurrentPendingSubmission(transaction)){if(this.pendingSubmission=void 0,this.dispatchingSubmission===transaction&&(this.dispatchingSubmission=void 0),this.setPending(!1),settlement==="finalize"){this.panelOpen=!1,this.liveRegion?.announce(this.localize("feedbackSubmitted"),{force:!0}),this.scheduleSettlementFocus(transaction,"thumb");return}this.setRatingFromInteraction(transaction.previousRating),this.panelOpen=transaction.panelWasOpen,this.scheduleSettlementFocus(transaction,transaction.panelWasOpen?"submit":"thumb")}}finalizePendingSubmit(submissionId){return this.settlePendingSubmission("finalize",submissionId)}revertPendingSubmit(submissionId){return this.settlePendingSubmission("revert",submissionId)}requestSubmission(detail,previousRating,panelWasOpen){this.focusGeneration+=1;const sequence=++this.submissionSequence;this.submissionCount+=1;const transaction={submissionId:nextId("message-feedback-submission"),sequence,lifecycleGeneration:this.lifecycleGeneration,rating:this.rating,detail:this.detail,detailFor:this.detailFor,previousRating,panelWasOpen};this.pendingSubmission=transaction,this.setPending(!0),this.dispatchingSubmission=transaction;const event=this.emit("lr-feedback-submit",{...detail,submissionId:transaction.submissionId},{cancelable:!0});if(this.dispatchingSubmission===transaction&&(this.dispatchingSubmission=void 0),!!this.isCurrentPendingSubmission(transaction)){if(transaction.settlement){this.commitSettlement(transaction,transaction.settlement);return}event.defaultPrevented||this.commitSettlement(transaction,"finalize")}}renderThumb(direction){const pressed=this.rating===direction,canExpand=this.detailApplies(direction)&&this.hasDetailContent;return html`
15
15
  <button
16
16
  part=${direction==="up"?"up-button":"down-button"}
17
17
  type="button"
@@ -56,6 +56,10 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
56
56
  part="comment"
57
57
  aria-label=${this.localize("feedbackCommentLabel")}
58
58
  placeholder=${this.localize("feedbackCommentPlaceholder")}
59
+ spellcheck=${this.spellcheck}
60
+ autocapitalize=${this.autocapitalize||nothing}
61
+ autocorrect=${this.hasAttribute("autocorrect")||!this.autocorrect?this.autocorrect?"on":"off":nothing}
62
+ wrap=${this.wrap}
59
63
  .value=${this.commentDraft}
60
64
  ?disabled=${this.disabled||this.pending}
61
65
  @input=${this.onCommentInput}
@@ -76,4 +80,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
76
80
  `:nothing}
77
81
  <lr-live-region></lr-live-region>
78
82
  </div>
79
- `}}__decorate([property({reflect:!0})],LyraMessageFeedback.prototype,"rating",void 0),__decorate([property({attribute:!1})],LyraMessageFeedback.prototype,"detail",void 0),__decorate([property({attribute:"detail-for"})],LyraMessageFeedback.prototype,"detailFor",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMessageFeedback.prototype,"disabled",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMessageFeedback.prototype,"pending",void 0),__decorate([state()],LyraMessageFeedback.prototype,"panelOpen",void 0),__decorate([state()],LyraMessageFeedback.prototype,"selectedReasonIds",void 0),__decorate([state()],LyraMessageFeedback.prototype,"commentDraft",void 0),__decorate([query('[part="up-button"]')],LyraMessageFeedback.prototype,"upButtonEl",void 0),__decorate([query('[part="down-button"]')],LyraMessageFeedback.prototype,"downButtonEl",void 0),__decorate([query('[part="submit-button"]')],LyraMessageFeedback.prototype,"submitButtonEl",void 0),__decorate([query("lr-live-region")],LyraMessageFeedback.prototype,"liveRegion",void 0);export{LyraMessageFeedback};
83
+ `}}__decorate([property({reflect:!0})],LyraMessageFeedback.prototype,"rating",void 0),__decorate([property({attribute:!1})],LyraMessageFeedback.prototype,"detail",void 0),__decorate([property({attribute:"detail-for"})],LyraMessageFeedback.prototype,"detailFor",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMessageFeedback.prototype,"disabled",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMessageFeedback.prototype,"pending",void 0),__decorate([property({converter:trueDefaultSpellcheckConverter})],LyraMessageFeedback.prototype,"spellcheck",void 0),__decorate([property({converter:omittedEmptyStringConverter})],LyraMessageFeedback.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraMessageFeedback.prototype,"autocorrect",null),__decorate([property({converter:declaredDefaultConverter("soft")})],LyraMessageFeedback.prototype,"wrap",void 0),__decorate([state()],LyraMessageFeedback.prototype,"panelOpen",void 0),__decorate([state()],LyraMessageFeedback.prototype,"selectedReasonIds",void 0),__decorate([state()],LyraMessageFeedback.prototype,"commentDraft",void 0),__decorate([query('[part="up-button"]')],LyraMessageFeedback.prototype,"upButtonEl",void 0),__decorate([query('[part="down-button"]')],LyraMessageFeedback.prototype,"downButtonEl",void 0),__decorate([query('[part="submit-button"]')],LyraMessageFeedback.prototype,"submitButtonEl",void 0),__decorate([query("lr-live-region")],LyraMessageFeedback.prototype,"liveRegion",void 0);export{LyraMessageFeedback};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{max-inline-size:100%;display:block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;display:flex}[part=thumbs]{gap:var(--lr-space-2xs);display:flex}[part=up-button],[part=down-button]{inline-size:var(--lr-size-1-75rem);block-size:var(--lr-size-1-75rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border:var(--lr-border-width-thin) solid transparent;border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0;display:inline-flex}:where([part=up-button]):hover:where(:not(:disabled)),:where([part=down-button]):hover:where(:not(:disabled)){background:var(--lr-color-surface-raised);color:var(--lr-color-text)}:where([part=up-button]):active:where(:not(:disabled)),:where([part=down-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=up-button]:focus-visible,[part=down-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=up-button][aria-pressed=true]{color:var(--lr-message-feedback-up-active-color,var(--lr-color-success));background:var(--lr-message-feedback-up-active-bg,var(--lr-color-success-quiet));border-color:var(--lr-message-feedback-up-active-border,var(--lr-color-success))}[part=down-button][aria-pressed=true]{color:var(--lr-message-feedback-down-active-color,var(--lr-color-danger));background:var(--lr-message-feedback-down-active-bg,var(--lr-color-danger-quiet));border-color:var(--lr-message-feedback-down-active-border,var(--lr-color-danger))}[part=up-button]:disabled,[part=down-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=panel]{border:0 solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);transition:grid-template-rows var(--lr-transition-base), border-width var(--lr-transition-base);grid-template-rows:0fr;display:grid;overflow:hidden}[part=panel]:where([data-open]){border-width:var(--lr-border-width-thin);grid-template-rows:1fr}[part=panel] .panel-inner{gap:var(--lr-space-s);min-block-size:0;padding:0 var(--lr-space-m);transition:padding-block var(--lr-transition-base);flex-direction:column;display:flex;overflow:hidden}[part=panel]:where([data-open]) .panel-inner{padding-block:var(--lr-space-m)}@media (prefers-reduced-motion:reduce){[part=panel],[part=panel] .panel-inner{transition:none}}[part=reasons]{gap:var(--lr-space-2xs);flex-wrap:wrap;display:flex}[part=comment]{box-sizing:border-box;inline-size:100%;min-block-size:var(--lr-size-2-5rem);padding:var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;resize:vertical}[part=comment]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:where([part=comment]):hover:where(:not(:disabled)){border-color:var(--lr-color-brand)}[part=comment]::placeholder{color:var(--lr-color-text-quiet)}[part=submit-button]{box-sizing:border-box;max-inline-size:100%;padding-inline:var(--lr-space-m);padding-block:var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer;align-self:flex-end}:where([part=submit-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:where([part=submit-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=submit-button]:disabled,[part=comment]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=submit-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{max-inline-size:100%;display:block}[part=base]{gap:var(--lr-space-xs);flex-direction:column;display:flex}[part=thumbs]{gap:var(--lr-space-2xs);display:flex}[part=up-button],[part=down-button]{inline-size:var(--lr-size-1-75rem);block-size:var(--lr-size-1-75rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);font:inherit;border:var(--lr-border-width-thin) solid transparent;border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:0;display:inline-flex}:where([part=up-button]):hover:where(:not(:disabled)),:where([part=down-button]):hover:where(:not(:disabled)){background:var(--lr-color-surface-raised);color:var(--lr-color-text)}:where([part=up-button]):active:where(:not(:disabled)),:where([part=down-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=up-button]:focus-visible,[part=down-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=up-button][aria-pressed=true]{color:var(--lr-message-feedback-up-active-color,var(--lr-color-success));background:var(--lr-message-feedback-up-active-bg,var(--lr-color-success-quiet));border-color:var(--lr-message-feedback-up-active-border,var(--lr-color-success))}[part=down-button][aria-pressed=true]{color:var(--lr-message-feedback-down-active-color,var(--lr-color-danger));background:var(--lr-message-feedback-down-active-bg,var(--lr-color-danger-quiet));border-color:var(--lr-message-feedback-down-active-border,var(--lr-color-danger))}[part=up-button]:disabled,[part=down-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=panel]{border:0 solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);transition:grid-template-rows var(--lr-transition-base), border-width var(--lr-transition-base);grid-template-rows:0fr;display:grid;overflow:hidden}[part=panel]:where([data-open]){border-width:var(--lr-border-width-thin);grid-template-rows:1fr}[part=panel] .panel-inner{gap:var(--lr-space-s);min-block-size:0;padding:0 var(--lr-space-m);transition:padding-block var(--lr-transition-base);flex-direction:column;display:flex;overflow:hidden}[part=panel]:where([data-open]) .panel-inner{padding-block:var(--lr-space-m)}@media (prefers-reduced-motion:reduce){[part=panel],[part=panel] .panel-inner{transition:none}}[part=reasons]{gap:var(--lr-space-2xs);flex-wrap:wrap;display:flex}[part=comment]{box-sizing:border-box;inline-size:100%;min-block-size:var(--lr-size-2-5rem);padding:var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;resize:vertical}[part=comment]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:where([part=comment]):hover:where(:not(:disabled)){border-color:var(--lr-color-brand)}[part=comment]::placeholder{color:var(--lr-color-text-quiet)}[part=submit-button]{box-sizing:border-box;max-inline-size:100%;padding-inline:var(--lr-space-m);padding-block:var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font:inherit;white-space:normal;overflow-wrap:anywhere;cursor:pointer;align-self:flex-end}:where([part=submit-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:where([part=submit-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=submit-button]:disabled,[part=comment]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=submit-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
@@ -1,4 +1,6 @@
1
- import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{CitationSelectEventDetail,MessagePart}from'../../../ai/types.js';import type{LyraThinkingPanelEventMap}from'../../agent-tools/thinking-panel/thinking-panel.class.js';import type{LyraToolCallChipEventMap}from'../../agent-tools/tool-call-chip/tool-call-chip.class.js';import type{LyraToolResultViewEventMap}from'../../agent-tools/tool-result-view/tool-result-view.class.js';import type{LyraAttachmentChipEventMap}from'../../media/attachment-chip/attachment-chip.class.js';import type{LyraCitationBadgeEventMap}from'../../retrieval/citation-badge/citation-badge.class.js';import type{LyraJsonViewerEventMap}from'../../utility/json-viewer/json-viewer.class.js';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraMarkdownEventMap}from'../markdown/markdown.class.js';import type{LyraWidgetRendererEventMap}from'../widget-renderer/widget-renderer.class.js';export type MessagePartRenderer=(part:MessagePart,index:number)=>unknown;export interface LyraMessagePartsEventMap extends Omit<LyraMarkdownEventMap,'lr-render-error'>,LyraThinkingPanelEventMap,LyraToolCallChipEventMap,Omit<LyraToolResultViewEventMap,'lr-render-error'>,LyraAttachmentChipEventMap,Omit<LyraCitationBadgeEventMap,'lr-citation-activate'>,LyraJsonViewerEventMap,Omit<LyraWidgetRendererEventMap,'lr-render-error'>{'lr-citation-select':CustomEvent<LyraEventDetailSnapshot<CitationSelectEventDetail>>;'lr-part-retry':CustomEvent<LyraEventDetailSnapshot<{part:MessagePart;}>>;'lr-render-error':CustomEvent<{error:unknown;}|{toolName:string;error:unknown;}>;}
1
+ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{CitationSelectEventDetail,MessagePart}from'../../../ai/types.js';import type{LyraThinkingPanelEventMap}from'../../agent-tools/thinking-panel/thinking-panel.class.js';import type{LyraToolCallChipEventMap}from'../../agent-tools/tool-call-chip/tool-call-chip.class.js';import type{LyraToolResultViewEventMap}from'../../agent-tools/tool-result-view/tool-result-view.class.js';import type{LyraAttachmentChipEventMap}from'../../media/attachment-chip/attachment-chip.class.js';import type{LyraCitationBadgeEventMap}from'../../retrieval/citation-badge/citation-badge.class.js';import type{LyraJsonViewerEventMap}from'../../utility/json-viewer/json-viewer.class.js';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraMarkdownEventMap}from'../markdown/markdown.class.js';import type{LyraWidgetRendererEventMap}from'../widget-renderer/widget-renderer.class.js';export type MessagePartRenderer=(part:MessagePart,index:number)=>unknown;
2
+ /** Rendering mode for text and reasoning message parts. */
3
+ export type MessagePartsContentMode='plain'|'markdown';export interface LyraMessagePartsEventMap extends Omit<LyraMarkdownEventMap,'lr-render-error'>,LyraThinkingPanelEventMap,LyraToolCallChipEventMap,Omit<LyraToolResultViewEventMap,'lr-render-error'>,LyraAttachmentChipEventMap,Omit<LyraCitationBadgeEventMap,'lr-citation-activate'>,LyraJsonViewerEventMap,Omit<LyraWidgetRendererEventMap,'lr-render-error'>{'lr-citation-select':CustomEvent<LyraEventDetailSnapshot<CitationSelectEventDetail>>;'lr-part-retry':CustomEvent<LyraEventDetailSnapshot<{part:MessagePart;}>>;'lr-render-error':CustomEvent<{error:unknown;}|{toolName:string;error:unknown;}>;}
2
4
  /**
3
5
  * `<lr-message-parts>` — renders ordered, interleavable provider-neutral AI message parts. It
4
6
  * composes Lyra's existing Markdown, reasoning, tool, citation, attachment, widget, JSON, and
@@ -58,9 +60,10 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
58
60
  */
59
61
  export declare class LyraMessageParts extends LyraElement<LyraMessagePartsEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
60
62
  /** Ordered message content. */
61
- parts:readonly MessagePart[];
62
- /** Text/reasoning rendering mode. */
63
- contentMode:'plain'|'markdown';
63
+ parts:readonly MessagePart[];private contentModeValue;
64
+ /** Text/reasoning rendering mode. Unsupported direct or attribute values normalize and reflect
65
+ * as `markdown`, including when the current value is already `markdown`. */
66
+ get contentMode():MessagePartsContentMode;set contentMode(value:MessagePartsContentMode);
64
67
  /** Include reasoning parts. */
65
68
  showReasoning:boolean;
66
69
  /** Optional host renderer. Returning `undefined` delegates to the built-in renderer. */
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{isNonBlankIdentity,isRecord}from"../../retrieval/retrieval-identity.js";import{styles}from"./message-parts.styles.js";import{LYRA_DEFAULT_messagePartError,LYRA_DEFAULT_messagePartRetry,LYRA_DEFAULT_messagePartsLabel,LYRA_DEFAULT_retry,LYRA_DEFAULT_thinkingPanelLabel}from"../../../internal/default-strings.generated.js";class LyraMessageParts extends LyraElement{constructor(){super(...arguments),this.parts=[],this.contentMode="markdown",this.showReasoning=!0,this.accessibleLabel=null,this.knownErrorIds=new Set,this.suppressNextErrorAnnouncement=!0}static{this.defaultStrings={...super.defaultStrings,messagePartError:LYRA_DEFAULT_messagePartError,messagePartRetry:LYRA_DEFAULT_messagePartRetry,messagePartsLabel:LYRA_DEFAULT_messagePartsLabel,retry:LYRA_DEFAULT_retry,thinkingPanelLabel:LYRA_DEFAULT_thinkingPanelLabel}}static{this.ownedCollectionProperties=Object.freeze(["parts"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-citation-select","lr-part-retry"])}connectedCallback(){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()))}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveParts(){const seen=new Set;return this.parts.filter(part=>{const id=part?.id;return!isNonBlankIdentity(id)||seen.has(id)||part.type==="tool-call"&&!isRecord(part.invocation)||part.type==="citation"&&!isRecord(part.citation)||part.type==="attachment"&&!isRecord(part.document)?!1:(seen.add(id),!0)})}willUpdate(changed){if(super.willUpdate(changed),!changed.has("parts"))return;const current=this.effectiveParts.filter(part=>part.type==="error");if(this.hasUpdated&&!this.suppressNextErrorAnnouncement)for(const part of current)this.knownErrorIds.has(part.id)||this.errorAnnouncementSink?.announce(part.message||this.localize("messagePartError"));this.knownErrorIds=new Set(current.map(part=>part.id))}updated(_changed){super.updated(_changed),this.suppressNextErrorAnnouncement=!1}selectCitation(event,part){event.stopPropagation(),this.emit("lr-citation-select",{citation:part.citation})}partNames(part){const parts=["part"];switch(part.type){case"text":parts.push("text");break;case"reasoning":parts.push("reasoning");break;case"tool-call":parts.push("tool-call");break;case"tool-result":parts.push("tool-result");break;case"citation":parts.push("citation");break;case"attachment":parts.push("attachment");break;case"data":parts.push("data");break;case"audio":parts.push("audio");break;case"error":parts.push("error");break}return part.state==="streaming"&&parts.push("part-streaming"),parts.join(" ")}renderBuiltin(part,citationRank){switch(part.type){case"text":return this.contentMode==="markdown"?html`<lr-markdown .content=${part.text} .streaming=${part.state==="streaming"}></lr-markdown>`:part.text;case"reasoning":return html`<lr-thinking-panel
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{safeMediaSrc}from"../../../internal/safe-url.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{isNonBlankIdentity,isRecord}from"../../retrieval/retrieval-identity.js";import{styles}from"./message-parts.styles.js";import{LYRA_DEFAULT_messagePartError,LYRA_DEFAULT_messagePartRetry,LYRA_DEFAULT_messagePartsLabel,LYRA_DEFAULT_retry,LYRA_DEFAULT_thinkingPanelLabel}from"../../../internal/default-strings.generated.js";const MESSAGE_PARTS_CONTENT_MODES=Object.freeze(["plain","markdown"]);function normalizeMessagePartsContentMode(value){return typeof value=="string"&&MESSAGE_PARTS_CONTENT_MODES.includes(value)?value:"markdown"}class LyraMessageParts extends LyraElement{constructor(){super(...arguments),this.parts=[],this.contentModeValue="markdown",this.showReasoning=!0,this.accessibleLabel=null,this.knownErrorIds=new Set,this.suppressNextErrorAnnouncement=!0}static{this.defaultStrings={...super.defaultStrings,messagePartError:LYRA_DEFAULT_messagePartError,messagePartRetry:LYRA_DEFAULT_messagePartRetry,messagePartsLabel:LYRA_DEFAULT_messagePartsLabel,retry:LYRA_DEFAULT_retry,thinkingPanelLabel:LYRA_DEFAULT_thinkingPanelLabel}}static{this.ownedCollectionProperties=Object.freeze(["parts"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-citation-select","lr-part-retry"])}get contentMode(){return this.contentModeValue}set contentMode(value){const previous=this.contentModeValue,normalized=normalizeMessagePartsContentMode(value);this.contentModeValue=normalized,typeof value=="string"&&value!==normalized&&this.getAttribute("content-mode")!==normalized&&this.setAttribute("content-mode",normalized),this.requestUpdate("contentMode",previous,{reflect:!0,hasChanged:()=>!0})}connectedCallback(){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()))}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveParts(){const seen=new Set;return this.parts.filter(part=>{const id=part?.id;return!isNonBlankIdentity(id)||seen.has(id)||part.type==="tool-call"&&!isRecord(part.invocation)||part.type==="citation"&&!isRecord(part.citation)||part.type==="attachment"&&!isRecord(part.document)?!1:(seen.add(id),!0)})}willUpdate(changed){if(super.willUpdate(changed),!changed.has("parts"))return;const current=this.effectiveParts.filter(part=>part.type==="error");if(this.hasUpdated&&!this.suppressNextErrorAnnouncement)for(const part of current)this.knownErrorIds.has(part.id)||this.errorAnnouncementSink?.announce(part.message||this.localize("messagePartError"));this.knownErrorIds=new Set(current.map(part=>part.id))}updated(_changed){super.updated(_changed),this.suppressNextErrorAnnouncement=!1}selectCitation(event,part){event.stopPropagation(),this.emit("lr-citation-select",{citation:part.citation})}partNames(part){const parts=["part"];switch(part.type){case"text":parts.push("text");break;case"reasoning":parts.push("reasoning");break;case"tool-call":parts.push("tool-call");break;case"tool-result":parts.push("tool-result");break;case"citation":parts.push("citation");break;case"attachment":parts.push("attachment");break;case"data":parts.push("data");break;case"audio":parts.push("audio");break;case"error":parts.push("error");break}return part.state==="streaming"&&parts.push("part-streaming"),parts.join(" ")}renderBuiltin(part,citationRank){switch(part.type){case"text":return this.contentMode==="markdown"?html`<lr-markdown .content=${part.text} .streaming=${part.state==="streaming"}></lr-markdown>`:part.text;case"reasoning":return html`<lr-thinking-panel
2
2
  .label=${this.localize("thinkingPanelLabel")}
3
3
  .mode=${part.state==="streaming"?"live":"post-hoc"}
4
4
  ?expanded=${part.collapsed===!1}
@@ -46,4 +46,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
46
46
  ${custom===void 0?this.renderBuiltin(part,citationRank):custom}
47
47
  </div>`}render(){const label=this.accessibleLabel??this.localize("messagePartsLabel"),parts=this.effectiveParts,citationRanks=new Array(parts.length).fill(0);let citationRank=0;for(let index=0;index<parts.length;index++)parts[index]?.type==="citation"&&(citationRanks[index]=++citationRank);return html`<div part="base" role="group" aria-label=${label}>
48
48
  ${repeat(parts,part=>part.id,(part,index)=>this.renderOne(part,index,citationRanks[index]??0))}
49
- </div>`}}__decorate([property({attribute:!1})],LyraMessageParts.prototype,"parts",void 0),__decorate([property({reflect:!0,attribute:"content-mode"})],LyraMessageParts.prototype,"contentMode",void 0),__decorate([property({type:Boolean,attribute:"show-reasoning",reflect:!0,converter:trueDefaultBooleanConverter})],LyraMessageParts.prototype,"showReasoning",void 0),__decorate([property({attribute:!1})],LyraMessageParts.prototype,"renderPart",void 0),__decorate([property({attribute:"aria-label"})],LyraMessageParts.prototype,"accessibleLabel",void 0);export{LyraMessageParts};
49
+ </div>`}}__decorate([property({attribute:!1})],LyraMessageParts.prototype,"parts",void 0),__decorate([property({reflect:!0,attribute:"content-mode"})],LyraMessageParts.prototype,"contentMode",null),__decorate([property({type:Boolean,attribute:"show-reasoning",reflect:!0,converter:trueDefaultBooleanConverter})],LyraMessageParts.prototype,"showReasoning",void 0),__decorate([property({attribute:!1})],LyraMessageParts.prototype,"renderPart",void 0),__decorate([property({attribute:"aria-label"})],LyraMessageParts.prototype,"accessibleLabel",void 0);export{LyraMessageParts};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part~=part]{min-inline-size:0}[part~=part-streaming]{color:var(--lr-message-parts-streaming-color,var(--lr-color-text-quiet))}[part~=tool-call],[part~=citation],[part~=attachment]{align-self:flex-start;max-inline-size:100%}[part~=tool-result],[part~=data]{overflow:auto}[part=tool-result-error]{gap:var(--lr-space-xs);color:var(--lr-color-danger);display:grid}[part=audio-control]{max-inline-size:100%}[part~=audio]{inline-size:100%}[part~=audio-transcript]{margin-block:var(--lr-space-xs) 0;color:var(--lr-message-parts-audio-transcript-color,var(--lr-color-text-quiet))}[part~=error]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-message-parts-error-border-color,var(--lr-color-danger));border-radius:var(--lr-radius);background:var(--lr-message-parts-error-background,var(--lr-color-danger-quiet));color:var(--lr-message-parts-error-color,var(--lr-color-danger));flex-wrap:wrap;display:flex}[part~=error]>span{overflow-wrap:anywhere;flex:1 1 0;min-inline-size:0}[part=retry]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);flex:none}@container (inline-size<=319.98px){[part=base]{gap:var(--lr-space-xs)}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part~=part]{min-inline-size:0}[part~=part-streaming]{color:var(--lr-message-parts-streaming-color,var(--lr-color-text-quiet))}[part~=tool-call],[part~=citation],[part~=attachment]{align-self:flex-start;max-inline-size:100%}[part~=tool-result],[part~=data]{overflow:auto}[part=tool-result-error]{gap:var(--lr-space-xs);color:var(--lr-color-danger);display:grid}[part=audio-control]{max-inline-size:100%}[part~=audio]{inline-size:100%}[part~=audio-transcript]{margin-block:var(--lr-space-xs) 0;color:var(--lr-message-parts-audio-transcript-color,var(--lr-color-text-quiet))}[part~=error]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-space-s);border:var(--lr-border-width-thin) solid var(--lr-message-parts-error-border-color,var(--lr-color-danger));border-radius:var(--lr-radius);background:var(--lr-message-parts-error-background,var(--lr-color-danger-quiet));color:var(--lr-message-parts-error-color,var(--lr-color-danger));flex-wrap:wrap;display:flex}[part~=error]>span{overflow-wrap:break-word;flex:1 1 0;min-inline-size:0}[part=retry]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);flex:none;justify-content:center;align-items:center;display:inline-flex}@container (inline-size<=319.98px){[part=base]{gap:var(--lr-space-xs)}}`;export{styles};
@@ -111,6 +111,9 @@ provider:string;
111
111
  catalog?:LyraCatalog<LyraModelCatalogEntry>;
112
112
  /** Let the user type/commit a value that isn't in `catalog`, even when `catalog` is non-empty. */
113
113
  allowCustom:boolean;
114
+ /** Keeps user edits and catalog commits from changing `value` while retaining focus, popup
115
+ * navigation, selection/copy, form submission, reset, and programmatic writes. */
116
+ readonly:boolean;
114
117
  /**
115
118
  * Optional visible title above the control, rendered alongside the `label` slot in a
116
119
  * `part="form-control-label"` `<label>` paired with the active control's id. A host `aria-label`
@@ -181,8 +184,8 @@ get name():string;set name(next:string);get disabled():boolean;set disabled(next
181
184
  /** Whether the control is disabled explicitly or by an ancestor fieldset. */
182
185
  get effectiveDisabled():boolean;
183
186
  /**
184
- * Shared with every other form control: own `disabled` and a `<fieldset disabled>` ancestor bar
185
- * constraint validation (this picker has no `readonly` of its own). A barred control matches
187
+ * Shared with every other form control: own `disabled`/`readonly` and a `<fieldset disabled>`
188
+ * ancestor bar constraint validation. A barred control matches
186
189
  * neither `:valid` nor `:invalid` natively, so leaving `valueMissing` raised on a disabled
187
190
  * required picker is what painted it red under the documented `:state(user-invalid)` rule.
188
191
  */
@@ -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{activeElementIn}from"../../../internal/active-element.js";import{applyComposedFocusRepair,captureComposedFocusRepair,isComposedFocusAvailable}from"../../../internal/focus-navigation.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{AnchoredValidityController,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./model-select.styles.js";import{spellcheckFromAttributeConverter as spellcheckConverter}from"../../../internal/converters.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_model,LYRA_DEFAULT_modelSelectNoModels,LYRA_DEFAULT_modelSelectRequired,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog}from"../../../internal/default-strings.generated.js";class LyraModelSelect extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,model:LYRA_DEFAULT_model,modelSelectNoModels:LYRA_DEFAULT_modelSelectNoModels,modelSelectRequired:LYRA_DEFAULT_modelSelectRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog}}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0},required:{type:Boolean,reflect:!0,noAccessor:!0},value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!0,useDefault:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0}}}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}constructor(){super(),this.provider="",this.allowCustom=!1,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.touched=!1,this.slotPresence=new SlotPresenceController(this),this.listId=nextId("model-select-list"),this.controlId=nextId("model-select-control"),this._fieldsetDisabled=!1,this._name="",this._disabled=!1,this._required=!1,this.suppressControlBlur=!1,this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label],emitChange:detail=>this.emit("lr-change",detail),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state2,oldValue)=>{state2==="open"?this.requestUpdate("open",oldValue):this.requestUpdate()},onControlFocus:event=>this.captureModeFocus(event),onControlBlur:event=>{this.effectiveDisabled||(this.touched=!0),this.retireModeFocusAfterBlur(event)},forwardFreeInputClick:!0}),this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onTriggerBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onTriggerFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)},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.internals.setFormValue("")}click(){this.catalogPicker.click()}focus(options){this.catalogPicker.focus(options)}blur(){this.catalogPicker.blur()}get input(){return this.catalogPicker.input}get selectionStart(){return this.input?.selectionStart??null}set selectionStart(value){this.input&&(this.input.selectionStart=value)}get selectionEnd(){return this.input?.selectionEnd??null}set selectionEnd(value){this.input&&(this.input.selectionEnd=value)}get selectionDirection(){return this.input?.selectionDirection??null}set selectionDirection(value){this.input&&(this.input.selectionDirection=value)}select(){this.catalogPicker.select()}setSelectionRange(start,end,direction){this.catalogPicker.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){this.catalogPicker.setRangeText(replacement,start,end,selectMode)}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](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){super.willUpdate(changed);let modeChanged=!1;if(this.hasUpdated){const renderedControl=this.renderRoot.querySelector('[part="trigger"], [part="combobox-input"]');modeChanged=renderedControl?.getAttribute("part")==="trigger"!==this.closedMode,this.suppressControlBlur=modeChanged,this.catalogPicker.suppressControlEvents=modeChanged,this.modeFocusRepair=modeChanged&&renderedControl!==null&&activeElementIn(this.shadowRoot)===renderedControl?captureComposedFocusRepair(this,this.modeFocusFallback()??renderedControl)??void 0:modeChanged?this.focusedModeRepair:void 0}this.open&&(changed.has("catalog")||changed.has("value")||changed.has("allowCustom"))&&this.catalogPicker.reconcileRows(void 0,changed.has("value")||changed.has("allowCustom")||modeChanged,!1)}disconnectedCallback(){super.disconnectedCallback(),this.modeFocusRepair=void 0,this.focusedModeRepair=void 0,this.focusReturnTarget=void 0,this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.modeFocusRepair=void 0,this.focusedModeRepair=void 0,this.focusReturnTarget=void 0,this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}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._disabled&&this.hide(),this.updateValidity(),this.requestUpdate("disabled",old)}get required(){return this._required}set required(next){const old=this._required;this._required=!!next,this.toggleAttribute("required",this._required),this.updateValidity(),this.requestUpdate("required",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}updateValidity(){this.barredFromValidation?this.validityController.setValidity({}):this.required&&!this.value?this.validityController.setValidity({valueMissing:!0},this.localize("modelSelectRequired")):this.validityController.setValidity({}),this.publishValidityStates()}publishValidityStates(){syncValidityStates(this.internals,{required:this.required,hasInteracted:this.touched,barred:this.barredFromValidation})}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state2,_mode){this.catalogPicker.restoreState(state2)}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,disabled&&this.hide(),this.updateValidity(),this.requestUpdate()}checkValidity(){return this.internals.checkValidity()}reportValidity(){return this.touched=!0,this.publishValidityStates(),this.internals.reportValidity()}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.publishValidityStates()}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}updated(changed){super.updated(changed);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("touched")||changed.has("value"))&&this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid),this.publishValidityStates(),this.suppressControlBlur=!1,this.catalogPicker.suppressControlEvents=!1;const focusRepair=this.modeFocusRepair;this.modeFocusRepair=void 0,focusRepair&&this.scheduleAfterUpdate(()=>{const replacement=this[VALIDITY_ANCHOR](),target=replacement&&isComposedFocusAvailable(replacement)?replacement:this.modeFocusFallback();applyComposedFocusRepair(focusRepair,target),this.focusedModeRepair===focusRepair&&(this.focusedModeRepair=void 0)},"model-select-mode-focus")}rememberFocusReturn(event){const related=event.relatedTarget;related&&related.nodeType===1&&isComposedFocusAvailable(related)&&(this.focusReturnTarget=related)}captureModeFocus(event){this.rememberFocusReturn(event);const control=event.currentTarget;!control||control.nodeType!==1||(this.focusedModeRepair=captureComposedFocusRepair(this,this.modeFocusFallback()??control)??void 0)}retireModeFocusAfterBlur(event){const destination=event.relatedTarget;if(destination&&destination.nodeType===1){this.focusedModeRepair=void 0;return}queueMicrotask(()=>{!this.suppressControlBlur&&!this.effectiveDisabled&&!this.hasAttribute("inert")&&(this.focusedModeRepair=void 0)})}modeFocusFallback(){if(this.focusReturnTarget&&isComposedFocusAvailable(this.focusReturnTarget))return this.focusReturnTarget;const owner=this.renderRoot.querySelector('[part="form-control"]');return owner&&isComposedFocusAvailable(owner)?owner:null}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id===this.value;return html`<div
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{activeElementIn}from"../../../internal/active-element.js";import{applyComposedFocusRepair,captureComposedFocusRepair,isComposedFocusAvailable}from"../../../internal/focus-navigation.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{AnchoredValidityController,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./model-select.styles.js";import{spellcheckFromAttributeConverter as spellcheckConverter}from"../../../internal/converters.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_model,LYRA_DEFAULT_modelSelectNoModels,LYRA_DEFAULT_modelSelectRequired,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog}from"../../../internal/default-strings.generated.js";class LyraModelSelect extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,model:LYRA_DEFAULT_model,modelSelectNoModels:LYRA_DEFAULT_modelSelectNoModels,modelSelectRequired:LYRA_DEFAULT_modelSelectRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog}}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0},required:{type:Boolean,reflect:!0,noAccessor:!0},value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!0,useDefault:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0}}}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}constructor(){super(),this.provider="",this.allowCustom=!1,this.readonly=!1,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autoCorrect="",this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.touched=!1,this.slotPresence=new SlotPresenceController(this),this.listId=nextId("model-select-list"),this.controlId=nextId("model-select-control"),this._fieldsetDisabled=!1,this._name="",this._disabled=!1,this._required=!1,this.suppressControlBlur=!1,this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,isReadonly:()=>this.readonly,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label],emitChange:detail=>this.emit("lr-change",detail),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state2,oldValue)=>{state2==="open"?this.requestUpdate("open",oldValue):this.requestUpdate()},onControlFocus:event=>this.captureModeFocus(event),onControlBlur:event=>{this.effectiveDisabled||(this.touched=!0),this.retireModeFocusAfterBlur(event)},forwardFreeInputClick:!0}),this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onTriggerBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onTriggerFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)},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.internals.setFormValue("")}click(){this.catalogPicker.click()}focus(options){this.catalogPicker.focus(options)}blur(){this.catalogPicker.blur()}get input(){return this.catalogPicker.input}get selectionStart(){return this.input?.selectionStart??null}set selectionStart(value){this.input&&(this.input.selectionStart=value)}get selectionEnd(){return this.input?.selectionEnd??null}set selectionEnd(value){this.input&&(this.input.selectionEnd=value)}get selectionDirection(){return this.input?.selectionDirection??null}set selectionDirection(value){this.input&&(this.input.selectionDirection=value)}select(){this.catalogPicker.select()}setSelectionRange(start,end,direction){this.catalogPicker.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){this.catalogPicker.setRangeText(replacement,start,end,selectMode)}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](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){super.willUpdate(changed);let modeChanged=!1;if(this.hasUpdated){const renderedControl=this.renderRoot.querySelector('[part="trigger"], [part="combobox-input"]');modeChanged=renderedControl?.getAttribute("part")==="trigger"!==this.closedMode,this.suppressControlBlur=modeChanged,this.catalogPicker.suppressControlEvents=modeChanged,this.modeFocusRepair=modeChanged&&renderedControl!==null&&activeElementIn(this.shadowRoot)===renderedControl?captureComposedFocusRepair(this,this.modeFocusFallback()??renderedControl)??void 0:modeChanged?this.focusedModeRepair:void 0}this.open&&(changed.has("catalog")||changed.has("value")||changed.has("allowCustom"))&&this.catalogPicker.reconcileRows(void 0,changed.has("value")||changed.has("allowCustom")||modeChanged,!1)}disconnectedCallback(){super.disconnectedCallback(),this.modeFocusRepair=void 0,this.focusedModeRepair=void 0,this.focusReturnTarget=void 0,this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.modeFocusRepair=void 0,this.focusedModeRepair=void 0,this.focusReturnTarget=void 0,this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}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._disabled&&this.hide(),this.updateValidity(),this.requestUpdate("disabled",old)}get required(){return this._required}set required(next){const old=this._required;this._required=!!next,this.toggleAttribute("required",this._required),this.updateValidity(),this.requestUpdate("required",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}updateValidity(){this.barredFromValidation?this.validityController.setValidity({}):this.required&&!this.value?this.validityController.setValidity({valueMissing:!0},this.localize("modelSelectRequired")):this.validityController.setValidity({}),this.publishValidityStates()}publishValidityStates(){syncValidityStates(this.internals,{required:this.required,hasInteracted:this.touched,barred:this.barredFromValidation})}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state2,_mode){this.catalogPicker.restoreState(state2)}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,disabled&&this.hide(),this.updateValidity(),this.requestUpdate()}checkValidity(){return this.internals.checkValidity()}reportValidity(){return this.touched=!0,this.publishValidityStates(),this.internals.reportValidity()}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.publishValidityStates()}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}updated(changed){super.updated(changed);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("readonly")||changed.has("touched")||changed.has("value"))&&(changed.has("readonly")&&this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),this.publishValidityStates(),this.suppressControlBlur=!1,this.catalogPicker.suppressControlEvents=!1;const focusRepair=this.modeFocusRepair;this.modeFocusRepair=void 0,focusRepair&&this.scheduleAfterUpdate(()=>{const replacement=this[VALIDITY_ANCHOR](),target=replacement&&isComposedFocusAvailable(replacement)?replacement:this.modeFocusFallback();applyComposedFocusRepair(focusRepair,target),this.focusedModeRepair===focusRepair&&(this.focusedModeRepair=void 0)},"model-select-mode-focus")}rememberFocusReturn(event){const related=event.relatedTarget;related&&related.nodeType===1&&isComposedFocusAvailable(related)&&(this.focusReturnTarget=related)}captureModeFocus(event){this.rememberFocusReturn(event);const control=event.currentTarget;!control||control.nodeType!==1||(this.focusedModeRepair=captureComposedFocusRepair(this,this.modeFocusFallback()??control)??void 0)}retireModeFocusAfterBlur(event){const destination=event.relatedTarget;if(destination&&destination.nodeType===1){this.focusedModeRepair=void 0;return}queueMicrotask(()=>{!this.suppressControlBlur&&!this.effectiveDisabled&&!this.hasAttribute("inert")&&(this.focusedModeRepair=void 0)})}modeFocusFallback(){if(this.focusReturnTarget&&isComposedFocusAvailable(this.focusReturnTarget))return this.focusReturnTarget;const owner=this.renderRoot.querySelector('[part="form-control"]');return owner&&isComposedFocusAvailable(owner)?owner:null}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id===this.value;return html`<div
2
2
  part="option"
3
3
  id=${id}
4
4
  role="option"
@@ -43,6 +43,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
43
43
  aria-label=${hostAriaLabel(this)??(hasLabel?nothing:this.placeholder||this.localize("model"))}
44
44
  aria-describedby=${describedBy||nothing}
45
45
  aria-required=${this.required?"true":"false"}
46
+ aria-readonly=${this.readonly?"true":"false"}
46
47
  aria-invalid=${this.touched&&!this.internals.validity.valid?"true":"false"}
47
48
  ?disabled=${this.effectiveDisabled}
48
49
  @click=${this.onTriggerClick}
@@ -73,6 +74,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
73
74
  aria-autocomplete="list"
74
75
  aria-describedby=${describedBy||nothing}
75
76
  aria-required=${this.required?"true":"false"}
77
+ aria-readonly=${this.readonly?"true":"false"}
76
78
  aria-invalid=${this.touched&&!this.internals.validity.valid?"true":"false"}
77
79
  autocomplete=${this.autocomplete||nothing}
78
80
  spellcheck=${this.spellcheck}
@@ -81,6 +83,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
81
83
  inputmode=${this.inputMode||nothing}
82
84
  enterkeyhint=${this.enterKeyHint||nothing}
83
85
  .value=${this.open?this.query:this.labelFor(this.value)}
86
+ .readOnly=${this.readonly}
84
87
  placeholder=${this.placeholder}
85
88
  ?disabled=${this.effectiveDisabled}
86
89
  @input=${this.onInput}
@@ -94,4 +97,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
94
97
  ${this.renderHintError(hasError,hasHint)}
95
98
  `}render(){return html`<div part="form-control" tabindex="-1">
96
99
  ${this.closedMode?this.renderClosed():this.renderFreeText()}
97
- </div>`}}__decorate([property()],LyraModelSelect.prototype,"provider",void 0),__decorate([property({attribute:!1})],LyraModelSelect.prototype,"catalog",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"allow-custom"})],LyraModelSelect.prototype,"allowCustom",void 0),__decorate([property()],LyraModelSelect.prototype,"label",void 0),__decorate([property()],LyraModelSelect.prototype,"hint",void 0),__decorate([property({attribute:"error-text"})],LyraModelSelect.prototype,"errorText",void 0),__decorate([property()],LyraModelSelect.prototype,"placeholder",void 0),__decorate([property({converter:spellcheckConverter})],LyraModelSelect.prototype,"spellcheck",void 0),__decorate([property()],LyraModelSelect.prototype,"autocapitalize",void 0),__decorate([property({attribute:"autocorrect"})],LyraModelSelect.prototype,"autoCorrect",void 0),__decorate([property()],LyraModelSelect.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraModelSelect.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraModelSelect.prototype,"enterKeyHint",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraModelSelect.prototype,"open",null),__decorate([property({reflect:!0})],LyraModelSelect.prototype,"size",void 0),__decorate([state()],LyraModelSelect.prototype,"touched",void 0);export{LyraModelSelect};
100
+ </div>`}}__decorate([property()],LyraModelSelect.prototype,"provider",void 0),__decorate([property({attribute:!1})],LyraModelSelect.prototype,"catalog",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"allow-custom"})],LyraModelSelect.prototype,"allowCustom",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraModelSelect.prototype,"readonly",void 0),__decorate([property()],LyraModelSelect.prototype,"label",void 0),__decorate([property()],LyraModelSelect.prototype,"hint",void 0),__decorate([property({attribute:"error-text"})],LyraModelSelect.prototype,"errorText",void 0),__decorate([property()],LyraModelSelect.prototype,"placeholder",void 0),__decorate([property({converter:spellcheckConverter})],LyraModelSelect.prototype,"spellcheck",void 0),__decorate([property()],LyraModelSelect.prototype,"autocapitalize",void 0),__decorate([property({attribute:"autocorrect"})],LyraModelSelect.prototype,"autoCorrect",void 0),__decorate([property()],LyraModelSelect.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraModelSelect.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraModelSelect.prototype,"enterKeyHint",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraModelSelect.prototype,"open",null),__decorate([property({reflect:!0})],LyraModelSelect.prototype,"size",void 0),__decorate([state()],LyraModelSelect.prototype,"touched",void 0);export{LyraModelSelect};
@@ -69,11 +69,9 @@ disabled:boolean;
69
69
  * `lr-change`. */
70
70
  private get inCatalog();private get temperatureDomain();
71
71
  /** Clamps `raw` into `[temperatureMin, temperatureMax]`, snapped to
72
- * `temperatureStep`'s grid anchored at the low end -- exactly mirroring
73
- * `lr-slider`'s own private `clampValue`/`domain` math -- so the
74
- * mirrored `temperature` readout can never disagree with what the nested
75
- * slider itself would clamp the same raw number to. */
76
- private clampTemperature;private formatTemperature;private emitChange;private onModelChange;private onTemperatureChange;
72
+ * `temperatureStep`'s grid anchored at the low end, matching the nested
73
+ * slider's shared numeric semantics. */
74
+ private clampTemperature;private readonly formatTemperature;private emitChange;private onModelChange;private onTemperatureChange;
77
75
  /** Mirrors the slider's *live* (uncommitted) value into the panel's own
78
76
  * `temperature` readout -- display only, no `emitChange()` -- mirroring
79
77
  * native `input` (continuous) vs. `change` (committed) semantics so the
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRange,decimalPlaces}from"../../../internal/numbers.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./model-settings-panel.styles.js";import"../model-select/model-select.class.js";import"../../forms/slider/slider.class.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_model,LYRA_DEFAULT_selectModel,LYRA_DEFAULT_temperature}from"../../../internal/default-strings.generated.js";const MODEL_SETTINGS_PANEL_LAYOUT=literalSetConverter(["vertical","compact"],"vertical"),DEFAULT_TEMPERATURE_MIN=0,DEFAULT_TEMPERATURE_MAX=2,DEFAULT_TEMPERATURE_STEP=.1,DEFAULT_TEMPERATURE=1;class LyraModelSettingsPanel extends LyraElement{constructor(){super(...arguments),this.provider="",this.model="",this.allowCustom=!1,this.temperature=DEFAULT_TEMPERATURE,this.temperatureMin=DEFAULT_TEMPERATURE_MIN,this.temperatureMax=DEFAULT_TEMPERATURE_MAX,this.temperatureStep=DEFAULT_TEMPERATURE_STEP,this._layout="vertical",this.disabled=!1,this.onModelChange=e=>{e.stopPropagation(),!this.disabled&&(this.model=e.detail.value,this.emitChange())},this.onTemperatureChange=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value),this.emitChange())},this.onTemperatureInput=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value))},this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,model:LYRA_DEFAULT_model,selectModel:LYRA_DEFAULT_selectModel,temperature:LYRA_DEFAULT_temperature}}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.styles=[LyraElement.styles,styles]}get layout(){return this._layout}set layout(next){const normalized=MODEL_SETTINGS_PANEL_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}get inCatalog(){return normalizeCatalog(this.catalog).some(entry=>entry.id===this.model)}get temperatureDomain(){const min=finiteNumber(this.temperatureMin,DEFAULT_TEMPERATURE_MIN),max=finiteNumber(this.temperatureMax,DEFAULT_TEMPERATURE_MAX);return{min,max,lo:Math.min(min,max),hi:Math.max(min,max),step:finiteRange(this.temperatureStep,0,0)}}clampTemperature(raw){const{lo,hi,step}=this.temperatureDomain,hasStep=step>0;let stepped=Math.min(hi,Math.max(lo,finiteNumber(raw,lo)));if(hasStep){const ratio=(stepped-lo)/step;if(Number.isFinite(ratio)){const candidate=lo+Math.round(ratio)*step;if(Number.isFinite(candidate)){const factor=10**Math.min(decimalPlaces(step),15);stepped=Math.round(candidate*factor)/factor}}}return Math.min(hi,Math.max(lo,stepped))}formatTemperature(value){const expanded=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:20}).format(value);return expanded.length<=24?expanded:getNumberFormat(this.effectiveLocale,{notation:"scientific",maximumSignificantDigits:6}).format(value)}emitChange(){this.emit("lr-change",{model:this.model,inCatalog:this.inCatalog,temperature:this.temperature})}willUpdate(changed){if(super.willUpdate(changed),changed.has("temperature")||changed.has("temperatureMin")||changed.has("temperatureMax")||changed.has("temperatureStep")){const clamped=this.clampTemperature(this.temperature);clamped!==this.temperature&&(this.temperature=clamped)}}render(){const domain=this.temperatureDomain,modelLabel=this.localize("model"),temperatureLabel=this.localize("temperature");return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{clampSteppedValue}from"../../../internal/step-value.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./model-settings-panel.styles.js";import"../model-select/model-select.class.js";import"../../forms/slider/slider.class.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_model,LYRA_DEFAULT_selectModel,LYRA_DEFAULT_temperature}from"../../../internal/default-strings.generated.js";const MODEL_SETTINGS_PANEL_LAYOUT=literalSetConverter(["vertical","compact"],"vertical"),DEFAULT_TEMPERATURE_MIN=0,DEFAULT_TEMPERATURE_MAX=2,DEFAULT_TEMPERATURE_STEP=.1,DEFAULT_TEMPERATURE=1;class LyraModelSettingsPanel extends LyraElement{constructor(){super(...arguments),this.provider="",this.model="",this.allowCustom=!1,this.temperature=DEFAULT_TEMPERATURE,this.temperatureMin=DEFAULT_TEMPERATURE_MIN,this.temperatureMax=DEFAULT_TEMPERATURE_MAX,this.temperatureStep=DEFAULT_TEMPERATURE_STEP,this._layout="vertical",this.disabled=!1,this.formatTemperature=value=>{const expanded=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:20}).format(value);return expanded.length<=24?expanded:getNumberFormat(this.effectiveLocale,{notation:"scientific",maximumSignificantDigits:6}).format(value)},this.onModelChange=e=>{e.stopPropagation(),!this.disabled&&(this.model=e.detail.value,this.emitChange())},this.onTemperatureChange=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value),this.emitChange())},this.onTemperatureInput=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value))},this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,model:LYRA_DEFAULT_model,selectModel:LYRA_DEFAULT_selectModel,temperature:LYRA_DEFAULT_temperature}}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.styles=[LyraElement.styles,styles]}get layout(){return this._layout}set layout(next){const normalized=MODEL_SETTINGS_PANEL_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}get inCatalog(){return normalizeCatalog(this.catalog).some(entry=>entry.id===this.model)}get temperatureDomain(){const min=finiteNumber(this.temperatureMin,DEFAULT_TEMPERATURE_MIN),max=finiteNumber(this.temperatureMax,DEFAULT_TEMPERATURE_MAX);return{min,max,lo:Math.min(min,max),hi:Math.max(min,max),step:finiteRange(this.temperatureStep,0,0)}}clampTemperature(raw){const{lo,hi,step}=this.temperatureDomain,temperature=finiteNumber(raw,lo);return clampSteppedValue(temperature,lo,hi,step)}emitChange(){this.emit("lr-change",{model:this.model,inCatalog:this.inCatalog,temperature:this.temperature})}willUpdate(changed){if(super.willUpdate(changed),changed.has("temperature")||changed.has("temperatureMin")||changed.has("temperatureMax")||changed.has("temperatureStep")){const clamped=this.clampTemperature(this.temperature);clamped!==this.temperature&&(this.temperature=clamped)}}render(){const domain=this.temperatureDomain,modelLabel=this.localize("model"),temperatureLabel=this.localize("temperature");return html`
2
2
  <div part="base" @input=${this.containNativeEvent} @change=${this.containNativeEvent}>
3
3
  <div part="model-row">
4
4
  <lr-model-select
@@ -24,6 +24,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
24
24
  .max=${domain.max}
25
25
  .step=${domain.step}
26
26
  .valueAsNumber=${this.temperature}
27
+ .valueFormatter=${this.formatTemperature}
27
28
  .showValue=${!1}
28
29
  .disabled=${this.disabled}
29
30
  @focus=${this.containNativeEvent}
@@ -67,7 +67,12 @@ bytes?:number;status?:LyraAttachmentUploadStatus;progress?:number;}export interf
67
67
  * @status stable
68
68
  * @since 7.0.0
69
69
  */
70
- export declare class LyraPromptInput extends LyraElement<LyraPromptInputEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];private suggestionCaretGeneration;private _value;get value():string;set value(next:string);status:ChatComposerStatus;placeholder:string;disabled:boolean;readOnly:boolean;minLength?:number;maxLength?:number;submitOnEnter:boolean;
70
+ export declare class LyraPromptInput extends LyraElement<LyraPromptInputEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
71
+ /** Prompt-queue metadata is opaque caller state; retain it while freezing the forwarding
72
+ * envelope instead of recursively reflecting a detail the child has already canonicalized. */
73
+ protected static readonly identityEventDetailProperties:Readonly<{'lr-send-now':readonly string[];}>;protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-queue-change':readonly string[];}>;private suggestionCaretGeneration;private _value;get value():string;set value(next:string);private statusValue;
74
+ /** Forwarded composer state. Invalid input reads as the safe idle state without rewriting this host's attribute. */
75
+ get status():ChatComposerStatus;set status(value:ChatComposerStatus);placeholder:string;disabled:boolean;readOnly:boolean;minLength?:number;maxLength?:number;submitOnEnter:boolean;
71
76
  /** Forwarded to the composed native textarea. `spellcheck="false"` parses as `false`, matching
72
77
  * the textarea's true default while remaining usable from plain HTML. */
73
78
  spellcheck:boolean;
@@ -98,4 +103,6 @@ queue:readonly PromptQueueItem[];label:string;accessibleLabel:string|null;privat
98
103
  /** The composed native textarea, or `null` before it has rendered. */
99
104
  get input():HTMLTextAreaElement|null;get selectionStart():number|null;set selectionStart(value:number|null);get selectionEnd():number|null;set selectionEnd(value:number|null);get selectionDirection():ChatComposerSelectionDirection|null;set selectionDirection(value:ChatComposerSelectionDirection|null);select():void;
100
105
  /** Forwards the native selection range to the composed textarea; a pre-render call is a no-op. */
101
- setSelectionRange(start:number|null,end:number|null,direction?:ChatComposerSelectionDirection):void;setRangeText(replacement:string):void;setRangeText(replacement:string,start:number,end:number,selectMode?:SelectionMode):void;protected willUpdate(changed:PropertyValues<this>):void;connectedCallback():void;disconnectedCallback():void;protected updated(_changed:PropertyValues):void;private suggestions;private detectSuggestion;private onInput;private onChange;private onSubmit;private onStop;private onKeyDown;private closeSuggestions;private onCompositeFocusOut;private onNativeInput;private onNativeChange;private onNativeFocus;private onNativeBlur;private syncSuggestionAria;private onSuggestionSelect;private onFiles;private get effectiveAttachments();private get effectiveSources();private get effectiveSelectedSourceIds();private get effectiveQueue();private renderDefaultAttachmentTrigger;private reemit;private renderAttachment;private onAttachmentPreviewRequest;private renderControls;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-input':LyraPromptInput;}}
106
+ setSelectionRange(start:number|null,end:number|null,direction?:ChatComposerSelectionDirection):void;setRangeText(replacement:string):void;setRangeText(replacement:string,start:number,end:number,selectMode?:SelectionMode):void;protected willUpdate(changed:PropertyValues<this>):void;connectedCallback():void;disconnectedCallback():void;protected updated(_changed:PropertyValues):void;private suggestions;private detectSuggestion;private onInput;private onChange;private onSubmit;private onStop;private onKeyDown;
107
+ /** A suggestion session owns only its textarea and its own popup, never sibling prompt controls. */
108
+ private suggestionFocusIsOwned;private closeSuggestions;private onCompositeKeyDown;private onCompositeFocusOut;private onNativeInput;private onNativeChange;private onNativeFocus;private onNativeBlur;private onSuggestionSelect;private onFiles;private get effectiveAttachments();private get effectiveSources();private get effectiveSelectedSourceIds();private get effectiveQueue();private renderDefaultAttachmentTrigger;private reemit;private renderAttachment;private onAttachmentPreviewRequest;private renderControls;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-input':LyraPromptInput;}}
@@ -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,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.suggestionCaretGeneration=0,this._value="",this.status="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.submitOnEnter=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.label="",this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.onCompositeFocusOut=()=>{const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const focused=deepActiveElementIn(this.ownerDocument);(!focused||!composedContains(this,focused))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}get value(){return this._value}set value(next){const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(start===void 0||end===void 0?composer.setRangeText(replacement):composer.setRangeText(replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("focusout",this.onCompositeFocusOut)}disconnectedCallback(){this.removeEventListener("focusout",this.onCompositeFocusOut),this.suggestionCaretGeneration+=1,this.closeSuggestions(),super.disconnectedCallback()}updated(_changed){super.updated(_changed);const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor),this.syncSuggestionAria(),popover?.updateComplete.then(()=>{this.suggestionPopover===popover&&this.syncSuggestionAria()})}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{const reflected=this.syncSuggestionAria(),focused=deepActiveElementIn(this.ownerDocument);shouldMoveFocus&&!reflected&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&focused!==null&&composedContains(this,focused)&&await popover.focusActiveOption({ownsFocus:()=>{const current=deepActiveElementIn(this.ownerDocument);return generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&current!==null&&composedContains(this,current)}})})}}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0,this.syncSuggestionAria()}syncSuggestionAria(){const input=this.composer?.input,popover=this.suggestionPopover;return input?(input.removeAttribute("aria-controls"),popover?popover.syncActiveDescendant(input):(input.removeAttribute("aria-activedescendant"),!1)):!1}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret),this.syncSuggestionAria()})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}get effectiveSources(){return firstByPromptIdentity(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return firstByPromptIdentity(this.selectedSourceIds,sourceId=>sourceId)}get effectiveQueue(){return firstByPromptIdentity(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{isHtmlElement}from"../../../internal/dom-guards.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.suggestionCaretGeneration=0,this._value="",this.statusValue="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.submitOnEnter=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.label="",this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.onCompositeKeyDown=event=>{event.composedPath()[0]===this.composer?.input&&this.onKeyDown(event)},this.onCompositeFocusOut=event=>{const popover=this.suggestionPopover;if(!popover||!this.activeSuggestion||!popover.open)return;const relatedTarget=isHtmlElement(event.relatedTarget)?event.relatedTarget:null;this.suggestionFocusIsOwned(popover,relatedTarget)||(this.suggestionNavigationGeneration+=1);const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const currentPopover=this.suggestionPopover;(!currentPopover||!this.suggestionFocusIsOwned(currentPopover))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}get value(){return this._value}set value(next){const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get status(){return this.statusValue}set status(value){const previous=this.statusValue;this.statusValue=normalizeChatComposerStatus(value),this.requestUpdate("status",previous)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(start===void 0||end===void 0?composer.setRangeText(replacement):composer.setRangeText(replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this.onCompositeKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this.onCompositeKeyDown,!0),this.suggestionCaretGeneration+=1,this.closeSuggestions(),super.disconnectedCallback()}updated(_changed){super.updated(_changed);const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor)}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){if(event.defaultPrevented)return;const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{shouldMoveFocus&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&this.suggestionFocusIsOwned(popover)&&await popover.focusActiveOption({ownsFocus:()=>generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&this.suggestionFocusIsOwned(popover)})})}}suggestionFocusIsOwned(popover,focused=deepActiveElementIn(this.ownerDocument)){return focused===this.composer?.input||focused===this.composer||focused!==null&&composedContains(popover,focused)}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret)})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}get effectiveSources(){return firstByPromptIdentity(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return firstByPromptIdentity(this.selectedSourceIds,sourceId=>sourceId)}get effectiveQueue(){return firstByPromptIdentity(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger
2
2
  .capabilities=${this.attachmentCapabilities}
3
3
  .disabled=${this.disabled}
4
4
  @lr-files=${this.onFiles}
@@ -58,6 +58,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
58
58
  @change=${this.onNativeChange}
59
59
  @focus=${this.onNativeFocus}
60
60
  @blur=${this.onNativeBlur}
61
+ @focusout=${this.onCompositeFocusOut}
61
62
  >
62
63
  ${queue.length?html`<lr-prompt-queue
63
64
  part="queue"
@@ -89,7 +90,6 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
89
90
  @lr-change=${this.onChange}
90
91
  @lr-submit=${this.onSubmit}
91
92
  @lr-stop=${this.onStop}
92
- @keydown=${this.onKeyDown}
93
93
  >
94
94
  <span slot="start" part="start">
95
95
  <slot name="start">${this.renderDefaultAttachmentTrigger()}</slot>
@@ -115,4 +115,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
115
115
  @lr-mention-close=${event=>{event.stopPropagation(),this.closeSuggestions()}}
116
116
  ></lr-mention-popover>
117
117
  ${this.slotPresence.has("footer")?html`<div part="footer"><slot name="footer"></slot></div>`:html`<slot name="footer" hidden aria-hidden="true"></slot>`}
118
- </section>`}}__decorate([property()],LyraPromptInput.prototype,"value",null),__decorate([property()],LyraPromptInput.prototype,"status",void 0),__decorate([property()],LyraPromptInput.prototype,"placeholder",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptInput.prototype,"disabled",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"readonly"})],LyraPromptInput.prototype,"readOnly",void 0),__decorate([property({type:Number,attribute:"minlength"})],LyraPromptInput.prototype,"minLength",void 0),__decorate([property({type:Number,attribute:"maxlength"})],LyraPromptInput.prototype,"maxLength",void 0),__decorate([property({type:Boolean,attribute:"submit-on-enter",converter:trueDefaultBooleanConverter})],LyraPromptInput.prototype,"submitOnEnter",void 0),__decorate([property({converter:trueDefaultBooleanConverter})],LyraPromptInput.prototype,"spellcheck",void 0),__decorate([property()],LyraPromptInput.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraPromptInput.prototype,"autocorrect",null),__decorate([property()],LyraPromptInput.prototype,"wrap",void 0),__decorate([property()],LyraPromptInput.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraPromptInput.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraPromptInput.prototype,"enterKeyHint",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"attachments",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"attachmentCapabilities",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"mentionItems",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"commandItems",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"modelCatalog",void 0),__decorate([property()],LyraPromptInput.prototype,"model",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"voiceCatalog",void 0),__decorate([property()],LyraPromptInput.prototype,"voice",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"sources",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"selectedSourceIds",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"queue",void 0),__decorate([property()],LyraPromptInput.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraPromptInput.prototype,"accessibleLabel",void 0),__decorate([state()],LyraPromptInput.prototype,"activeSuggestion",void 0),__decorate([query("lr-chat-composer")],LyraPromptInput.prototype,"composer",void 0),__decorate([query("lr-mention-popover")],LyraPromptInput.prototype,"suggestionPopover",void 0);export{LyraPromptInput};
118
+ </section>`}}__decorate([property()],LyraPromptInput.prototype,"value",null),__decorate([property()],LyraPromptInput.prototype,"status",null),__decorate([property()],LyraPromptInput.prototype,"placeholder",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptInput.prototype,"disabled",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"readonly"})],LyraPromptInput.prototype,"readOnly",void 0),__decorate([property({type:Number,attribute:"minlength"})],LyraPromptInput.prototype,"minLength",void 0),__decorate([property({type:Number,attribute:"maxlength"})],LyraPromptInput.prototype,"maxLength",void 0),__decorate([property({type:Boolean,attribute:"submit-on-enter",converter:trueDefaultBooleanConverter})],LyraPromptInput.prototype,"submitOnEnter",void 0),__decorate([property({converter:trueDefaultBooleanConverter})],LyraPromptInput.prototype,"spellcheck",void 0),__decorate([property()],LyraPromptInput.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraPromptInput.prototype,"autocorrect",null),__decorate([property()],LyraPromptInput.prototype,"wrap",void 0),__decorate([property()],LyraPromptInput.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraPromptInput.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraPromptInput.prototype,"enterKeyHint",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"attachments",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"attachmentCapabilities",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"mentionItems",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"commandItems",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"modelCatalog",void 0),__decorate([property()],LyraPromptInput.prototype,"model",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"voiceCatalog",void 0),__decorate([property()],LyraPromptInput.prototype,"voice",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"sources",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"selectedSourceIds",void 0),__decorate([property({attribute:!1})],LyraPromptInput.prototype,"queue",void 0),__decorate([property()],LyraPromptInput.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraPromptInput.prototype,"accessibleLabel",void 0),__decorate([state()],LyraPromptInput.prototype,"activeSuggestion",void 0),__decorate([query("lr-chat-composer")],LyraPromptInput.prototype,"composer",void 0),__decorate([query("lr-mention-popover")],LyraPromptInput.prototype,"suggestionPopover",void 0);export{LyraPromptInput};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=controls]{align-items:flex-start;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=controls]>*{min-inline-size:min(100%, var(--lr-prompt-input-control-width,var(--lr-size-12rem)));flex:1 1 var(--lr-prompt-input-control-width,var(--lr-size-12rem))}[part=sources]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);inline-size:100%}[part=sources-summary]{min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);cursor:pointer}[part=sources-summary]:hover{color:var(--lr-color-brand)}[part=sources-summary]:active{color:var(--lr-color-brand);background:color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=sources-summary]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=source-picker]{padding:var(--lr-space-s);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border)}[part=chips]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=start]{display:inline-flex}@container (inline-size<=319.98px){[part=controls]{flex-direction:column}[part=controls]>*{inline-size:100%}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=base]{gap:var(--lr-space-s);flex-direction:column;min-inline-size:0;display:flex}[part=controls]{align-items:flex-start;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=controls]>*{min-inline-size:min(100%, var(--lr-prompt-input-control-width,var(--lr-size-12rem)));flex:1 1 var(--lr-prompt-input-control-width,var(--lr-size-12rem))}[part=sources]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);inline-size:100%}[part=sources-summary]{min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);text-align:start;cursor:pointer;align-items:center;display:flex}[part=sources-summary]:hover{color:var(--lr-color-brand)}[part=sources-summary]:active{color:var(--lr-color-brand);background:color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=sources-summary]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=source-picker]{padding:var(--lr-space-s);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border)}[part=chips]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=start]{display:inline-flex}@container (inline-size<=319.98px){[part=controls]{flex-direction:column}[part=controls]>*{inline-size:100%}}`;export{styles};
@@ -1,4 +1,6 @@
1
- import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{DocumentRef}from'../../../ai/types.js';import{LyraElement}from'../../../internal/lyra-element.js';export interface PromptQueueItem{id:string;value:string;attachments?:readonly DocumentRef[];createdAt?:number;metadata?:Record<string,unknown>;}export type PromptQueueChangeReason='edit'|'remove'|'reorder';export interface PromptQueueChangeDetail{items:PromptQueueItem[];reason:PromptQueueChangeReason;itemId:string;}export interface LyraPromptQueueEventMap{'lr-queue-change':CustomEvent<LyraEventDetailSnapshot<PromptQueueChangeDetail>>;'lr-send-now':CustomEvent<LyraEventDetailSnapshot<{item:PromptQueueItem;}>>;}
1
+ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{DocumentRef}from'../../../ai/types.js';import{LyraElement}from'../../../internal/lyra-element.js';export interface PromptQueueItem{id:string;value:string;attachments?:readonly DocumentRef[];createdAt?:number;
2
+ /** Opaque caller metadata preserved in proposed queue and send-now payloads. */
3
+ metadata?:Record<string,unknown>;}export type PromptQueueChangeReason='edit'|'remove'|'reorder';export interface PromptQueueChangeDetail{items:PromptQueueItem[];reason:PromptQueueChangeReason;itemId:string;}export interface LyraPromptQueueEventMap{'lr-queue-change':CustomEvent<LyraEventDetailSnapshot<PromptQueueChangeDetail>>;'lr-send-now':CustomEvent<LyraEventDetailSnapshot<{item:PromptQueueItem;}>>;}
2
4
  /**
3
5
  * `<lr-prompt-queue>` — a controlled queue of follow-up prompts that can be edited, reordered,
4
6
  * removed, or sent immediately while another agent turn is active.
@@ -8,8 +10,10 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
8
10
  * the nearest surviving row receives focus; an emptied queue focuses its stable region instead.
9
11
  * Controlled updates never steal focus when the removed row did not own it.
10
12
  *
11
- * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
12
- * collection and reassign it after changes; mutating the assigned array does not update the view.
13
+ * Public item sequences are bounded, frozen snapshots. Admitted item identities remain opaque only
14
+ * while a descriptor-safe projection copies the queue's display and proposal fields once; later
15
+ * rendering and events never reread the source row or its opaque metadata. Create a new collection
16
+ * and reassign it after changes; mutating an assigned array does not update the view.
13
17
  *
14
18
  * @customElement lr-prompt-queue
15
19
  * @event lr-queue-change - A proposed controlled queue update. `detail: { items, reason, itemId }`.
@@ -28,4 +32,16 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
28
32
  * @status stable
29
33
  * @since 7.0.0
30
34
  */
31
- export declare class LyraPromptQueue extends LyraElement<LyraPromptQueueEventMap>{protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];items:readonly PromptQueueItem[];editable:boolean;disabled:boolean;label:string;accessibleLabel:string|null;private pendingRemovalFocus?;private get effectiveItems();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private emitChange;private edit;private removeItem;private move;private sendNow;private containNativeEvent;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-queue':LyraPromptQueue;}}
35
+ export declare class LyraPromptQueue extends LyraElement<LyraPromptQueueEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
36
+ /** Queue items may carry opaque host metadata. Keep each admitted source identity only while the
37
+ * canonical projection copies its closed row schema once, rather than deep-cloning unknown data. */
38
+ protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
39
+ /** Queue metadata is opaque caller state. Preserve it through the frozen event envelope instead
40
+ * of recursively reflecting it after the canonical row projection has admitted it. */
41
+ protected static readonly identityEventDetailProperties:Readonly<{'lr-send-now':readonly string[];}>;protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-queue-change':readonly string[];}>;
42
+ /** Controlled queued prompts. Accessor-backed or malformed rows and attachments are omitted;
43
+ * duplicate nonblank item ids normalize first-wins after full row validation. */
44
+ items:readonly PromptQueueItem[];editable:boolean;disabled:boolean;label:string;accessibleLabel:string|null;private pendingRemovalFocus?;private readonly canonicalItemsBySource;private canonicalItemsFor;
45
+ /** Never reproject a prior retained collection: a caller may have made its opaque rows hostile
46
+ * after admission, while focused controlled-update recovery needs only its recorded identities. */
47
+ private cachedCanonicalItemsFor;private get effectiveItems();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private emitChange;private edit;private removeItem;private move;private sendNow;private containNativeEvent;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-queue':LyraPromptQueue;}}