@aceshooting/lyra-ui 13.0.0 → 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 +212 -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 +21 -14
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{detectPlatform}from"../../../internal/platform.js";import{nextId}from"../../../internal/a11y.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{styles}from"./command-palette.styles.js";import{resolveCssLength}from"../../../internal/css-length.js";import{LYRA_DEFAULT_commandPaletteEmpty,LYRA_DEFAULT_commandPaletteLabel,LYRA_DEFAULT_commandPalettePlaceholder,LYRA_DEFAULT_commandPaletteResults}from"../../../internal/default-strings.generated.js";const COMMAND_ROW_HEIGHT=48,GROUP_ROW_HEIGHT=32,RESULT_OVERSCAN_ROWS=6,hotkeyOwners=new WeakMap;function registerHotkeyOwner(view,palette){const owners=hotkeyOwners.get(view)??[];hotkeyOwners.set(view,[...owners.filter(candidate=>candidate!==palette),palette])}function unregisterHotkeyOwner(view,palette){const owners=hotkeyOwners.get(view)?.filter(candidate=>candidate!==palette)??[];owners.length?hotkeyOwners.set(view,owners):hotkeyOwners.delete(view)}class LyraCommandPalette extends LyraElement{constructor(){super(...arguments),this._open=!1,this.commands=[],this.hotkey="mod+k",this.queryText="",this.activeIndex=0,this.listScrollTop=0,this.listViewportHeight=COMMAND_ROW_HEIGHT*10,this.rowPitch=COMMAND_ROW_HEIGHT,this.groupPitch=GROUP_ROW_HEIGHT,this.listId=nextId("command-list"),this.haystacksLocale="",this.haystacks=[],this.filteredForQuery="",this.filteredForLocale="",this.filteredRows=[],this.normalizedRows=[],this.normalizedCommandIds=new Map,this.onGlobalKeyDown=event=>{if(event.repeat||event.isComposing||event.keyCode===229)return;const view=this.runtimeWindow;if(!view||!this.matchesShortcut(event))return;const owners=hotkeyOwners.get(view)??[];let owner;for(let index=owners.length-1;index>=0;index-=1){const candidate=owners[index];if(candidate.isConnected&&candidate.matchesShortcut(event)){owner=candidate;break}}owner===this&&(event.preventDefault(),this.openPalette())},this.onKeyDown=event=>{if(event.isComposing||event.keyCode===229)return;const rows=this.filtered;if(event.key==="ArrowDown"){event.preventDefault();const next=this.seekEnabled(rows,this.activeIndex+1,1);next!==-1&&this.setActiveIndex(rows,next)}else if(event.key==="ArrowUp"){event.preventDefault();const previous=this.seekEnabled(rows,this.activeIndex-1,-1);previous!==-1&&this.setActiveIndex(rows,previous)}else if(event.key==="Enter"){const active=rows[this.activeIndex];active&&(event.preventDefault(),this.select(active))}},this.onInput=event=>{event.stopPropagation(),this.queryText=event.target.value,this.listScrollTop=0;const list=this.renderRoot.querySelector('[part="list"]');list&&(list.scrollTop=0);const rows=this.filtered;this.setActiveIndex(rows,this.seekEnabled(rows,0,1))},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.onListScroll=event=>{const list=event.currentTarget;if(this.listScrollFrame!==void 0)return;const view=this.runtimeWindow??this.ownerDocument.defaultView;if(!view){this.listScrollTop=list.scrollTop;return}this.listScrollFrame=view.requestAnimationFrame(()=>{this.listScrollFrame=void 0,this.listScrollTop=list.scrollTop})}}static{this.defaultStrings={...super.defaultStrings,commandPaletteEmpty:LYRA_DEFAULT_commandPaletteEmpty,commandPaletteLabel:LYRA_DEFAULT_commandPaletteLabel,commandPalettePlaceholder:LYRA_DEFAULT_commandPalettePlaceholder,commandPaletteResults:LYRA_DEFAULT_commandPaletteResults}}static{this.ownedCollectionProperties=Object.freeze(["commands"])}static{this.identityCollectionProperties=Object.freeze(["commands"])}static{this.identityEventDetailProperties=Object.freeze({"lr-select":Object.freeze(["command"])})}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-select"])}get open(){return this._open}set open(next){const normalized=!!next;if(normalized!==this._open){if(!this.hasUpdated){this.commitOpen(normalized);return}this.requestOpen(normalized)}}get effectiveCommands(){if(this.normalizedForCommands!==this.commands){this.normalizedForCommands=this.commands;const seen=new Set;this.normalizedRows=[],this.normalizedCommandIds=new Map;for(const command of this.commands??[]){let commandId,label;try{commandId=command?.commandId,label=command?.label}catch{continue}typeof commandId!="string"||commandId.trim()===""||typeof label!="string"||label.trim()===""||seen.has(commandId)||(seen.add(commandId),this.normalizedRows.push(command),this.normalizedCommandIds.set(command,commandId))}}return this.normalizedRows}get searchHaystacks(){const locale=this.effectiveLocale,commands=this.effectiveCommands;return(this.haystacksFor!==commands||this.haystacksLocale!==locale)&&(this.haystacksFor=commands,this.haystacksLocale=locale,this.haystacks=commands.map(command=>{let keywords;try{keywords=command.keywords}catch{keywords=[]}return[command.label,command.description??"",command.group??"",...Array.isArray(keywords)?keywords.filter(keyword=>typeof keyword=="string"):[]].join(" ").toLocaleLowerCase(locale)})),this.haystacks}willUpdate(changed){super.willUpdate(changed),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0));const rows=this.filtered;let nextIndex=this.activeCommandId?rows.findIndex(command=>this.normalizedCommandIds.get(command)===this.activeCommandId):-1;if(nextIndex<0||rows[nextIndex]?.disabled){const start=Math.min(Math.max(this.activeIndex,0),Math.max(0,rows.length-1));nextIndex=this.seekEnabled(rows,start,1),nextIndex===-1&&(nextIndex=this.seekEnabled(rows,start-1,-1))}this.activeIndex=nextIndex,this.activeCommandId=nextIndex>=0?this.normalizedCommandIds.get(rows[nextIndex]):void 0}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial(),changed.has("activeIndex")&&(this.renderRoot.querySelector('[part="command"][data-active="true"]')?.scrollIntoView({block:"nearest"}),this.scrollActiveIntoView());const list=this.renderRoot.querySelector('[part="list"]');this.observeList(list??void 0)}observeList(list){list!==this.observedList&&(this.observedList&&this.listResizeObserver?.unobserve(this.observedList),this.clearPitchSentinels(),this.observedList=list,list&&(this.listResizeObserver?.observe(list),queueMicrotask(()=>{this.isConnected&&this.observedList===list&&this.measureRowPitch()}))),this.observePitchSentinels()}observePitchSentinels(){const row=this.renderRoot.querySelector('[part="command"]')??void 0,group=this.renderRoot.querySelector('[part="group"]')??void 0;row!==this.observedRow&&(this.observedRow&&this.listResizeObserver?.unobserve(this.observedRow),this.observedRow=row,row&&this.listResizeObserver?.observe(row)),group!==this.observedGroup&&(this.observedGroup&&this.listResizeObserver?.unobserve(this.observedGroup),this.observedGroup=group,group&&this.listResizeObserver?.observe(group))}clearPitchSentinels(){this.observedRow&&this.listResizeObserver?.unobserve(this.observedRow),this.observedGroup&&this.listResizeObserver?.unobserve(this.observedGroup),this.observedRow=void 0,this.observedGroup=void 0}measureRowPitch(){const style=this.ownerDocument.defaultView?.getComputedStyle(this);if(!style)return;const row=resolveCssLength(style.getPropertyValue("--lr-command-palette-row-height").trim()||style.getPropertyValue("--_lr-command-palette-row-height").trim(),{host:this}),group=resolveCssLength(style.getPropertyValue("--lr-command-palette-group-height").trim()||style.getPropertyValue("--_lr-command-palette-group-height").trim(),{host:this});row!==void 0&&row>0&&row!==this.rowPitch&&(this.rowPitch=row),group!==void 0&&group>0&&group!==this.groupPitch&&(this.groupPitch=group)}scheduleRowPitchMeasurement(){if(this.rowPitchFrame!==void 0)return;const view=this.runtimeWindow??this.ownerDocument.defaultView;if(!view){this.measureRowPitch();return}this.rowPitchFrame=view.requestAnimationFrame(()=>{this.rowPitchFrame=void 0,this.isConnected&&this.measureRowPitch()})}connectedCallback(){super.connectedCallback();const view=this.ownerDocument.defaultView;this.runtimeWindow=view??void 0,view&&(registerHotkeyOwner(view,this),view.addEventListener("keydown",this.onGlobalKeyDown));const ResizeObserverCtor=view?.ResizeObserver;if(ResizeObserverCtor&&view){let observer;observer=new ResizeObserverCtor(entries=>{if(this.listResizeObserver!==observer||this.runtimeWindow!==view)return;this.scheduleRowPitchMeasurement();const entry=entries.find(candidate=>candidate.target===this.observedList);if(!entry)return;const height=entry.borderBoxSize?.[0]?.blockSize??entry.contentRect.height;height>0&&this.listViewportHeight!==height&&(this.listViewportHeight=height)}),this.listResizeObserver=observer}else this.listResizeObserver=void 0;this.hasUpdated&&this.observeList(this.renderRoot.querySelector('[part="list"]')??void 0),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback();const view=this.runtimeWindow;view&&(unregisterHotkeyOwner(view,this),view.removeEventListener("keydown",this.onGlobalKeyDown)),this.overlay?.suspend(),this.listResizeObserver?.disconnect(),this.listResizeObserver=void 0,this.observedList=void 0,this.observedRow=void 0,this.observedGroup=void 0,this.listScrollFrame!==void 0&&(view?.cancelAnimationFrame(this.listScrollFrame),this.listScrollFrame=void 0),this.rowPitchFrame!==void 0&&(view?.cancelAnimationFrame(this.rowPitchFrame),this.rowPitchFrame=void 0),this.runtimeWindow=void 0}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="dialog"]')??null,onEscape:()=>this.close(),onBackdrop:()=>this.close(),lockScroll:!0,suspendWhenUnrendered:!0})}openPalette(){this.requestOpen(!0)}close(){this.requestOpen(!1)}requestOpen(next){if(next===this._open||this.openRequestTarget===next)return!1;this.openRequestTarget=next;const prevented=this.emit(next?"lr-open":"lr-close",null,{cancelable:!0}).defaultPrevented;return this.openRequestTarget=void 0,prevented?(this.toggleAttribute("open",this._open),!1):(next&&this.resetOpeningState(),this.commitOpen(next),!0)}resetOpeningState(){this.queryText="",this.listScrollTop=0;const rows=this.filtered;this.setActiveIndex(rows,this.seekEnabled(rows,0,1))}commitOpen(next){if(next===this._open)return;const old=this._open;this._open=next,this.requestUpdate("open",old)}registerCommand(command){return this.commands=[...this.commands,command],()=>{this.commands=this.commands.filter(item=>item!==command)}}matchesShortcut(event){const parts=this.hotkey.toLowerCase().split("+").map(part=>part.trim()),key=parts.pop();if(!key||event.key.toLowerCase()!==key)return!1;const modifiers=new Set(parts);if(modifiers.size!==parts.length||[...modifiers].some(part=>!["alt","ctrl","meta","mod","shift"].includes(part))||modifiers.has("mod")&&(modifiers.has("ctrl")||modifiers.has("meta")))return!1;const isMac=detectPlatform((this.runtimeWindow??this.ownerDocument.defaultView)?.navigator)==="mac",expectedCtrl=modifiers.has("ctrl")||modifiers.has("mod")&&!isMac,expectedMeta=modifiers.has("meta")||modifiers.has("mod")&&isMac;return event.ctrlKey===expectedCtrl&&event.metaKey===expectedMeta&&event.shiftKey===modifiers.has("shift")&&event.altKey===modifiers.has("alt")}get filtered(){const locale=this.effectiveLocale,query=this.queryText.trim().toLocaleLowerCase(locale),commands=this.effectiveCommands;if(this.filteredForCommands!==commands||this.filteredForQuery!==query||this.filteredForLocale!==locale)if(this.filteredForCommands=commands,this.filteredForQuery=query,this.filteredForLocale=locale,!query)this.filteredRows=[...commands];else{const haystacks=this.searchHaystacks;this.filteredRows=commands.filter((_,index)=>haystacks[index].includes(query))}return this.filteredRows}select(command){command.disabled||(this.emit("lr-select",{command}),command.onSelect?.(),this.close())}seekEnabled(rows,from,step){for(let index=from;index>=0&&index<rows.length;index+=step)if(!rows[index].disabled)return index;return-1}setActiveIndex(rows,index){this.activeIndex=index,this.activeCommandId=index>=0?this.normalizedCommandIds.get(rows[index]):void 0}get resultModel(){const rows=this.filtered;if(this.resultModelFor===rows&&this.resultModelRowPitch===this.rowPitch&&this.resultModelGroupPitch===this.groupPitch&&this.resultModelCache)return this.resultModelCache;const resultRows=[],groups=[];let top=0,previousGroup,group;for(let index=0;index<rows.length;index++){const command=rows[index],label=command.group??"";(!group||label!==previousGroup)&&(group={index:groups.length,label,headingTop:label?top:void 0,rows:[]},groups.push(group),previousGroup=label,label&&(top+=this.groupPitch));const row={command,index,top,groupIndex:group.index};group.rows.push(row),resultRows.push(row),top+=this.rowPitch}return this.resultModelFor=rows,this.resultModelRowPitch=this.rowPitch,this.resultModelGroupPitch=this.groupPitch,this.resultModelCache={rows:resultRows,groups,totalHeight:top},this.resultModelCache}visibleGroups(model){if(model.rows.length===0)return[];const minimum=Math.max(0,this.listScrollTop-this.rowPitch*RESULT_OVERSCAN_ROWS),maximum=this.listScrollTop+this.listViewportHeight+this.rowPitch*RESULT_OVERSCAN_ROWS;let low=0,high=model.rows.length-1;for(;low<high;){const middle=low+high>>1;model.rows[middle].top+this.rowPitch<minimum?low=middle+1:high=middle}const visibleIndexes=new Set;for(let index=low;index<model.rows.length&&!(model.rows[index].top>maximum);index++)visibleIndexes.add(index);return this.activeIndex>=0&&visibleIndexes.add(this.activeIndex),model.groups.map(entry=>({...entry,rows:entry.rows.filter(row=>visibleIndexes.has(row.index))})).filter(entry=>entry.rows.length>0)}optionId(index){return`${this.listId}-opt-${index}`}scrollActiveIntoView(){if(this.activeIndex<0)return;const list=this.renderRoot.querySelector('[part="list"]'),row=this.resultModel.rows[this.activeIndex];if(!list||!row)return;const top=row.top,bottom=top+this.rowPitch;top<list.scrollTop?list.scrollTop=top:bottom>list.scrollTop+list.clientHeight&&(list.scrollTop=Math.max(0,bottom-list.clientHeight))}renderCommand(row,total){const command=row.command,active=row.index===this.activeIndex;return html`<button
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{detectPlatform}from"../../../internal/platform.js";import{nextId}from"../../../internal/a11y.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{styles}from"./command-palette.styles.js";import{resolveCssLength}from"../../../internal/css-length.js";import{LYRA_DEFAULT_commandPaletteEmpty,LYRA_DEFAULT_commandPaletteLabel,LYRA_DEFAULT_commandPalettePlaceholder,LYRA_DEFAULT_commandPaletteResults}from"../../../internal/default-strings.generated.js";const COMMAND_ROW_HEIGHT=48,GROUP_ROW_HEIGHT=32,RESULT_OVERSCAN_ROWS=6,MAX_COMMAND_PALETTE_COMMANDS=1e4,MAX_COMMAND_PALETTE_KEYWORDS=1e4,hotkeyOwners=new WeakMap;function registerHotkeyOwner(view,palette){const owners=hotkeyOwners.get(view)??[];hotkeyOwners.set(view,[...owners.filter(candidate=>candidate!==palette),palette])}function unregisterHotkeyOwner(view,palette){const owners=hotkeyOwners.get(view)?.filter(candidate=>candidate!==palette)??[];owners.length?hotkeyOwners.set(view,owners):hotkeyOwners.delete(view)}const EMPTY_CANONICAL_COMMANDS=Object.freeze([]);function projectCommandKeywords(value){try{if(!Array.isArray(value))return;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return;const keywords=[];for(let index=0;index<Math.min(length.value,MAX_COMMAND_PALETTE_KEYWORDS);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR||typeof entry.value!="string")return;keywords.push(entry.value)}return Object.freeze(keywords)}catch{return}}function projectCommand(candidate){try{if(candidate===null||typeof candidate!="object"||Array.isArray(candidate))return;const commandId=getOwnDataDescriptor(candidate,"commandId"),label=getOwnDataDescriptor(candidate,"label"),description=getOwnDataDescriptor(candidate,"description"),group=getOwnDataDescriptor(candidate,"group"),shortcut=getOwnDataDescriptor(candidate,"shortcut"),keywords=getOwnDataDescriptor(candidate,"keywords"),disabled=getOwnDataDescriptor(candidate,"disabled"),icon=getOwnDataDescriptor(candidate,"icon"),onSelect=getOwnDataDescriptor(candidate,"onSelect");if(commandId===MISSING_OWN_DATA_DESCRIPTOR||commandId===UNSAFE_OWN_DATA_DESCRIPTOR||label===MISSING_OWN_DATA_DESCRIPTOR||label===UNSAFE_OWN_DATA_DESCRIPTOR||description===UNSAFE_OWN_DATA_DESCRIPTOR||group===UNSAFE_OWN_DATA_DESCRIPTOR||shortcut===UNSAFE_OWN_DATA_DESCRIPTOR||keywords===UNSAFE_OWN_DATA_DESCRIPTOR||disabled===UNSAFE_OWN_DATA_DESCRIPTOR||icon===UNSAFE_OWN_DATA_DESCRIPTOR||onSelect===UNSAFE_OWN_DATA_DESCRIPTOR||typeof commandId.value!="string"||commandId.value.trim()===""||typeof label.value!="string"||label.value.trim()==="")return;const descriptionValue=description===MISSING_OWN_DATA_DESCRIPTOR?void 0:description.value,groupValue=group===MISSING_OWN_DATA_DESCRIPTOR?void 0:group.value,shortcutValue=shortcut===MISSING_OWN_DATA_DESCRIPTOR?void 0:shortcut.value,keywordsValue=keywords===MISSING_OWN_DATA_DESCRIPTOR?void 0:keywords.value,disabledValue=disabled===MISSING_OWN_DATA_DESCRIPTOR?void 0:disabled.value,iconValue=icon===MISSING_OWN_DATA_DESCRIPTOR?void 0:icon.value,onSelectValue=onSelect===MISSING_OWN_DATA_DESCRIPTOR?void 0:onSelect.value;if(descriptionValue!==void 0&&typeof descriptionValue!="string"||groupValue!==void 0&&typeof groupValue!="string"||shortcutValue!==void 0&&typeof shortcutValue!="string"||disabledValue!==void 0&&typeof disabledValue!="boolean"||onSelectValue!==void 0&&typeof onSelectValue!="function")return;const keywordValues=keywordsValue===void 0?Object.freeze([]):projectCommandKeywords(keywordsValue);return keywordValues?Object.freeze({source:candidate,commandId:commandId.value,label:label.value,...descriptionValue===void 0?{}:{description:descriptionValue},...groupValue===void 0?{}:{group:groupValue},...shortcutValue===void 0?{}:{shortcut:shortcutValue},keywords:keywordValues,disabled:disabledValue??!1,...iconValue===void 0?{}:{icon:iconValue},...onSelectValue===void 0?{}:{onSelect:onSelectValue}}):void 0}catch{return}}function projectCommands(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_COMMANDS;const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return EMPTY_CANONICAL_COMMANDS;const commands=[],seen=new Set;for(let index=0;index<Math.min(length.value,MAX_COMMAND_PALETTE_COMMANDS);index+=1){const entry=getOwnDataDescriptor(value,String(index));if(entry===MISSING_OWN_DATA_DESCRIPTOR||entry===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const command=projectCommand(entry.value);!command||seen.has(command.commandId)||(seen.add(command.commandId),commands.push(command))}return Object.freeze(commands)}catch{return EMPTY_CANONICAL_COMMANDS}}class LyraCommandPalette extends LyraElement{constructor(){super(...arguments),this._open=!1,this.commands=[],this.hotkey="mod+k",this.queryText="",this.activeIndex=0,this.listScrollTop=0,this.listViewportHeight=COMMAND_ROW_HEIGHT*10,this.rowPitch=COMMAND_ROW_HEIGHT,this.groupPitch=GROUP_ROW_HEIGHT,this.listId=nextId("command-list"),this.haystacksLocale="",this.haystacks=[],this.filteredForQuery="",this.filteredForLocale="",this.filteredRows=[],this.normalizedRows=EMPTY_CANONICAL_COMMANDS,this.onGlobalKeyDown=event=>{if(event.repeat||event.isComposing||event.keyCode===229)return;const view=this.runtimeWindow;if(!view||!this.matchesShortcut(event))return;const owners=hotkeyOwners.get(view)??[];let owner;for(let index=owners.length-1;index>=0;index-=1){const candidate=owners[index];if(candidate.isConnected&&candidate.matchesShortcut(event)){owner=candidate;break}}owner===this&&(event.preventDefault(),this.openPalette())},this.onKeyDown=event=>{if(event.isComposing||event.keyCode===229)return;const rows=this.filtered;if(event.key==="ArrowDown"){event.preventDefault();const next=this.seekEnabled(rows,this.activeIndex+1,1);next!==-1&&this.setActiveIndex(rows,next)}else if(event.key==="ArrowUp"){event.preventDefault();const previous=this.seekEnabled(rows,this.activeIndex-1,-1);previous!==-1&&this.setActiveIndex(rows,previous)}else if(event.key==="Enter"){const active=rows[this.activeIndex];active&&(event.preventDefault(),this.select(active))}},this.onInput=event=>{event.stopPropagation(),this.queryText=event.target.value,this.listScrollTop=0;const list=this.renderRoot.querySelector('[part="list"]');list&&(list.scrollTop=0);const rows=this.filtered;this.setActiveIndex(rows,this.seekEnabled(rows,0,1))},this.onSearchFocus=()=>{this.emit("focus")},this.onSearchBlur=()=>{this.emit("blur")},this.onListScroll=event=>{const list=event.currentTarget;if(this.listScrollFrame!==void 0)return;const view=this.runtimeWindow??this.ownerDocument.defaultView;if(!view){this.listScrollTop=list.scrollTop;return}this.listScrollFrame=view.requestAnimationFrame(()=>{this.listScrollFrame=void 0,this.listScrollTop=list.scrollTop})}}static{this.defaultStrings={...super.defaultStrings,commandPaletteEmpty:LYRA_DEFAULT_commandPaletteEmpty,commandPaletteLabel:LYRA_DEFAULT_commandPaletteLabel,commandPalettePlaceholder:LYRA_DEFAULT_commandPalettePlaceholder,commandPaletteResults:LYRA_DEFAULT_commandPaletteResults}}static{this.ownedCollectionProperties=Object.freeze(["commands"])}static{this.identityCollectionProperties=Object.freeze(["commands"])}static{this.identityEventDetailProperties=Object.freeze({"lr-select":Object.freeze(["command"])})}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-select"])}get open(){return this._open}set open(next){const normalized=!!next;if(normalized!==this._open){if(!this.hasUpdated){this.commitOpen(normalized);return}this.requestOpen(normalized)}}get effectiveCommands(){return this.normalizedForCommands!==this.commands&&(this.normalizedForCommands=this.commands,this.normalizedRows=projectCommands(this.commands)),this.normalizedRows}get searchHaystacks(){const locale=this.effectiveLocale,commands=this.effectiveCommands;return(this.haystacksFor!==commands||this.haystacksLocale!==locale)&&(this.haystacksFor=commands,this.haystacksLocale=locale,this.haystacks=commands.map(command=>[command.label,command.description??"",command.group??"",...command.keywords].join(" ").toLocaleLowerCase(locale))),this.haystacks}willUpdate(changed){super.willUpdate(changed),changed.has("open")&&(this.open?this.activateOverlay():(this.overlay?.deactivate(),this.overlay=void 0));const rows=this.filtered;let nextIndex=this.activeCommandId?rows.findIndex(command=>command.commandId===this.activeCommandId):-1;if(nextIndex<0||rows[nextIndex]?.disabled){const start=Math.min(Math.max(this.activeIndex,0),Math.max(0,rows.length-1));nextIndex=this.seekEnabled(rows,start,1),nextIndex===-1&&(nextIndex=this.seekEnabled(rows,start-1,-1))}this.activeIndex=nextIndex,this.activeCommandId=nextIndex>=0?rows[nextIndex].commandId:void 0}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial(),changed.has("activeIndex")&&(this.renderRoot.querySelector('[part="command"][data-active="true"]')?.scrollIntoView({block:"nearest"}),this.scrollActiveIntoView());const list=this.renderRoot.querySelector('[part="list"]');this.observeList(list??void 0)}observeList(list){list!==this.observedList&&(this.observedList&&this.listResizeObserver?.unobserve(this.observedList),this.clearPitchSentinels(),this.observedList=list,list&&(this.listResizeObserver?.observe(list),queueMicrotask(()=>{this.isConnected&&this.observedList===list&&this.measureRowPitch()}))),this.observePitchSentinels()}observePitchSentinels(){const row=this.renderRoot.querySelector('[part="command"]')??void 0,group=this.renderRoot.querySelector('[part="group"]')??void 0;row!==this.observedRow&&(this.observedRow&&this.listResizeObserver?.unobserve(this.observedRow),this.observedRow=row,row&&this.listResizeObserver?.observe(row)),group!==this.observedGroup&&(this.observedGroup&&this.listResizeObserver?.unobserve(this.observedGroup),this.observedGroup=group,group&&this.listResizeObserver?.observe(group))}clearPitchSentinels(){this.observedRow&&this.listResizeObserver?.unobserve(this.observedRow),this.observedGroup&&this.listResizeObserver?.unobserve(this.observedGroup),this.observedRow=void 0,this.observedGroup=void 0}measureRowPitch(){const style=this.ownerDocument.defaultView?.getComputedStyle(this);if(!style)return;const row=resolveCssLength(style.getPropertyValue("--lr-command-palette-row-height").trim()||style.getPropertyValue("--_lr-command-palette-row-height").trim(),{host:this}),group=resolveCssLength(style.getPropertyValue("--lr-command-palette-group-height").trim()||style.getPropertyValue("--_lr-command-palette-group-height").trim(),{host:this});row!==void 0&&row>0&&row!==this.rowPitch&&(this.rowPitch=row),group!==void 0&&group>0&&group!==this.groupPitch&&(this.groupPitch=group)}scheduleRowPitchMeasurement(){if(this.rowPitchFrame!==void 0)return;const view=this.runtimeWindow??this.ownerDocument.defaultView;if(!view){this.measureRowPitch();return}this.rowPitchFrame=view.requestAnimationFrame(()=>{this.rowPitchFrame=void 0,this.isConnected&&this.measureRowPitch()})}connectedCallback(){super.connectedCallback();const view=this.ownerDocument.defaultView;this.runtimeWindow=view??void 0,view&&(registerHotkeyOwner(view,this),view.addEventListener("keydown",this.onGlobalKeyDown));const ResizeObserverCtor=view?.ResizeObserver;if(ResizeObserverCtor&&view){let observer;observer=new ResizeObserverCtor(entries=>{if(this.listResizeObserver!==observer||this.runtimeWindow!==view)return;this.scheduleRowPitchMeasurement();const entry=entries.find(candidate=>candidate.target===this.observedList);if(!entry)return;const height=entry.borderBoxSize?.[0]?.blockSize??entry.contentRect.height;height>0&&this.listViewportHeight!==height&&(this.listViewportHeight=height)}),this.listResizeObserver=observer}else this.listResizeObserver=void 0;this.hasUpdated&&this.observeList(this.renderRoot.querySelector('[part="list"]')??void 0),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback();const view=this.runtimeWindow;view&&(unregisterHotkeyOwner(view,this),view.removeEventListener("keydown",this.onGlobalKeyDown)),this.overlay?.suspend(),this.listResizeObserver?.disconnect(),this.listResizeObserver=void 0,this.observedList=void 0,this.observedRow=void 0,this.observedGroup=void 0,this.listScrollFrame!==void 0&&(view?.cancelAnimationFrame(this.listScrollFrame),this.listScrollFrame=void 0),this.rowPitchFrame!==void 0&&(view?.cancelAnimationFrame(this.rowPitchFrame),this.rowPitchFrame=void 0),this.runtimeWindow=void 0}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="dialog"]')??null,onEscape:()=>this.close(),onBackdrop:()=>this.close(),lockScroll:!0,suspendWhenUnrendered:!0})}openPalette(){this.requestOpen(!0)}close(){this.requestOpen(!1)}requestOpen(next){if(next===this._open||this.openRequestTarget===next)return!1;this.openRequestTarget=next;const prevented=this.emit(next?"lr-open":"lr-close",null,{cancelable:!0}).defaultPrevented;return this.openRequestTarget=void 0,prevented?(this.toggleAttribute("open",this._open),!1):(next&&this.resetOpeningState(),this.commitOpen(next),!0)}resetOpeningState(){this.queryText="",this.listScrollTop=0;const rows=this.filtered;this.setActiveIndex(rows,this.seekEnabled(rows,0,1))}commitOpen(next){if(next===this._open)return;const old=this._open;this._open=next,this.requestUpdate("open",old)}registerCommand(command){return this.commands=[...this.commands,command],()=>{this.commands=this.commands.filter(item=>item!==command)}}matchesShortcut(event){const parts=this.hotkey.toLowerCase().split("+").map(part=>part.trim()),key=parts.pop();if(!key||event.key.toLowerCase()!==key)return!1;const modifiers=new Set(parts);if(modifiers.size!==parts.length||[...modifiers].some(part=>!["alt","ctrl","meta","mod","shift"].includes(part))||modifiers.has("mod")&&(modifiers.has("ctrl")||modifiers.has("meta")))return!1;const isMac=detectPlatform((this.runtimeWindow??this.ownerDocument.defaultView)?.navigator)==="mac",expectedCtrl=modifiers.has("ctrl")||modifiers.has("mod")&&!isMac,expectedMeta=modifiers.has("meta")||modifiers.has("mod")&&isMac;return event.ctrlKey===expectedCtrl&&event.metaKey===expectedMeta&&event.shiftKey===modifiers.has("shift")&&event.altKey===modifiers.has("alt")}get filtered(){const locale=this.effectiveLocale,query=this.queryText.trim().toLocaleLowerCase(locale),commands=this.effectiveCommands;if(this.filteredForCommands!==commands||this.filteredForQuery!==query||this.filteredForLocale!==locale)if(this.filteredForCommands=commands,this.filteredForQuery=query,this.filteredForLocale=locale,!query)this.filteredRows=[...commands];else{const haystacks=this.searchHaystacks;this.filteredRows=commands.filter((_,index)=>haystacks[index].includes(query))}return this.filteredRows}select(command){command.disabled||(this.emit("lr-select",{command:command.source}),command.onSelect?.(),this.close())}seekEnabled(rows,from,step){for(let index=from;index>=0&&index<rows.length;index+=step)if(!rows[index].disabled)return index;return-1}setActiveIndex(rows,index){this.activeIndex=index,this.activeCommandId=index>=0?rows[index].commandId:void 0}get resultModel(){const rows=this.filtered;if(this.resultModelFor===rows&&this.resultModelRowPitch===this.rowPitch&&this.resultModelGroupPitch===this.groupPitch&&this.resultModelCache)return this.resultModelCache;const resultRows=[],groups=[];let top=0,previousGroup,group;for(let index=0;index<rows.length;index++){const command=rows[index],label=command.group??"";(!group||label!==previousGroup)&&(group={index:groups.length,label,headingTop:label?top:void 0,rows:[]},groups.push(group),previousGroup=label,label&&(top+=this.groupPitch));const row={command,index,top,groupIndex:group.index};group.rows.push(row),resultRows.push(row),top+=this.rowPitch}return this.resultModelFor=rows,this.resultModelRowPitch=this.rowPitch,this.resultModelGroupPitch=this.groupPitch,this.resultModelCache={rows:resultRows,groups,totalHeight:top},this.resultModelCache}visibleGroups(model){if(model.rows.length===0)return[];const minimum=Math.max(0,this.listScrollTop-this.rowPitch*RESULT_OVERSCAN_ROWS),maximum=this.listScrollTop+this.listViewportHeight+this.rowPitch*RESULT_OVERSCAN_ROWS;let low=0,high=model.rows.length-1;for(;low<high;){const middle=low+high>>1;model.rows[middle].top+this.rowPitch<minimum?low=middle+1:high=middle}const visibleIndexes=new Set;for(let index=low;index<model.rows.length&&!(model.rows[index].top>maximum);index++)visibleIndexes.add(index);return this.activeIndex>=0&&visibleIndexes.add(this.activeIndex),model.groups.map(entry=>({...entry,rows:entry.rows.filter(row=>visibleIndexes.has(row.index))})).filter(entry=>entry.rows.length>0)}optionId(index){return`${this.listId}-opt-${index}`}scrollActiveIntoView(){if(this.activeIndex<0)return;const list=this.renderRoot.querySelector('[part="list"]'),row=this.resultModel.rows[this.activeIndex];if(!list||!row)return;const top=row.top,bottom=top+this.rowPitch;top<list.scrollTop?list.scrollTop=top:bottom>list.scrollTop+list.clientHeight&&(list.scrollTop=Math.max(0,bottom-list.clientHeight))}renderCommand(row,total){const command=row.command,active=row.index===this.activeIndex;return html`<button
2
2
  id=${this.optionId(row.index)}
3
3
  part="command"
4
4
  role="option"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-command-palette-z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));--_lr-command-palette-max-inline-size:var(--lr-size-48rem);--_lr-command-palette-max-block-size:70vh;--_lr-command-palette-list-max-block-size:50vh;--_lr-command-palette-offset-block-start:12vh;--_lr-command-palette-row-height:var(--lr-size-3rem);--_lr-command-palette-group-height:var(--lr-size-2rem);display:contents}[part=backdrop]{z-index:var(--lr-command-palette-z-index,var(--_lr-command-palette-z-index));background:var(--lr-color-overlay);place-items:start center;padding-block-start:var(--lr-command-palette-offset-block-start,var(--_lr-command-palette-offset-block-start));display:grid;position:fixed;inset:0}[part=dialog]{inline-size:min(var(--lr-command-palette-max-inline-size,var(--_lr-command-palette-max-inline-size)), calc(100vw - 2 * var(--lr-space-l)));min-inline-size:0;max-block-size:var(--lr-command-palette-max-block-size,var(--_lr-command-palette-max-block-size));border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface-overlay);box-shadow:var(--lr-shadow-xl);color:var(--lr-color-text);overflow:hidden}[part=search]{align-items:center;gap:var(--lr-space-s);min-inline-size:0;padding:var(--lr-space-m);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);display:flex}[part=input]{min-inline-size:0;color:inherit;font:inherit;background:0 0;border:0;outline:0;flex:1}[part=input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset);border-radius:var(--lr-radius-xs)}[part=input]::placeholder{color:var(--lr-color-text-quiet);opacity:1}[part=input]::-webkit-search-cancel-button,[part=input]::-webkit-search-decoration{appearance:none}[part=list]{max-block-size:var(--lr-command-palette-list-max-block-size,var(--_lr-command-palette-list-max-block-size));padding:var(--lr-space-xs);position:relative;overflow:hidden auto}[part=list-spacer]{min-inline-size:0;position:relative}[part=command-group]{display:contents}[part=group]{block-size:var(--lr-command-palette-group-height,var(--_lr-command-palette-group-height));box-sizing:border-box;padding:var(--lr-space-xs) var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;position:absolute;inset-inline:0;overflow:hidden}[part=command]{min-inline-size:0;block-size:var(--lr-command-palette-row-height,var(--_lr-command-palette-row-height));box-sizing:border-box;align-items:center;gap:var(--lr-space-s);inline-size:100%;padding:var(--lr-space-s);border-radius:var(--lr-radius);color:inherit;text-align:start;cursor:pointer;background:0 0;border:0;display:flex;position:absolute;inset-inline:0;overflow:hidden}:where([part=command]):hover:where(:not(:disabled)){background:var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet))}:where([part=command]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=command][data-active=true]{background:var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet))}[part=command][data-active=true]:active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=command]:disabled{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=icon]{block-size:var(--lr-size-1em);max-inline-size:var(--lr-size-1-25rem);flex:none;align-items:center;display:inline-flex}[part=label],[part=description],[part=shortcut]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;overflow:hidden}[part=label]{flex:0 auto}[part=description]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);flex:auto}[part=shortcut]{max-inline-size:40%;color:var(--lr-color-text-quiet);font-family:var(--lr-font-mono);font-size:var(--lr-font-size-sm);flex:0 auto}[part=empty]{padding:var(--lr-space-l);color:var(--lr-color-text-quiet);text-align:center}@media (forced-colors:active){[part=command][data-active=true]{outline:var(--lr-border-width-medium) solid currentColor;outline-offset:calc(-1 * var(--lr-border-width-medium));font-weight:var(--lr-font-weight-semibold)}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-command-palette-z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));--_lr-command-palette-max-inline-size:var(--lr-size-48rem);--_lr-command-palette-max-block-size:70vh;--_lr-command-palette-list-max-block-size:50vh;--_lr-command-palette-offset-block-start:12vh;--_lr-command-palette-row-height:var(--lr-size-3rem);--_lr-command-palette-group-height:var(--lr-size-2rem);display:contents}[part=backdrop]{z-index:var(--lr-command-palette-z-index,var(--_lr-command-palette-z-index));background:var(--lr-color-overlay);place-items:start center;padding-block-start:var(--lr-command-palette-offset-block-start,var(--_lr-command-palette-offset-block-start));display:grid;position:fixed;inset:0}[part=dialog]{inline-size:min(var(--lr-command-palette-max-inline-size,var(--_lr-command-palette-max-inline-size)), calc(100vw - 2 * var(--lr-space-l)));min-inline-size:0;max-block-size:var(--lr-command-palette-max-block-size,var(--_lr-command-palette-max-block-size));border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface-overlay);box-shadow:var(--lr-shadow-xl);color:var(--lr-color-text);overflow:hidden}[part=search]{align-items:center;gap:var(--lr-space-s);min-inline-size:0;padding:var(--lr-space-m);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);display:flex}[part=input]{min-inline-size:0;color:inherit;font:inherit;background:0 0;border:0;outline:0;flex:1}[part=input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset);border-radius:var(--lr-radius-xs)}[part=input]::placeholder{color:var(--lr-color-text-quiet);opacity:1}[part=input]::-webkit-search-cancel-button,[part=input]::-webkit-search-decoration{-webkit-appearance:none;appearance:none;display:none}[part=list]{max-block-size:var(--lr-command-palette-list-max-block-size,var(--_lr-command-palette-list-max-block-size));padding:var(--lr-space-xs);position:relative;overflow:hidden auto}[part=list-spacer]{min-inline-size:0;position:relative}[part=command-group]{display:contents}[part=group]{block-size:var(--lr-command-palette-group-height,var(--_lr-command-palette-group-height));box-sizing:border-box;padding:var(--lr-space-xs) var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;position:absolute;inset-inline:0;overflow:hidden}[part=command]{min-inline-size:0;block-size:var(--lr-command-palette-row-height,var(--_lr-command-palette-row-height));box-sizing:border-box;align-items:center;gap:var(--lr-space-s);inline-size:100%;padding:var(--lr-space-s);border-radius:var(--lr-radius);color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;display:flex;position:absolute;inset-inline:0;overflow:hidden}:where([part=command]):hover:where(:not(:disabled)){background:var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet))}:where([part=command]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=command][data-active=true]{background:var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet))}[part=command][data-active=true]:active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-command-palette-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=command]:disabled{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=icon]{block-size:var(--lr-size-1em);max-inline-size:var(--lr-size-1-25rem);flex:none;align-items:center;display:inline-flex}[part=label],[part=description],[part=shortcut]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;overflow:hidden}[part=label]{flex:0 auto}[part=description]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);flex:auto}[part=shortcut]{max-inline-size:40%;color:var(--lr-color-text-quiet);font-family:var(--lr-font-mono);font-size:var(--lr-font-size-sm);flex:0 auto}[part=empty]{padding:var(--lr-space-l);color:var(--lr-color-text-quiet);text-align:center}@media (forced-colors:active){[part=command][data-active=true]{outline:var(--lr-border-width-medium) solid currentColor;outline-offset:calc(-1 * var(--lr-border-width-medium));font-weight:var(--lr-font-weight-semibold)}}`;export{styles};
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{isAccessibilityVisible,srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{isRtl}from"../../../internal/rtl.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{isArrowKey,finiteInteger,finiteRange}from"../../../internal/numbers.js";import{styles}from"./dashboard-grid.styles.js";import"./layout.js";import{clampDashboardCandidate,createDashboardSpatialIndex,findDashboardCollisions,normalizeLyraDashboardCollisionPolicy,projectDashboardLayout,resolveDashboardPlacement,snapshotDashboardLayout,sortDashboardSpatial}from"./layout-internal.js";import{createWidgetDocument}from"../../conversation/widget-renderer/resolve.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_dashboardCellCollisionRejected,LYRA_DEFAULT_dashboardCellMoved,LYRA_DEFAULT_dashboardCellResized,LYRA_DEFAULT_dashboardGridLabel,LYRA_DEFAULT_flowItemAnnouncement,LYRA_DEFAULT_noData}from"../../../internal/default-strings.generated.js";const INTERACTIVE_DESCENDANT_SELECTOR='button, a[href], area[href], input, select, textarea, summary, label, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [role="button"], [role="link"], [role="checkbox"], [role="radio"], [role="switch"], [role="slider"], [role="spinbutton"], [role="textbox"], [role="combobox"], [role="option"], [role="menuitem"], [tabindex]:not([part="cell"])';class LyraDashboardGrid extends LyraElement{constructor(){super(...arguments),this.authoredLayout=Object.freeze([]),this.effectiveLayout=Object.freeze([]),this.columns=12,this.rowHeight=80,this.gap=8,this.collisionValue="reject",this.cellsDraggable=!1,this.cellsResizable=!1,this.locked=!1,this.accessibleLabel=null,this.announcer=new Announcer({onFlush:text=>{this.liveText=text,isAccessibilityVisible(this)&&this.announcementSink?.announce(text)}}),this.liveText="",this.activeCellIndex=0,this.activeCellId="",this.rehomeCellFocus=!1,this.defaultCellSyncQueued=!1,this.ownedDefaultCells=new WeakSet,this.warnedUnmatchedCells=new WeakSet,this.authoredSlotBaselines=new WeakMap,this.managedAuthoredCells=new Set,this.suppressedClickCellId="",this.onCellPointerMove=e=>{const drag=this.cellDrag;if(!(!drag||e.pointerId!==drag.pointerId)){if(!this.canDragCell(drag.cellId)){this.cancelCellDrag();return}drag.pendingClientX=e.clientX,drag.pendingClientY=e.clientY,drag.previewFrame===void 0&&(drag.previewFrame=drag.ownerWindow.requestAnimationFrame(()=>{drag.previewFrame=void 0,this.cellDrag===drag&&this.applyDragPreview(drag)}))}},this.onCellPointerUp=e=>{const drag=this.cellDrag;if(!drag||e.pointerId!==drag.pointerId)return;if(e.type!=="pointerup"||!this.canDragCell(drag.cellId)){this.cancelCellDrag();return}this.flushDragPreview(drag),this.cellDrag=void 0,this.releaseGesturePointerCapture(drag.wrapper,drag.pointerId),drag.wrapper.removeAttribute("data-dragging"),drag.ownerWindow.removeEventListener("pointermove",this.onCellPointerMove),drag.ownerWindow.removeEventListener("pointerup",this.onCellPointerUp),drag.ownerWindow.removeEventListener("pointercancel",this.onCellPointerUp),drag.ownerWindow.removeEventListener("lostpointercapture",this.onCellPointerUp);const x=drag.currentX??drag.startX,y=drag.currentY??drag.startY;(x!==drag.startX||y!==drag.startY)&&this.commitPlacement(drag.cellId,{x,y,w:drag.w,h:drag.h},"move"),drag.moved&&this.armClickSuppression(drag.cellId,drag.ownerWindow),this.resetCellInlineStyle(drag.cellId,drag.wrapper),this.requestUpdate()},this.onResizeHandlePointerMove=e=>{const resize=this.cellResize;if(!(!resize||e.pointerId!==resize.pointerId)){if(!this.canResizeCell(resize.cellId)){this.cancelCellResize();return}resize.pendingClientX=e.clientX,resize.pendingClientY=e.clientY,resize.previewFrame===void 0&&(resize.previewFrame=resize.ownerWindow.requestAnimationFrame(()=>{resize.previewFrame=void 0,this.cellResize===resize&&this.applyResizePreview(resize)}))}},this.onResizeHandlePointerUp=e=>{const resize=this.cellResize;if(!resize||e.pointerId!==resize.pointerId)return;if(e.type!=="pointerup"||!this.canResizeCell(resize.cellId)){this.cancelCellResize();return}this.flushResizePreview(resize),this.cellResize=void 0,this.releaseGesturePointerCapture(resize.captureTarget,resize.pointerId),resize.wrapper.removeAttribute("data-resizing"),resize.ownerWindow.removeEventListener("pointermove",this.onResizeHandlePointerMove),resize.ownerWindow.removeEventListener("pointerup",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("pointercancel",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("lostpointercapture",this.onResizeHandlePointerUp);const w=resize.currentW??resize.startW,h=resize.currentH??resize.startH;(w!==resize.startW||h!==resize.startH)&&this.commitPlacement(resize.cellId,{x:resize.x,y:resize.y,w,h},"resize"),resize.moved&&this.armClickSuppression(resize.cellId,resize.ownerWindow),this.resetCellInlineStyle(resize.cellId,resize.wrapper),this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,dashboardCellCollisionRejected:LYRA_DEFAULT_dashboardCellCollisionRejected,dashboardCellMoved:LYRA_DEFAULT_dashboardCellMoved,dashboardCellResized:LYRA_DEFAULT_dashboardCellResized,dashboardGridLabel:LYRA_DEFAULT_dashboardGridLabel,flowItemAnnouncement:LYRA_DEFAULT_flowItemAnnouncement,noData:LYRA_DEFAULT_noData}}static{this.immutableEventDetails=Object.freeze(["lr-collision","lr-layout-change"])}static{this.styles=[LyraElement.styles,styles,srOnly]}get layout(){return this.effectiveLayout}set layout(value){const previous=this.effectiveLayout;this.authoredLayout=snapshotDashboardLayout(value),this.effectiveLayout=projectDashboardLayout(this.authoredLayout,this.safeColumns),this.announceAppliedPlacement(),this.requestUpdate("layout",previous)}get collision(){return this.collisionValue}set collision(value){const previous=this.collisionValue;this.collisionValue=normalizeLyraDashboardCollisionPolicy(value),this.requestUpdate("collision",previous)}get safeColumns(){return finiteInteger(this.columns,12,1,48)}get safeRowHeight(){return finiteRange(this.rowHeight,80,1)}get safeGap(){return finiteRange(this.gap,8,0)}get sortedLayout(){return sortDashboardSpatial(this.effectiveLayout)}connectedCallback(){super.connectedCallback(),this.bindOwnerRealmResources(),this.scheduleDefaultCellSync()}disconnectedCallback(){this.announcer.cancel(),this.announcementSink?.release(),this.announcementSink=void 0,this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0,this.defaultCellSyncQueued=!1,this.restoreManagedAuthoredSlots(),this.clearSuppressedClick(),this.pendingPlacementAnnouncement=void 0,this.cancelCellDrag(),this.cancelCellResize(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0,this.announcementSink?.release(),this.announcementSink=void 0,this.clearSuppressedClick(),this.isConnected&&(this.bindOwnerRealmResources(),this.scheduleDefaultCellSync())}bindOwnerRealmResources(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.announcementSink??=acquireAnnouncementSink("polite",{document:ownerDocument,source:this}),this.childObserver&&this.childObserverDocument===ownerDocument)return;this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0;const MutationObserverCtor=ownerWindow?.MutationObserver;if(!MutationObserverCtor)return;const observer=new MutationObserverCtor(records=>{this.childObserver!==observer||this.childObserverDocument!==ownerDocument||!records.some(record=>record.type==="childList"?record.target===this:record.target.parentNode===this)||this.scheduleDefaultCellSync()});observer.observe(this,{childList:!0,attributes:!0,attributeFilter:["cell-id"],subtree:!0}),this.childObserver=observer,this.childObserverDocument=ownerDocument}scheduleDefaultCellSync(){!this.isConnected||this.defaultCellSyncQueued||(this.defaultCellSyncQueued=!0,queueMicrotask(()=>{this.defaultCellSyncQueued=!1,this.isConnected&&this.syncDefaultCells()}))}willUpdate(changed){if(super.willUpdate(changed),changed.has("columns")&&(this.effectiveLayout=projectDashboardLayout(this.authoredLayout,this.safeColumns)),changed.has("layout")||changed.has("columns")){this.rehomeCellFocus=activeElementIn(this.renderRoot)?.getAttribute("part")==="cell",this.ownerDocument&&this.isConnected&&(this.hasUpdated?this.syncDefaultCells():this.seedFirstRenderState(()=>this.syncDefaultCells()));const cells=this.sortedLayout,retainedIndex=cells.findIndex(cell=>cell.cellId===this.activeCellId),nextIndex=cells.length===0?0:retainedIndex>=0?retainedIndex:Math.min(this.activeCellIndex,cells.length-1);this.activeCellIndex=nextIndex,this.activeCellId=cells[nextIndex]?.cellId??""}this.cellDrag&&(changed.has("layout")||changed.has("columns")||changed.has("rowHeight")||changed.has("gap")||(changed.has("cellsDraggable")||changed.has("locked"))&&!this.canDragCell(this.cellDrag.cellId))&&this.cancelCellDrag(),this.cellResize&&(changed.has("layout")||changed.has("columns")||changed.has("rowHeight")||changed.has("gap")||(changed.has("cellsResizable")||changed.has("locked"))&&!this.canResizeCell(this.cellResize.cellId))&&this.cancelCellResize()}updated(changed){super.updated(changed),this.rehomeCellFocus&&(this.rehomeCellFocus=!1,this.renderRoot.querySelector('[part="cell"][tabindex="0"]')?.focus())}cellLabel(cell){return cell.label||cell.cellId}restoreAuthoredSlot(child){if(!this.authoredSlotBaselines.has(child))return;const baseline=this.authoredSlotBaselines.get(child);baseline===null?child.removeAttribute("slot"):baseline!==void 0&&child.setAttribute("slot",baseline),this.authoredSlotBaselines.delete(child),this.managedAuthoredCells.delete(child)}restoreManagedAuthoredSlots(){for(const child of this.managedAuthoredCells)this.restoreAuthoredSlot(child);this.managedAuthoredCells.clear()}syncDefaultCells(){if(!this.isConnected)return;const ids=new Set(this.effectiveLayout.map(cell=>cell.cellId)),authoredById=new Map,ownedById=new Map;for(const child of Array.from(this.children)){if(this.ownedDefaultCells.has(child)){const ownedCellId=child.getAttribute("data-cell-id");if(!ownedCellId){child.remove();continue}const matches=ownedById.get(ownedCellId)??[];matches.push(child),ownedById.set(ownedCellId,matches);continue}const cellId=child.getAttribute("cell-id");cellId&&ids.has(cellId)&&!authoredById.has(cellId)?(authoredById.set(cellId,child),this.warnedUnmatchedCells.delete(child),this.authoredSlotBaselines.has(child)||this.authoredSlotBaselines.set(child,child.getAttribute("slot")),this.managedAuthoredCells.add(child),child.setAttribute("slot",`cell-${cellId}`)):(this.restoreAuthoredSlot(child),cellId&&!ids.has(cellId)&&!this.warnedUnmatchedCells.has(child)&&(this.warnedUnmatchedCells.add(child),console.warn(`<lr-dashboard-grid> a child with cell-id="${cellId}" matches no entry in \`layout\`; it will not render.`)))}const selectedAuthored=new Set(authoredById.values());for(const managed of[...this.managedAuthoredCells])(!this.contains(managed)||!selectedAuthored.has(managed))&&this.restoreAuthoredSlot(managed);for(const cell of this.effectiveLayout){const owned=ownedById.get(cell.cellId)??[];if(authoredById.has(cell.cellId)){for(const defaultCell of owned)defaultCell.remove();continue}const existing=owned.shift();existing?(existing.setAttribute("slot",`cell-${cell.cellId}`),this.updateDefaultCell(existing,cell)):this.appendChild(this.createDefaultCell(cell));for(const duplicate of owned)duplicate.remove();ownedById.delete(cell.cellId)}for(const stale of ownedById.values())for(const defaultCell of stale)defaultCell.remove()}createDefaultCell(cell){const ownerDocument=this.ownerDocument,widget=ownerDocument.createElement(tag("widget"));widget.setAttribute("data-cell-id",cell.cellId),widget.setAttribute("data-dashboard-grid-default-cell",""),widget.setAttribute("slot",`cell-${cell.cellId}`),this.ownedDefaultCells.add(widget);const renderer=ownerDocument.createElement(tag("widget-renderer"));return widget.appendChild(renderer),this.updateDefaultCell(widget,cell),widget}updateDefaultCell(widget,cell){widget.label=this.cellLabel(cell);const renderer=widget.querySelector(tag("widget-renderer"));renderer&&(renderer.document=cell.widget==null?null:createWidgetDocument(cell.widget))}onCellFocus(cellId){const index=this.sortedLayout.findIndex(cell=>cell.cellId===cellId);index>=0&&(this.activeCellIndex!==index&&(this.activeCellIndex=index),this.activeCellId!==cellId&&(this.activeCellId=cellId))}cellElement(cellId){const ownerCss=this.ownerDocument.defaultView?.CSS;if(typeof ownerCss?.escape=="function")try{const candidate=this.renderRoot.querySelector(`[part="cell"][data-cell-id="${ownerCss.escape(cellId)}"]`);if(candidate?.getAttribute("data-cell-id")===cellId)return candidate}catch{}return Array.from(this.renderRoot.querySelectorAll('[part="cell"][data-cell-id]')).find(candidate=>candidate.getAttribute("data-cell-id")===cellId)??null}focusCellAt(index){const cells=this.sortedLayout;if(index<0||index>=cells.length)return;this.activeCellIndex=index;const cell=cells[index];this.activeCellId=cell.cellId;const number=getNumberFormat(this.effectiveLocale);this.announcer.announce(this.localize("flowItemAnnouncement",void 0,{item:this.cellLabel(cell),index:number.format(index+1),total:number.format(cells.length)})),this.updateComplete.then(()=>{this.cellElement(cell.cellId)?.focus()})}onCellKeyDown(e,cell){const owner=e.currentTarget;if(e.composedPath()[0]!==owner)return;if((e.ctrlKey||e.metaKey)&&isArrowKey(e.key)){(e.shiftKey?this.keyboardResize(cell,e.key):this.keyboardMove(cell,e.key))&&e.preventDefault();return}const cells=this.sortedLayout,index=cells.findIndex(c=>c.cellId===cell.cellId);if(index<0)return;const rtl=isRtl(this),forwardKey=rtl?"ArrowLeft":"ArrowRight",backwardKey=rtl?"ArrowRight":"ArrowLeft";let next=index;if(e.key===forwardKey||e.key==="ArrowDown")next=Math.min(cells.length-1,index+1);else if(e.key===backwardKey||e.key==="ArrowUp")next=Math.max(0,index-1);else if(e.key==="Home")next=0;else if(e.key==="End")next=cells.length-1;else return;next!==index&&(e.preventDefault(),this.focusCellAt(next))}keyboardMove(cell,key){if(!this.cellsDraggable||this.locked||cell.locked)return!1;const rtlFlip=isRtl(this)?-1:1;let dx=0,dy=0;if(key==="ArrowRight")dx=rtlFlip;else if(key==="ArrowLeft")dx=-rtlFlip;else if(key==="ArrowDown")dy=1;else if(key==="ArrowUp")dy=-1;else return!1;return this.commitPlacement(cell.cellId,{x:cell.x+dx,y:cell.y+dy,w:cell.w,h:cell.h},"move")}keyboardResize(cell,key){if(!this.cellsResizable||this.locked||cell.locked)return!1;let dw=0,dh=0;if(key==="ArrowRight")dw=1;else if(key==="ArrowLeft")dw=-1;else if(key==="ArrowDown")dh=1;else if(key==="ArrowUp")dh=-1;else return!1;return this.commitPlacement(cell.cellId,{x:cell.x,y:cell.y,w:cell.w+dw,h:cell.h+dh},"resize")}announceAppliedPlacement(){const pending=this.pendingPlacementAnnouncement;if(!pending)return;this.pendingPlacementAnnouncement=void 0;const cell=this.effectiveLayout.find(candidate=>candidate.cellId===pending.cellId);if(!cell||!(pending.kind==="move"?cell.x===pending.x&&cell.y===pending.y:cell.w===pending.w&&cell.h===pending.h))return;const number=getNumberFormat(this.effectiveLocale);if(pending.kind==="move"){this.announcer.announce(this.localize("dashboardCellMoved",void 0,{label:this.cellLabel(cell),x:number.format(cell.x+1),y:number.format(cell.y+1)}));return}this.announcer.announce(this.localize("dashboardCellResized",void 0,{label:this.cellLabel(cell),w:number.format(cell.w),h:number.format(cell.h)}))}commitPlacement(cellId,requested,kind){const layout=this.effectiveLayout,cell=layout.find(candidate=>candidate.cellId===cellId);if(!cell)return!1;const result=resolveDashboardPlacement(layout,cellId,requested,this.safeColumns,this.collision);if(result.collidedCellIds.length>0&&this.emit("lr-collision",Object.freeze({cellId,collidedCellIds:result.collidedCellIds,policy:this.collision,accepted:result.accepted})),!result.accepted)return this.announcer.announce(this.localize("dashboardCellCollisionRejected",void 0,{label:this.cellLabel(cell)})),!0;const updated=result.layout.find(candidate=>candidate.cellId===cellId);return(kind==="move"?updated.x===cell.x&&updated.y===cell.y:updated.w===cell.w&&updated.h===cell.h)?!1:(this.pendingPlacementAnnouncement={cellId,kind,x:updated.x,y:updated.y,w:updated.w,h:updated.h},kind==="move"?this.emit("lr-cell-move",Object.freeze({cellId,position:Object.freeze({x:updated.x,y:updated.y}),previous:Object.freeze({x:cell.x,y:cell.y})})):this.emit("lr-cell-resize",Object.freeze({cellId,size:Object.freeze({w:updated.w,h:updated.h}),previous:Object.freeze({w:cell.w,h:cell.h})})),this.emit("lr-layout-change",Object.freeze({layout:result.layout})),!0)}cellStyle(cell){return{"grid-column":`${cell.x+1} / span ${cell.w}`,"grid-row":`${cell.y+1} / span ${cell.h}`}}measurePitch(){const baseEl=this.renderRoot.querySelector('[part="base"]');if(!baseEl)return null;const rect=baseEl.getBoundingClientRect(),columns=this.safeColumns,gap=this.safeGap,rawColPitch=(rect.width-gap*(columns-1))/columns;return{colPitch:rawColPitch>0?rawColPitch:1,rowPitch:this.safeRowHeight+gap}}resetCellInlineStyle(cellId,wrapper){wrapper.removeAttribute("data-collision");const cell=this.effectiveLayout.find(candidate=>candidate.cellId===cellId);if(cell){const style=this.cellStyle(cell);wrapper.style.gridColumn=style["grid-column"],wrapper.style.gridRow=style["grid-row"]}}canDragCell(cellId){const cell=this.layout.find(candidate=>candidate.cellId===cellId);return this.cellsDraggable&&!this.locked&&cell!==void 0&&!cell.locked}canResizeCell(cellId){const cell=this.layout.find(candidate=>candidate.cellId===cellId);return this.cellsResizable&&!this.locked&&cell!==void 0&&!cell.locked}releaseGesturePointerCapture(target,pointerId){try{target.releasePointerCapture?.(pointerId)}catch{}}cancelCellDrag(){const drag=this.cellDrag;drag&&(this.cellDrag=void 0,drag.previewFrame!==void 0&&drag.ownerWindow.cancelAnimationFrame(drag.previewFrame),this.releaseGesturePointerCapture(drag.wrapper,drag.pointerId),drag.wrapper.removeAttribute("data-dragging"),this.resetCellInlineStyle(drag.cellId,drag.wrapper),drag.ownerWindow.removeEventListener("pointermove",this.onCellPointerMove),drag.ownerWindow.removeEventListener("pointerup",this.onCellPointerUp),drag.ownerWindow.removeEventListener("pointercancel",this.onCellPointerUp),drag.ownerWindow.removeEventListener("lostpointercapture",this.onCellPointerUp))}cancelCellResize(){const resize=this.cellResize;resize&&(this.cellResize=void 0,resize.previewFrame!==void 0&&resize.ownerWindow.cancelAnimationFrame(resize.previewFrame),this.releaseGesturePointerCapture(resize.captureTarget,resize.pointerId),resize.wrapper.removeAttribute("data-resizing"),this.resetCellInlineStyle(resize.cellId,resize.wrapper),resize.ownerWindow.removeEventListener("pointermove",this.onResizeHandlePointerMove),resize.ownerWindow.removeEventListener("pointerup",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("pointercancel",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("lostpointercapture",this.onResizeHandlePointerUp))}hasInteractiveTarget(e,wrapper){const path=e.composedPath(),stop=path.indexOf(wrapper);for(const node of stop<0?path:path.slice(0,stop)){const element=node;if(typeof element.matches=="function"&&node!==wrapper&&element.matches(INTERACTIVE_DESCENDANT_SELECTOR))return!0}return!1}onCellPointerDown(e,cell){if(!this.cellsDraggable||this.locked||cell.locked||this.cellDrag||!e.isPrimary||e.button!==0)return;const wrapper=e.currentTarget;if(this.hasInteractiveTarget(e,wrapper))return;const ownerWindow=wrapper.ownerDocument.defaultView;if(!ownerWindow)return;const pitch=this.measurePitch();if(!pitch)return;const layout=this.effectiveLayout;e.stopPropagation(),this.cellDrag={pointerId:e.pointerId,cellId:cell.cellId,startClientX:e.clientX,startClientY:e.clientY,startX:cell.x,startY:cell.y,w:cell.w,h:cell.h,...pitch,wrapper,ownerWindow,rtlFlip:isRtl(this)?-1:1,layout,spatialIndex:createDashboardSpatialIndex(layout,this.safeColumns)},wrapper.setPointerCapture?.(e.pointerId),wrapper.setAttribute("data-dragging",""),ownerWindow.addEventListener("pointermove",this.onCellPointerMove),ownerWindow.addEventListener("pointerup",this.onCellPointerUp),ownerWindow.addEventListener("pointercancel",this.onCellPointerUp),ownerWindow.addEventListener("lostpointercapture",this.onCellPointerUp)}applyDragPreview(drag){if(drag.pendingClientX===void 0||drag.pendingClientY===void 0)return;const clientX=drag.pendingClientX,clientY=drag.pendingClientY;drag.pendingClientX=void 0,drag.pendingClientY=void 0;const dxUnits=Math.round((clientX-drag.startClientX)*drag.rtlFlip/drag.colPitch),dyUnits=Math.round((clientY-drag.startClientY)/drag.rowPitch),{x,y}=clampDashboardCandidate({},{x:drag.startX+dxUnits,y:drag.startY+dyUnits,w:drag.w,h:drag.h},drag.spatialIndex.columns);if(drag.wrapper.style.gridColumn=`${x+1} / span ${drag.w}`,drag.wrapper.style.gridRow=`${y+1} / span ${drag.h}`,this.collision!=="overlap"){const collides=findDashboardCollisions(drag.spatialIndex,{cellId:drag.cellId,x,y,w:drag.w,h:drag.h}).length>0;drag.wrapper.toggleAttribute("data-collision",collides)}else drag.wrapper.removeAttribute("data-collision");drag.currentX=x,drag.currentY=y,(x!==drag.startX||y!==drag.startY)&&(drag.moved=!0)}flushDragPreview(drag){drag.previewFrame!==void 0&&(drag.ownerWindow.cancelAnimationFrame(drag.previewFrame),drag.previewFrame=void 0),this.applyDragPreview(drag)}onResizeHandlePointerDown(e,cell){if(!this.cellsResizable||this.locked||cell.locked||this.cellResize||!e.isPrimary||e.button!==0)return;const wrapper=e.currentTarget.closest('[part="cell"]');if(!wrapper)return;const ownerWindow=wrapper.ownerDocument.defaultView;if(!ownerWindow)return;const pitch=this.measurePitch();if(!pitch)return;const layout=this.effectiveLayout;e.stopPropagation();const captureTarget=e.currentTarget;this.cellResize={pointerId:e.pointerId,cellId:cell.cellId,startClientX:e.clientX,startClientY:e.clientY,startW:cell.w,startH:cell.h,x:cell.x,y:cell.y,...pitch,wrapper,captureTarget,ownerWindow,rtlFlip:isRtl(this)?-1:1,layout,spatialIndex:createDashboardSpatialIndex(layout,this.safeColumns)},captureTarget.setPointerCapture?.(e.pointerId),wrapper.setAttribute("data-resizing",""),ownerWindow.addEventListener("pointermove",this.onResizeHandlePointerMove),ownerWindow.addEventListener("pointerup",this.onResizeHandlePointerUp),ownerWindow.addEventListener("pointercancel",this.onResizeHandlePointerUp),ownerWindow.addEventListener("lostpointercapture",this.onResizeHandlePointerUp)}applyResizePreview(resize){if(resize.pendingClientX===void 0||resize.pendingClientY===void 0)return;const clientX=resize.pendingClientX,clientY=resize.pendingClientY;resize.pendingClientX=void 0,resize.pendingClientY=void 0;const dwUnits=Math.round((clientX-resize.startClientX)*resize.rtlFlip/resize.colPitch),dhUnits=Math.round((clientY-resize.startClientY)/resize.rowPitch),{w,h}=clampDashboardCandidate(resize.spatialIndex.byId.get(resize.cellId)??{},{x:resize.x,y:resize.y,w:resize.startW+dwUnits,h:resize.startH+dhUnits},resize.spatialIndex.columns);if(resize.wrapper.style.gridColumn=`${resize.x+1} / span ${w}`,resize.wrapper.style.gridRow=`${resize.y+1} / span ${h}`,this.collision!=="overlap"){const collides=findDashboardCollisions(resize.spatialIndex,{cellId:resize.cellId,x:resize.x,y:resize.y,w,h}).length>0;resize.wrapper.toggleAttribute("data-collision",collides)}else resize.wrapper.removeAttribute("data-collision");resize.currentW=w,resize.currentH=h,(w!==resize.startW||h!==resize.startH)&&(resize.moved=!0)}flushResizePreview(resize){resize.previewFrame!==void 0&&(resize.ownerWindow.cancelAnimationFrame(resize.previewFrame),resize.previewFrame=void 0),this.applyResizePreview(resize)}clearSuppressedClick(){this.suppressedClickTimer!==void 0&&this.suppressedClickWindow&&this.suppressedClickWindow.clearTimeout(this.suppressedClickTimer),this.suppressedClickTimer=void 0,this.suppressedClickWindow=void 0,this.suppressedClickCellId=""}armClickSuppression(cellId,ownerWindow){this.clearSuppressedClick(),this.suppressedClickCellId=cellId,this.suppressedClickWindow=ownerWindow,this.suppressedClickTimer=ownerWindow.setTimeout(()=>{this.suppressedClickTimer=void 0,this.suppressedClickWindow=void 0,this.suppressedClickCellId=""},0)}onCellClick(e,cellId){this.suppressedClickCellId===cellId&&(this.clearSuppressedClick(),e.preventDefault(),e.stopImmediatePropagation())}renderCell(cell,active){const resizableHere=this.cellsResizable&&!this.locked&&!cell.locked;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{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{tag}from"../../../internal/prefix.js";import{isAccessibilityVisible,srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{isRtl}from"../../../internal/rtl.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{isArrowKey,finiteInteger,finiteRange}from"../../../internal/numbers.js";import{styles}from"./dashboard-grid.styles.js";import"./layout.js";import{clampDashboardCandidate,createDashboardSpatialIndex,findDashboardCollisions,normalizeLyraDashboardCollisionPolicy,projectDashboardLayout,resolveDashboardPlacement,snapshotDashboardLayout,sortDashboardSpatial}from"./layout-internal.js";import{createWidgetDocument}from"../../conversation/widget-renderer/resolve.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_dashboardCellCollisionRejected,LYRA_DEFAULT_dashboardCellMoved,LYRA_DEFAULT_dashboardCellResized,LYRA_DEFAULT_dashboardGridLabel,LYRA_DEFAULT_flowItemAnnouncement,LYRA_DEFAULT_noData}from"../../../internal/default-strings.generated.js";const INTERACTIVE_DESCENDANT_SELECTOR='button, a[href], area[href], input, select, textarea, summary, label, audio[controls], video[controls], [contenteditable]:not([contenteditable="false"]), [role="button"], [role="link"], [role="checkbox"], [role="radio"], [role="switch"], [role="slider"], [role="spinbutton"], [role="textbox"], [role="combobox"], [role="option"], [role="menuitem"], [tabindex]:not([part="cell"])',UNMATCHED_AUTHORED_CELL_WARNING_KEY="lyra-dashboard-grid-unmatched-authored-cell",UNMATCHED_AUTHORED_CELL_WARNING="<lr-dashboard-grid>: an authored child has a cell-id that matches no layout entry and will not render.";class LyraDashboardGrid extends LyraElement{constructor(){super(...arguments),this.authoredLayout=Object.freeze([]),this.effectiveLayout=Object.freeze([]),this.columns=12,this.rowHeight=80,this.gap=8,this.collisionValue="reject",this.cellsDraggable=!1,this.cellsResizable=!1,this.locked=!1,this.accessibleLabel=null,this.announcer=new Announcer({onFlush:text=>{this.liveText=text,isAccessibilityVisible(this)&&this.announcementSink?.announce(text)}}),this.liveText="",this.activeCellIndex=0,this.activeCellId="",this.rehomeCellFocus=!1,this.defaultCellSyncQueued=!1,this.ownedDefaultCells=new WeakSet,this.warnedUnmatchedCells=new WeakSet,this.authoredSlotBaselines=new WeakMap,this.managedAuthoredCells=new Set,this.suppressedClickCellId="",this.onCellPointerMove=e=>{const drag=this.cellDrag;if(!(!drag||e.pointerId!==drag.pointerId)){if(!this.canDragCell(drag.cellId)){this.cancelCellDrag();return}drag.pendingClientX=e.clientX,drag.pendingClientY=e.clientY,drag.previewFrame===void 0&&(drag.previewFrame=drag.ownerWindow.requestAnimationFrame(()=>{drag.previewFrame=void 0,this.cellDrag===drag&&this.applyDragPreview(drag)}))}},this.onCellPointerUp=e=>{const drag=this.cellDrag;if(!drag||e.pointerId!==drag.pointerId)return;if(e.type!=="pointerup"||!this.canDragCell(drag.cellId)){this.cancelCellDrag();return}this.flushDragPreview(drag),this.cellDrag=void 0,this.releaseGesturePointerCapture(drag.wrapper,drag.pointerId),drag.wrapper.removeAttribute("data-dragging"),drag.ownerWindow.removeEventListener("pointermove",this.onCellPointerMove),drag.ownerWindow.removeEventListener("pointerup",this.onCellPointerUp),drag.ownerWindow.removeEventListener("pointercancel",this.onCellPointerUp),drag.ownerWindow.removeEventListener("lostpointercapture",this.onCellPointerUp);const x=drag.currentX??drag.startX,y=drag.currentY??drag.startY;(x!==drag.startX||y!==drag.startY)&&this.commitPlacement(drag.cellId,{x,y,w:drag.w,h:drag.h},"move"),drag.moved&&this.armClickSuppression(drag.cellId,drag.ownerWindow),this.resetCellInlineStyle(drag.cellId,drag.wrapper),this.requestUpdate()},this.onResizeHandlePointerMove=e=>{const resize=this.cellResize;if(!(!resize||e.pointerId!==resize.pointerId)){if(!this.canResizeCell(resize.cellId)){this.cancelCellResize();return}resize.pendingClientX=e.clientX,resize.pendingClientY=e.clientY,resize.previewFrame===void 0&&(resize.previewFrame=resize.ownerWindow.requestAnimationFrame(()=>{resize.previewFrame=void 0,this.cellResize===resize&&this.applyResizePreview(resize)}))}},this.onResizeHandlePointerUp=e=>{const resize=this.cellResize;if(!resize||e.pointerId!==resize.pointerId)return;if(e.type!=="pointerup"||!this.canResizeCell(resize.cellId)){this.cancelCellResize();return}this.flushResizePreview(resize),this.cellResize=void 0,this.releaseGesturePointerCapture(resize.captureTarget,resize.pointerId),resize.wrapper.removeAttribute("data-resizing"),resize.ownerWindow.removeEventListener("pointermove",this.onResizeHandlePointerMove),resize.ownerWindow.removeEventListener("pointerup",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("pointercancel",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("lostpointercapture",this.onResizeHandlePointerUp);const w=resize.currentW??resize.startW,h=resize.currentH??resize.startH;(w!==resize.startW||h!==resize.startH)&&this.commitPlacement(resize.cellId,{x:resize.x,y:resize.y,w,h},"resize"),resize.moved&&this.armClickSuppression(resize.cellId,resize.ownerWindow),this.resetCellInlineStyle(resize.cellId,resize.wrapper),this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,dashboardCellCollisionRejected:LYRA_DEFAULT_dashboardCellCollisionRejected,dashboardCellMoved:LYRA_DEFAULT_dashboardCellMoved,dashboardCellResized:LYRA_DEFAULT_dashboardCellResized,dashboardGridLabel:LYRA_DEFAULT_dashboardGridLabel,flowItemAnnouncement:LYRA_DEFAULT_flowItemAnnouncement,noData:LYRA_DEFAULT_noData}}static{this.immutableEventDetails=Object.freeze(["lr-collision","lr-layout-change"])}static{this.styles=[LyraElement.styles,styles,srOnly]}get layout(){return this.effectiveLayout}set layout(value){const previous=this.effectiveLayout;this.authoredLayout=snapshotDashboardLayout(value),this.effectiveLayout=projectDashboardLayout(this.authoredLayout,this.safeColumns),this.announceAppliedPlacement(),this.requestUpdate("layout",previous)}get collision(){return this.collisionValue}set collision(value){const previous=this.collisionValue;this.collisionValue=normalizeLyraDashboardCollisionPolicy(value),this.requestUpdate("collision",previous)}get safeColumns(){return finiteInteger(this.columns,12,1,48)}get safeRowHeight(){return finiteRange(this.rowHeight,80,1)}get safeGap(){return finiteRange(this.gap,8,0)}get sortedLayout(){return sortDashboardSpatial(this.effectiveLayout)}connectedCallback(){super.connectedCallback(),this.bindOwnerRealmResources(),this.scheduleDefaultCellSync()}disconnectedCallback(){this.announcer.cancel(),this.announcementSink?.release(),this.announcementSink=void 0,this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0,this.defaultCellSyncQueued=!1,this.restoreManagedAuthoredSlots(),this.clearSuppressedClick(),this.pendingPlacementAnnouncement=void 0,this.cancelCellDrag(),this.cancelCellResize(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0,this.announcementSink?.release(),this.announcementSink=void 0,this.clearSuppressedClick(),this.isConnected&&(this.bindOwnerRealmResources(),this.scheduleDefaultCellSync())}bindOwnerRealmResources(){const ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.announcementSink??=acquireAnnouncementSink("polite",{document:ownerDocument,source:this}),this.childObserver&&this.childObserverDocument===ownerDocument)return;this.childObserver?.disconnect(),this.childObserver=void 0,this.childObserverDocument=void 0;const MutationObserverCtor=ownerWindow?.MutationObserver;if(!MutationObserverCtor)return;const observer=new MutationObserverCtor(records=>{this.childObserver!==observer||this.childObserverDocument!==ownerDocument||!records.some(record=>record.type==="childList"?record.target===this:record.target.parentNode===this)||this.scheduleDefaultCellSync()});observer.observe(this,{childList:!0,attributes:!0,attributeFilter:["cell-id"],subtree:!0}),this.childObserver=observer,this.childObserverDocument=ownerDocument}scheduleDefaultCellSync(){!this.isConnected||this.defaultCellSyncQueued||(this.defaultCellSyncQueued=!0,queueMicrotask(()=>{this.defaultCellSyncQueued=!1,this.isConnected&&this.syncDefaultCells()}))}willUpdate(changed){if(super.willUpdate(changed),changed.has("columns")&&(this.effectiveLayout=projectDashboardLayout(this.authoredLayout,this.safeColumns)),changed.has("layout")||changed.has("columns")){this.rehomeCellFocus=activeElementIn(this.renderRoot)?.getAttribute("part")==="cell",this.ownerDocument&&this.isConnected&&(this.hasUpdated?this.syncDefaultCells():this.seedFirstRenderState(()=>this.syncDefaultCells()));const cells=this.sortedLayout,retainedIndex=cells.findIndex(cell=>cell.cellId===this.activeCellId),nextIndex=cells.length===0?0:retainedIndex>=0?retainedIndex:Math.min(this.activeCellIndex,cells.length-1);this.activeCellIndex=nextIndex,this.activeCellId=cells[nextIndex]?.cellId??""}this.cellDrag&&(changed.has("layout")||changed.has("columns")||changed.has("rowHeight")||changed.has("gap")||(changed.has("cellsDraggable")||changed.has("locked"))&&!this.canDragCell(this.cellDrag.cellId))&&this.cancelCellDrag(),this.cellResize&&(changed.has("layout")||changed.has("columns")||changed.has("rowHeight")||changed.has("gap")||(changed.has("cellsResizable")||changed.has("locked"))&&!this.canResizeCell(this.cellResize.cellId))&&this.cancelCellResize()}updated(changed){super.updated(changed),this.rehomeCellFocus&&(this.rehomeCellFocus=!1,this.renderRoot.querySelector('[part="cell"][tabindex="0"]')?.focus())}cellLabel(cell){return cell.label||cell.cellId}restoreAuthoredSlot(child){if(!this.authoredSlotBaselines.has(child))return;const baseline=this.authoredSlotBaselines.get(child);baseline===null?child.removeAttribute("slot"):baseline!==void 0&&child.setAttribute("slot",baseline),this.authoredSlotBaselines.delete(child),this.managedAuthoredCells.delete(child)}restoreManagedAuthoredSlots(){for(const child of this.managedAuthoredCells)this.restoreAuthoredSlot(child);this.managedAuthoredCells.clear()}syncDefaultCells(){if(!this.isConnected)return;const ids=new Set(this.effectiveLayout.map(cell=>cell.cellId)),authoredById=new Map,ownedById=new Map;for(const child of Array.from(this.children)){if(this.ownedDefaultCells.has(child)){const ownedCellId=child.getAttribute("data-cell-id");if(!ownedCellId){child.remove();continue}const matches=ownedById.get(ownedCellId)??[];matches.push(child),ownedById.set(ownedCellId,matches);continue}const cellId=child.getAttribute("cell-id");cellId&&ids.has(cellId)&&!authoredById.has(cellId)?(authoredById.set(cellId,child),this.warnedUnmatchedCells.delete(child),this.authoredSlotBaselines.has(child)||this.authoredSlotBaselines.set(child,child.getAttribute("slot")),this.managedAuthoredCells.add(child),child.setAttribute("slot",`cell-${cellId}`)):(this.restoreAuthoredSlot(child),cellId&&!ids.has(cellId)&&!this.warnedUnmatchedCells.has(child)&&(this.warnedUnmatchedCells.add(child),devWarnOnce(UNMATCHED_AUTHORED_CELL_WARNING_KEY,UNMATCHED_AUTHORED_CELL_WARNING)))}const selectedAuthored=new Set(authoredById.values());for(const managed of[...this.managedAuthoredCells])(!this.contains(managed)||!selectedAuthored.has(managed))&&this.restoreAuthoredSlot(managed);for(const cell of this.effectiveLayout){const owned=ownedById.get(cell.cellId)??[];if(authoredById.has(cell.cellId)){for(const defaultCell of owned)defaultCell.remove();continue}const existing=owned.shift();existing?(existing.setAttribute("slot",`cell-${cell.cellId}`),this.updateDefaultCell(existing,cell)):this.appendChild(this.createDefaultCell(cell));for(const duplicate of owned)duplicate.remove();ownedById.delete(cell.cellId)}for(const stale of ownedById.values())for(const defaultCell of stale)defaultCell.remove()}createDefaultCell(cell){const ownerDocument=this.ownerDocument,widget=ownerDocument.createElement(tag("widget"));widget.setAttribute("data-cell-id",cell.cellId),widget.setAttribute("data-dashboard-grid-default-cell",""),widget.setAttribute("slot",`cell-${cell.cellId}`),this.ownedDefaultCells.add(widget);const renderer=ownerDocument.createElement(tag("widget-renderer"));return widget.appendChild(renderer),this.updateDefaultCell(widget,cell),widget}updateDefaultCell(widget,cell){widget.label=this.cellLabel(cell);const renderer=widget.querySelector(tag("widget-renderer"));renderer&&(renderer.document=cell.widget==null?null:createWidgetDocument(cell.widget))}onCellFocus(cellId){const index=this.sortedLayout.findIndex(cell=>cell.cellId===cellId);index>=0&&(this.activeCellIndex!==index&&(this.activeCellIndex=index),this.activeCellId!==cellId&&(this.activeCellId=cellId))}cellElement(cellId){const ownerCss=this.ownerDocument.defaultView?.CSS;if(typeof ownerCss?.escape=="function")try{const candidate=this.renderRoot.querySelector(`[part="cell"][data-cell-id="${ownerCss.escape(cellId)}"]`);if(candidate?.getAttribute("data-cell-id")===cellId)return candidate}catch{}return Array.from(this.renderRoot.querySelectorAll('[part="cell"][data-cell-id]')).find(candidate=>candidate.getAttribute("data-cell-id")===cellId)??null}focusCellAt(index){const cells=this.sortedLayout;if(index<0||index>=cells.length)return;this.activeCellIndex=index;const cell=cells[index];this.activeCellId=cell.cellId;const number=getNumberFormat(this.effectiveLocale);this.announcer.announce(this.localize("flowItemAnnouncement",void 0,{item:this.cellLabel(cell),index:number.format(index+1),total:number.format(cells.length)})),this.updateComplete.then(()=>{this.cellElement(cell.cellId)?.focus()})}onCellKeyDown(e,cell){const owner=e.currentTarget;if(e.composedPath()[0]!==owner)return;if((e.ctrlKey||e.metaKey)&&isArrowKey(e.key)){(e.shiftKey?this.keyboardResize(cell,e.key):this.keyboardMove(cell,e.key))&&e.preventDefault();return}const cells=this.sortedLayout,index=cells.findIndex(c=>c.cellId===cell.cellId);if(index<0)return;const rtl=isRtl(this),forwardKey=rtl?"ArrowLeft":"ArrowRight",backwardKey=rtl?"ArrowRight":"ArrowLeft";let next=index;if(e.key===forwardKey||e.key==="ArrowDown")next=Math.min(cells.length-1,index+1);else if(e.key===backwardKey||e.key==="ArrowUp")next=Math.max(0,index-1);else if(e.key==="Home")next=0;else if(e.key==="End")next=cells.length-1;else return;next!==index&&(e.preventDefault(),this.focusCellAt(next))}keyboardMove(cell,key){if(!this.cellsDraggable||this.locked||cell.locked)return!1;const rtlFlip=isRtl(this)?-1:1;let dx=0,dy=0;if(key==="ArrowRight")dx=rtlFlip;else if(key==="ArrowLeft")dx=-rtlFlip;else if(key==="ArrowDown")dy=1;else if(key==="ArrowUp")dy=-1;else return!1;return this.commitPlacement(cell.cellId,{x:cell.x+dx,y:cell.y+dy,w:cell.w,h:cell.h},"move")}keyboardResize(cell,key){if(!this.cellsResizable||this.locked||cell.locked)return!1;let dw=0,dh=0;if(key==="ArrowRight")dw=1;else if(key==="ArrowLeft")dw=-1;else if(key==="ArrowDown")dh=1;else if(key==="ArrowUp")dh=-1;else return!1;return this.commitPlacement(cell.cellId,{x:cell.x,y:cell.y,w:cell.w+dw,h:cell.h+dh},"resize")}announceAppliedPlacement(){const pending=this.pendingPlacementAnnouncement;if(!pending)return;this.pendingPlacementAnnouncement=void 0;const cell=this.effectiveLayout.find(candidate=>candidate.cellId===pending.cellId);if(!cell||!(pending.kind==="move"?cell.x===pending.x&&cell.y===pending.y:cell.w===pending.w&&cell.h===pending.h))return;const number=getNumberFormat(this.effectiveLocale);if(pending.kind==="move"){this.announcer.announce(this.localize("dashboardCellMoved",void 0,{label:this.cellLabel(cell),x:number.format(cell.x+1),y:number.format(cell.y+1)}));return}this.announcer.announce(this.localize("dashboardCellResized",void 0,{label:this.cellLabel(cell),w:number.format(cell.w),h:number.format(cell.h)}))}commitPlacement(cellId,requested,kind){const layout=this.effectiveLayout,cell=layout.find(candidate=>candidate.cellId===cellId);if(!cell)return!1;const result=resolveDashboardPlacement(layout,cellId,requested,this.safeColumns,this.collision);if(result.collidedCellIds.length>0&&this.emit("lr-collision",Object.freeze({cellId,collidedCellIds:result.collidedCellIds,policy:this.collision,accepted:result.accepted})),!result.accepted)return this.announcer.announce(this.localize("dashboardCellCollisionRejected",void 0,{label:this.cellLabel(cell)})),!0;const updated=result.layout.find(candidate=>candidate.cellId===cellId);return(kind==="move"?updated.x===cell.x&&updated.y===cell.y:updated.w===cell.w&&updated.h===cell.h)?!1:(this.pendingPlacementAnnouncement={cellId,kind,x:updated.x,y:updated.y,w:updated.w,h:updated.h},kind==="move"?this.emit("lr-cell-move",Object.freeze({cellId,position:Object.freeze({x:updated.x,y:updated.y}),previous:Object.freeze({x:cell.x,y:cell.y})})):this.emit("lr-cell-resize",Object.freeze({cellId,size:Object.freeze({w:updated.w,h:updated.h}),previous:Object.freeze({w:cell.w,h:cell.h})})),this.emit("lr-layout-change",Object.freeze({layout:result.layout})),!0)}cellStyle(cell){return{"grid-column":`${cell.x+1} / span ${cell.w}`,"grid-row":`${cell.y+1} / span ${cell.h}`}}measurePitch(){const baseEl=this.renderRoot.querySelector('[part="base"]');if(!baseEl)return null;const rect=baseEl.getBoundingClientRect(),columns=this.safeColumns,gap=this.safeGap,rawColPitch=(rect.width-gap*(columns-1))/columns;return{colPitch:rawColPitch>0?rawColPitch:1,rowPitch:this.safeRowHeight+gap}}resetCellInlineStyle(cellId,wrapper){wrapper.removeAttribute("data-collision");const cell=this.effectiveLayout.find(candidate=>candidate.cellId===cellId);if(cell){const style=this.cellStyle(cell);wrapper.style.gridColumn=style["grid-column"],wrapper.style.gridRow=style["grid-row"]}}canDragCell(cellId){const cell=this.layout.find(candidate=>candidate.cellId===cellId);return this.cellsDraggable&&!this.locked&&cell!==void 0&&!cell.locked}canResizeCell(cellId){const cell=this.layout.find(candidate=>candidate.cellId===cellId);return this.cellsResizable&&!this.locked&&cell!==void 0&&!cell.locked}releaseGesturePointerCapture(target,pointerId){try{target.releasePointerCapture?.(pointerId)}catch{}}cancelCellDrag(){const drag=this.cellDrag;drag&&(this.cellDrag=void 0,drag.previewFrame!==void 0&&drag.ownerWindow.cancelAnimationFrame(drag.previewFrame),this.releaseGesturePointerCapture(drag.wrapper,drag.pointerId),drag.wrapper.removeAttribute("data-dragging"),this.resetCellInlineStyle(drag.cellId,drag.wrapper),drag.ownerWindow.removeEventListener("pointermove",this.onCellPointerMove),drag.ownerWindow.removeEventListener("pointerup",this.onCellPointerUp),drag.ownerWindow.removeEventListener("pointercancel",this.onCellPointerUp),drag.ownerWindow.removeEventListener("lostpointercapture",this.onCellPointerUp))}cancelCellResize(){const resize=this.cellResize;resize&&(this.cellResize=void 0,resize.previewFrame!==void 0&&resize.ownerWindow.cancelAnimationFrame(resize.previewFrame),this.releaseGesturePointerCapture(resize.captureTarget,resize.pointerId),resize.wrapper.removeAttribute("data-resizing"),this.resetCellInlineStyle(resize.cellId,resize.wrapper),resize.ownerWindow.removeEventListener("pointermove",this.onResizeHandlePointerMove),resize.ownerWindow.removeEventListener("pointerup",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("pointercancel",this.onResizeHandlePointerUp),resize.ownerWindow.removeEventListener("lostpointercapture",this.onResizeHandlePointerUp))}hasInteractiveTarget(e,wrapper){const path=e.composedPath(),stop=path.indexOf(wrapper);for(const node of stop<0?path:path.slice(0,stop)){const element=node;if(typeof element.matches=="function"&&node!==wrapper&&element.matches(INTERACTIVE_DESCENDANT_SELECTOR))return!0}return!1}onCellPointerDown(e,cell){if(!this.cellsDraggable||this.locked||cell.locked||this.cellDrag||!e.isPrimary||e.button!==0)return;const wrapper=e.currentTarget;if(this.hasInteractiveTarget(e,wrapper))return;const ownerWindow=wrapper.ownerDocument.defaultView;if(!ownerWindow)return;const pitch=this.measurePitch();if(!pitch)return;const layout=this.effectiveLayout;e.stopPropagation(),this.cellDrag={pointerId:e.pointerId,cellId:cell.cellId,startClientX:e.clientX,startClientY:e.clientY,startX:cell.x,startY:cell.y,w:cell.w,h:cell.h,...pitch,wrapper,ownerWindow,rtlFlip:isRtl(this)?-1:1,layout,spatialIndex:createDashboardSpatialIndex(layout,this.safeColumns)},wrapper.setPointerCapture?.(e.pointerId),wrapper.setAttribute("data-dragging",""),ownerWindow.addEventListener("pointermove",this.onCellPointerMove),ownerWindow.addEventListener("pointerup",this.onCellPointerUp),ownerWindow.addEventListener("pointercancel",this.onCellPointerUp),ownerWindow.addEventListener("lostpointercapture",this.onCellPointerUp)}applyDragPreview(drag){if(drag.pendingClientX===void 0||drag.pendingClientY===void 0)return;const clientX=drag.pendingClientX,clientY=drag.pendingClientY;drag.pendingClientX=void 0,drag.pendingClientY=void 0;const dxUnits=Math.round((clientX-drag.startClientX)*drag.rtlFlip/drag.colPitch),dyUnits=Math.round((clientY-drag.startClientY)/drag.rowPitch),{x,y}=clampDashboardCandidate({},{x:drag.startX+dxUnits,y:drag.startY+dyUnits,w:drag.w,h:drag.h},drag.spatialIndex.columns);if(drag.wrapper.style.gridColumn=`${x+1} / span ${drag.w}`,drag.wrapper.style.gridRow=`${y+1} / span ${drag.h}`,this.collision!=="overlap"){const collides=findDashboardCollisions(drag.spatialIndex,{cellId:drag.cellId,x,y,w:drag.w,h:drag.h}).length>0;drag.wrapper.toggleAttribute("data-collision",collides)}else drag.wrapper.removeAttribute("data-collision");drag.currentX=x,drag.currentY=y,(x!==drag.startX||y!==drag.startY)&&(drag.moved=!0)}flushDragPreview(drag){drag.previewFrame!==void 0&&(drag.ownerWindow.cancelAnimationFrame(drag.previewFrame),drag.previewFrame=void 0),this.applyDragPreview(drag)}onResizeHandlePointerDown(e,cell){if(!this.cellsResizable||this.locked||cell.locked||this.cellResize||!e.isPrimary||e.button!==0)return;const wrapper=e.currentTarget.closest('[part="cell"]');if(!wrapper)return;const ownerWindow=wrapper.ownerDocument.defaultView;if(!ownerWindow)return;const pitch=this.measurePitch();if(!pitch)return;const layout=this.effectiveLayout;e.stopPropagation();const captureTarget=e.currentTarget;this.cellResize={pointerId:e.pointerId,cellId:cell.cellId,startClientX:e.clientX,startClientY:e.clientY,startW:cell.w,startH:cell.h,x:cell.x,y:cell.y,...pitch,wrapper,captureTarget,ownerWindow,rtlFlip:isRtl(this)?-1:1,layout,spatialIndex:createDashboardSpatialIndex(layout,this.safeColumns)},captureTarget.setPointerCapture?.(e.pointerId),wrapper.setAttribute("data-resizing",""),ownerWindow.addEventListener("pointermove",this.onResizeHandlePointerMove),ownerWindow.addEventListener("pointerup",this.onResizeHandlePointerUp),ownerWindow.addEventListener("pointercancel",this.onResizeHandlePointerUp),ownerWindow.addEventListener("lostpointercapture",this.onResizeHandlePointerUp)}applyResizePreview(resize){if(resize.pendingClientX===void 0||resize.pendingClientY===void 0)return;const clientX=resize.pendingClientX,clientY=resize.pendingClientY;resize.pendingClientX=void 0,resize.pendingClientY=void 0;const dwUnits=Math.round((clientX-resize.startClientX)*resize.rtlFlip/resize.colPitch),dhUnits=Math.round((clientY-resize.startClientY)/resize.rowPitch),{w,h}=clampDashboardCandidate(resize.spatialIndex.byId.get(resize.cellId)??{},{x:resize.x,y:resize.y,w:resize.startW+dwUnits,h:resize.startH+dhUnits},resize.spatialIndex.columns);if(resize.wrapper.style.gridColumn=`${resize.x+1} / span ${w}`,resize.wrapper.style.gridRow=`${resize.y+1} / span ${h}`,this.collision!=="overlap"){const collides=findDashboardCollisions(resize.spatialIndex,{cellId:resize.cellId,x:resize.x,y:resize.y,w,h}).length>0;resize.wrapper.toggleAttribute("data-collision",collides)}else resize.wrapper.removeAttribute("data-collision");resize.currentW=w,resize.currentH=h,(w!==resize.startW||h!==resize.startH)&&(resize.moved=!0)}flushResizePreview(resize){resize.previewFrame!==void 0&&(resize.ownerWindow.cancelAnimationFrame(resize.previewFrame),resize.previewFrame=void 0),this.applyResizePreview(resize)}clearSuppressedClick(){this.suppressedClickTimer!==void 0&&this.suppressedClickWindow&&this.suppressedClickWindow.clearTimeout(this.suppressedClickTimer),this.suppressedClickTimer=void 0,this.suppressedClickWindow=void 0,this.suppressedClickCellId=""}armClickSuppression(cellId,ownerWindow){this.clearSuppressedClick(),this.suppressedClickCellId=cellId,this.suppressedClickWindow=ownerWindow,this.suppressedClickTimer=ownerWindow.setTimeout(()=>{this.suppressedClickTimer=void 0,this.suppressedClickWindow=void 0,this.suppressedClickCellId=""},0)}onCellClick(e,cellId){this.suppressedClickCellId===cellId&&(this.clearSuppressedClick(),e.preventDefault(),e.stopImmediatePropagation())}renderCell(cell,active){const resizableHere=this.cellsResizable&&!this.locked&&!cell.locked;return html`<div
2
2
  part="cell"
3
3
  role="group"
4
4
  tabindex=${active?"0":"-1"}
@@ -26,9 +26,9 @@ export interface LyraDetailsToggleDetail{open:boolean;source:LyraDetailsToggleSo
26
26
  * @slot summary - Summary content. Takes priority over `summary` when any light-DOM child
27
27
  * carries `slot="summary"` — the fallback localized "Details" text only appears when neither
28
28
  * is set.
29
- * @slot header-actions - Extra controls rendered in the summary row (e.g. a trailing "add"
30
- * button). Activating the wrapper or an interactive slotted descendant does not toggle the
31
- * panel.
29
+ * @slot header-actions - Extra controls rendered as a sibling of the native summary in the
30
+ * complete header row (e.g. a trailing "add" button). They remain enabled and do not toggle
31
+ * the panel, including while the disclosure itself is disabled.
32
32
  * @slot expand-icon - Icon shown while the panel is closed.
33
33
  * @slot collapse-icon - Icon shown while the panel is open.
34
34
  * @slot - Panel content.
@@ -41,14 +41,15 @@ export interface LyraDetailsToggleDetail{open:boolean;source:LyraDetailsToggleSo
41
41
  * named disclosure closes this panel. Kept alongside the four events above because it is the
42
42
  * single event that reports which way the panel went, which `<lr-accordion>` uses to close the
43
43
  * siblings of a newly-opened panel.
44
- * @csspart base - Compatibility name for the native details wrapper; use `details`.
45
- * @csspart details - The native details wrapper. It is the same node as `base`.
46
- * @csspart header - The summary-row layout wrapper.
44
+ * @csspart base - Compatibility name for the outer disclosure container; use `details`.
45
+ * @csspart details - The outer disclosure container. It is the same node as `base`.
46
+ * @csspart header - The complete row containing the native summary and any header actions.
47
47
  * @csspart summary - The summary control.
48
48
  * @csspart icon - The expand/collapse icon wrapper.
49
49
  * @csspart summary-icon - Shoelace-compatible alias for `icon`; both names are on the same node.
50
- * @csspart header-actions - The wrapper around the `header-actions` slot.
51
- * @csspart content - The panel content.
50
+ * @csspart header-actions - The wrapper around the `header-actions` slot, following the private
51
+ * native details element in `header`.
52
+ * @csspart content - The panel content inside a private findable closed-state gate.
52
53
  * @cssprop [--lr-details-font-size=var(--lr-form-control-font-size)] - Text size of the summary
53
54
  * and the panel. Its private default follows the library's shared size ladder; an inherited or
54
55
  * direct public value remains authoritative.
@@ -77,7 +78,7 @@ export interface LyraDetailsToggleDetail{open:boolean;source:LyraDetailsToggleSo
77
78
  * @status stable
78
79
  * @since 4.0.0
79
80
  */
80
- export declare class LyraDetails extends LyraElement<LyraDetailsEventMap>{static styles:import("lit").CSSResultGroup[];private readonly detailsInternals;private readonly disclosureMotion;private _open;
81
+ export declare class LyraDetails extends LyraElement<LyraDetailsEventMap>{static styles:import("lit").CSSResultGroup[];private readonly detailsInternals;private readonly disclosureMotion;private _open;private readonly contentId;private contentGateMode;private contentGateGeneration;private fragmentListenerWindow?;private fragmentNavigationGeneration;
81
82
  /** Whether the panel is expanded. Assigning it runs the full `lr-show`/`lr-hide` lifecycle and
82
83
  * can be vetoed the same way, so the property, the reflected attribute and `show()`/`hide()`
83
84
  * can never disagree. */
@@ -100,10 +101,10 @@ size:LyraDetailsSize;summary:string;private hasSummarySlot;
100
101
  /** Same `:empty`-can't-match reasoning as `hasSummarySlot` above -- the `header-actions` wrapper
101
102
  * always contains a literal `<slot>` child, so its own emptiness has to be tracked in JS instead
102
103
  * to keep an unused wrapper from claiming layout space. */
103
- private hasHeaderActionsSlot;protected willUpdate(changed:PropertyValues<this>):void;connectedCallback():void;disconnectedCallback():void;firstUpdated(changed:PropertyValues):void;
104
+ private hasHeaderActionsSlot;protected willUpdate(changed:PropertyValues<this>):void;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;firstUpdated(changed:PropertyValues):void;
104
105
  /** Expand the panel. The promise resolves after `lr-after-show`; vetoed or disabled requests
105
106
  * resolve without changing state. */
106
- show():Promise<void>;protected showWithSource(source:LyraDetailsToggleSource):Promise<void>;
107
+ show():Promise<void>;protected showWithSource(source:LyraDetailsToggleSource):Promise<void>;private beginShow;
107
108
  /** Collapse the panel. The promise resolves after `lr-after-hide`; vetoed requests resolve
108
109
  * without changing state. */
109
110
  hide():Promise<void>;protected hideWithSource(source:LyraDetailsToggleSource):Promise<void>;
@@ -113,4 +114,4 @@ hide():Promise<void>;protected hideWithSource(source:LyraDetailsToggleSource):Pr
113
114
  private closeNamedPeers;private applyOpenState;
114
115
  /** A vetoed transition must leave the reflected attribute agreeing with the property; Lit only
115
116
  * reflects properties it saw change. */
116
- private syncOpenAttribute;private settleTransition;private onClick;private onToggle;private onSummarySlotChange;private onHeaderActionsSlotChange;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-details':LyraDetails;}}
117
+ private syncOpenAttribute;private get nativeDetails();private get summaryElement();private get contentGate();private setContentGateMode;private syncNativeDetailsState;private syncSummaryState;private rearmContentGate;private onBeforeMatch;private armFragmentNavigation;private disarmFragmentNavigation;private onHashChange;private queueFragmentReveal;private revealFragmentTarget;private isDefaultContentTarget;private settleTransition;private onClick;private onToggle;private onSummarySlotChange;private onHeaderActionsSlotChange;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-details':LyraDetails;}}
@@ -1,34 +1,43 @@
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{hostAriaLabel}from"../../../internal/a11y.js";import{attachInternalsSafely}from"../../../internal/form-associated.js";import{chevronIcon}from"../../../internal/icons.js";import{LyraElement}from"../../../internal/lyra-element.js";import{sizes}from"../../../internal/sizes.styles.js";import{DisclosureMotionController}from"./disclosure-motion.js";import{styles}from"./details.styles.js";import{LYRA_DEFAULT_details}from"../../../internal/default-strings.generated.js";class LyraDetails extends LyraElement{constructor(){super(...arguments),this.detailsInternals=attachInternalsSafely(this),this.disclosureMotion=new DisclosureMotionController(this,this.detailsInternals,()=>this.renderRoot,'[part~="base"]'),this._open=!1,this.disabled=!1,this.name="",this.appearance="outlined",this.iconPlacement="end",this.size="m",this.summary="",this.hasSummarySlot=!1,this.hasHeaderActionsSlot=!1,this.onClick=event=>{const path=event.composedPath();if(path.some(node=>node?.nodeType===1&&node.matches('[part~="header-actions"]')))return;const summaryIndex=path.findIndex(node=>node?.nodeType===1&&node.localName==="summary");if(!path.slice(0,summaryIndex<0?0:summaryIndex).some(node=>node?.nodeType===1&&node.matches('a[href], button, input, select, textarea, [contenteditable]:not([contenteditable="false"])'))){if(event.preventDefault(),this.disabled){event.stopPropagation();return}this._open?this.hideWithSource("user"):this.showWithSource("user")}},this.onToggle=event=>{const details=event.currentTarget;if(details.open!==this._open){if(this.disabled&&details.open){details.open=!1;return}details.open?this.show():this.hide()}},this.onSummarySlotChange=e=>{this.hasSummarySlot=e.target.assignedElements({flatten:!0}).length>0},this.onHeaderActionsSlotChange=e=>{this.hasHeaderActionsSlot=e.target.assignedElements({flatten:!0}).length>0}}static{this.defaultStrings={...super.defaultStrings,details:LYRA_DEFAULT_details}}static{this.styles=[LyraElement.styles,sizes,styles]}get open(){return this._open}set open(next){const normalized=!!next;if(normalized!==this._open){if(!this.hasUpdated){this.applyOpenState(normalized);return}normalized?this.show():this.hide()}}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasSummarySlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="summary"),this.hasHeaderActionsSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="header-actions")),this.hasUpdated&&changed.has("name")&&this._open&&!this.closeNamedPeers()&&(this.name=changed.get("name")??"")}connectedCallback(){super.connectedCallback(),!(!this.hasUpdated||!this._open)&&queueMicrotask(()=>{this.isConnected&&this._open&&this.closeNamedPeers()})}disconnectedCallback(){this.disclosureMotion.cancel(),super.disconnectedCallback()}firstUpdated(changed){super.firstUpdated(changed),this._open&&this.closeNamedPeers()}async show(){await this.showWithSource("programmatic")}async showWithSource(source){if(!(this._open||this.disabled)){if(this.emit("lr-show",null,{cancelable:!0}).defaultPrevented){this.syncOpenAttribute();return}if(!this.closeNamedPeers()){this.syncOpenAttribute();return}this.applyOpenState(!0),await this.settleTransition("lr-after-show",source)}}async hide(){await this.hideWithSource("programmatic")}async hideWithSource(source){if(this._open){if(this.emit("lr-hide",null,{cancelable:!0}).defaultPrevented){this.syncOpenAttribute();return}this.applyOpenState(!1),await this.settleTransition("lr-after-hide",source)}}closeNamedPeers(){if(!this.name)return!0;const root=this.getRootNode();if(typeof root.querySelectorAll!="function")return!0;let allClosed=!0;for(const candidate of root.querySelectorAll(this.localName))candidate!==this&&candidate instanceof LyraDetails&&candidate.name===this.name&&candidate.open&&(candidate.hideWithSource("peer"),candidate.open&&(allClosed=!1));return allClosed}applyOpenState(next){const old=this._open;this._open=next,this.requestUpdate("open",old)}syncOpenAttribute(){this.toggleAttribute("open",this._open)}async settleTransition(event,source){await this.disclosureMotion.settle(()=>{this.emit("lr-toggle",{open:this._open,source})})&&this.emit(event,null)}render(){return html`<details
2
- part="base details"
3
- .open=${this.open}
4
- name=${this.name||nothing}
5
- @toggle=${this.onToggle}
6
- >
7
- <summary
8
- part="summary"
9
- aria-label=${hostAriaLabel(this)??nothing}
10
- aria-expanded=${this.open?"true":"false"}
11
- aria-disabled=${this.disabled?"true":"false"}
12
- tabindex=${this.disabled?"-1":nothing}
13
- @click=${this.onClick}
14
- >
15
- <span part="header">
16
- <span class="summary-content"
17
- >${this.hasSummarySlot||this.summary?"":this.localize("details")}<slot
18
- name="summary"
19
- @slotchange=${this.onSummarySlotChange}
20
- >${this.summary}</slot
21
- ></span
22
- >
23
- <span part="header-actions" ?hidden=${!this.hasHeaderActionsSlot}>
24
- <slot name="header-actions" @slotchange=${this.onHeaderActionsSlotChange}></slot>
25
- </span>
26
- <span part="icon summary-icon" aria-hidden="true" inert>
27
- <slot name=${this.open?"collapse-icon":"expand-icon"}
28
- ><span class="icon-fallback">${chevronIcon()}</span></slot
29
- >
30
- </span>
31
- </span>
32
- </summary>
33
- <div part="content"><slot></slot></div>
34
- </details>`}}__decorate([property({type:Boolean,reflect:!0})],LyraDetails.prototype,"open",null),__decorate([property({type:Boolean,reflect:!0})],LyraDetails.prototype,"disabled",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"name",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"appearance",void 0),__decorate([property({attribute:"icon-placement",reflect:!0})],LyraDetails.prototype,"iconPlacement",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"size",void 0),__decorate([property()],LyraDetails.prototype,"summary",void 0),__decorate([state()],LyraDetails.prototype,"hasSummarySlot",void 0),__decorate([state()],LyraDetails.prototype,"hasHeaderActionsSlot",void 0);export{LyraDetails};
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{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{attachInternalsSafely}from"../../../internal/form-associated.js";import{chevronIcon}from"../../../internal/icons.js";import{LyraElement}from"../../../internal/lyra-element.js";import{sizes}from"../../../internal/sizes.styles.js";import{DisclosureMotionController}from"./disclosure-motion.js";import{styles}from"./details.styles.js";import{LYRA_DEFAULT_details}from"../../../internal/default-strings.generated.js";class LyraDetails extends LyraElement{constructor(){super(...arguments),this.detailsInternals=attachInternalsSafely(this),this.disclosureMotion=new DisclosureMotionController(this,this.detailsInternals,()=>this.renderRoot,'[part~="base"]'),this._open=!1,this.contentId=nextId("details-content"),this.contentGateMode="until-found",this.contentGateGeneration=0,this.fragmentNavigationGeneration=0,this.disabled=!1,this.name="",this.appearance="outlined",this.iconPlacement="end",this.size="m",this.summary="",this.hasSummarySlot=!1,this.hasHeaderActionsSlot=!1,this.onBeforeMatch=event=>{const gate=event.currentTarget;if(this._open){this.setContentGateMode("open",gate);return}if(this.beginShow()){this.settleTransition("lr-after-show","programmatic");return}this.rearmContentGate(gate)},this.onHashChange=()=>{this.revealFragmentTarget()},this.onClick=event=>{const path=event.composedPath();if(path.some(node=>node?.nodeType===1&&node.matches('[part~="header-actions"]')))return;const summaryIndex=path.findIndex(node=>node?.nodeType===1&&node.localName==="summary");if(!path.slice(0,summaryIndex<0?0:summaryIndex).some(node=>node?.nodeType===1&&node.matches('a[href], button, input, select, textarea, [contenteditable]:not([contenteditable="false"])'))){if(event.preventDefault(),this.disabled){event.stopPropagation();return}this._open?this.hideWithSource("user"):this.showWithSource("user")}},this.onToggle=event=>{const details=event.currentTarget;details.open!==this._open&&(details.open?this.show():this.hide())},this.onSummarySlotChange=e=>{this.hasSummarySlot=e.target.assignedElements({flatten:!0}).length>0},this.onHeaderActionsSlotChange=e=>{this.hasHeaderActionsSlot=e.target.assignedElements({flatten:!0}).length>0}}static{this.defaultStrings={...super.defaultStrings,details:LYRA_DEFAULT_details}}static{this.styles=[LyraElement.styles,sizes,styles]}get open(){return this._open}set open(next){const normalized=!!next;if(normalized!==this._open){if(!this.hasUpdated){this.applyOpenState(normalized);return}normalized?this.show():this.hide()}}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasSummarySlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="summary"),this.hasHeaderActionsSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="header-actions")),this.hasUpdated&&changed.has("name")&&this._open&&!this.closeNamedPeers()&&(this.name=changed.get("name")??"")}connectedCallback(){super.connectedCallback(),this.setContentGateMode(this._open?"open":"until-found"),this.armFragmentNavigation(),!(!this.hasUpdated||!this._open)&&queueMicrotask(()=>{this.isConnected&&this._open&&this.closeNamedPeers()})}disconnectedCallback(){this.disclosureMotion.cancel(),this.disarmFragmentNavigation(),this.contentGateGeneration+=1,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.disarmFragmentNavigation(),this.contentGateGeneration+=1,this.setContentGateMode(this._open?"open":"until-found"),this.isConnected&&this.armFragmentNavigation()}firstUpdated(changed){super.firstUpdated(changed),this._open&&this.closeNamedPeers()}async show(){await this.showWithSource("programmatic")}async showWithSource(source){this.beginShow()&&await this.settleTransition("lr-after-show",source)}beginShow(){return this._open?!1:this.disabled?(this.syncOpenAttribute(),!1):this.emit("lr-show",null,{cancelable:!0}).defaultPrevented?(this.syncOpenAttribute(),!1):this.closeNamedPeers()?(this.applyOpenState(!0),!0):(this.syncOpenAttribute(),!1)}async hide(){await this.hideWithSource("programmatic")}async hideWithSource(source){if(this._open){if(this.emit("lr-hide",null,{cancelable:!0}).defaultPrevented){this.syncOpenAttribute();return}this.applyOpenState(!1),await this.settleTransition("lr-after-hide",source)}}closeNamedPeers(){if(!this.name)return!0;const root=this.getRootNode();if(typeof root.querySelectorAll!="function")return!0;let allClosed=!0;for(const candidate of root.querySelectorAll(this.localName))candidate!==this&&candidate instanceof LyraDetails&&candidate.name===this.name&&candidate.open&&(candidate.hideWithSource("peer"),candidate.open&&(allClosed=!1));return allClosed}applyOpenState(next){const old=this._open;this._open=next,this.contentGateGeneration+=1,this.setContentGateMode(next?"open":"until-found"),this.syncNativeDetailsState(),this.syncSummaryState(),this.requestUpdate("open",old)}syncOpenAttribute(){this.toggleAttribute("open",this._open),this.contentGateGeneration+=1,this.setContentGateMode(this._open?"open":"until-found"),this.syncNativeDetailsState(),this.syncSummaryState()}get nativeDetails(){return this.renderRoot?.querySelector("details")??null}get summaryElement(){return this.renderRoot?.querySelector('[part="summary"]')??null}get contentGate(){return this.renderRoot?.querySelector('[part="content"]')?.parentElement??null}setContentGateMode(mode,gate=this.contentGate){this.contentGateMode=mode,gate&&(mode==="open"?gate.removeAttribute("hidden"):gate.setAttribute("hidden",mode==="until-found"?"until-found":""))}syncNativeDetailsState(){const nativeDetails=this.nativeDetails;nativeDetails&&nativeDetails.open!==this._open&&(nativeDetails.open=this._open)}syncSummaryState(){this.summaryElement?.setAttribute("aria-expanded",this._open?"true":"false")}rearmContentGate(gate){const generation=++this.contentGateGeneration;this.setContentGateMode("ordinary-hidden",gate),queueMicrotask(()=>{generation!==this.contentGateGeneration||!this.isConnected||this._open||gate!==this.contentGate||(this.setContentGateMode("until-found",gate),this.requestUpdate())})}armFragmentNavigation(){const view=this.ownerDocument.defaultView;view&&(this.fragmentListenerWindow!==view&&(this.disarmFragmentNavigation(),this.fragmentListenerWindow=view,view.addEventListener("hashchange",this.onHashChange)),this.queueFragmentReveal())}disarmFragmentNavigation(){this.fragmentNavigationGeneration+=1,this.fragmentListenerWindow?.removeEventListener("hashchange",this.onHashChange),this.fragmentListenerWindow=void 0}queueFragmentReveal(){const generation=++this.fragmentNavigationGeneration;queueMicrotask(()=>{generation!==this.fragmentNavigationGeneration||!this.isConnected||this.ownerDocument.defaultView!==this.fragmentListenerWindow||this.revealFragmentTarget()})}revealFragmentTarget(){if(this._open)return;const hash=this.ownerDocument.defaultView?.location.hash;if(!hash||hash.length<2)return;let targetId;try{targetId=decodeURIComponent(hash.slice(1))}catch{return}const target=this.ownerDocument.getElementById(targetId);!target||!this.isDefaultContentTarget(target)||this.showWithSource("programmatic")}isDefaultContentTarget(target){if(target===this||!this.contains(target))return!1;let topLevel=target;for(;topLevel.parentElement&&topLevel.parentElement!==this;)topLevel=topLevel.parentElement;return topLevel.parentElement===this&&(topLevel.getAttribute("slot")??"")===""}async settleTransition(event,source){await this.disclosureMotion.settle(()=>{this.emit("lr-toggle",{open:this._open,source})})&&this.emit(event,null)}render(){const gateHidden=this.contentGateMode==="open"?nothing:this.contentGateMode==="until-found"?"until-found":"";return html`
2
+ <div part="base details">
3
+ <div part="header">
4
+ <details
5
+ class="native-details"
6
+ .open=${this.open}
7
+ name=${this.name||nothing}
8
+ @toggle=${this.onToggle}
9
+ ><summary
10
+ part="summary"
11
+ aria-controls=${this.contentId}
12
+ aria-label=${hostAriaLabel(this)??nothing}
13
+ aria-expanded=${this.open?"true":"false"}
14
+ aria-disabled=${this.disabled?"true":"false"}
15
+ tabindex=${this.disabled?"-1":nothing}
16
+ @click=${this.onClick}
17
+ ><span class="summary-content"
18
+ >${this.hasSummarySlot||this.summary?"":this.localize("details")}<slot
19
+ name="summary"
20
+ @slotchange=${this.onSummarySlotChange}
21
+ >${this.summary}</slot
22
+ ></span
23
+ ><span part="icon summary-icon" aria-hidden="true" inert
24
+ ><slot name=${this.open?"collapse-icon":"expand-icon"}
25
+ ><span class="icon-fallback">${chevronIcon()}</span></slot
26
+ ></span
27
+ ></summary
28
+ ></details
29
+ ><span part="header-actions" ?hidden=${!this.hasHeaderActionsSlot}
30
+ ><slot
31
+ name="header-actions"
32
+ @slotchange=${this.onHeaderActionsSlotChange}
33
+ ></slot
34
+ ></span>
35
+ </div>
36
+ <div
37
+ class="content-gate"
38
+ id=${this.contentId}
39
+ hidden=${gateHidden}
40
+ @beforematch=${this.onBeforeMatch}
41
+ ><div part="content"><slot></slot></div></div>
42
+ </div>
43
+ `}}__decorate([property({type:Boolean,reflect:!0})],LyraDetails.prototype,"open",null),__decorate([property({type:Boolean,reflect:!0})],LyraDetails.prototype,"disabled",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"name",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"appearance",void 0),__decorate([property({attribute:"icon-placement",reflect:!0})],LyraDetails.prototype,"iconPlacement",void 0),__decorate([property({reflect:!0})],LyraDetails.prototype,"size",void 0),__decorate([property()],LyraDetails.prototype,"summary",void 0),__decorate([state()],LyraDetails.prototype,"hasSummarySlot",void 0),__decorate([state()],LyraDetails.prototype,"hasHeaderActionsSlot",void 0);export{LyraDetails};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-details-font-size:var(--lr-form-control-font-size);--_lr-details-spacing:var(--lr-form-control-padding-inline);min-inline-size:0;max-inline-size:100%;display:block}[part~=base]{border:var(--lr-border-width-thin) solid var(--lr-details-outlined-border-color,var(--lr-color-border));border-radius:var(--lr-details-radius,var(--lr-radius));background:var(--lr-details-outlined-bg,var(--lr-color-surface));min-inline-size:0;max-inline-size:100%;font-size:var(--lr-details-font-size,var(--_lr-details-font-size));overflow:clip}:host([appearance=filled]) [part~=base]{border-color:var(--lr-details-filled-border-color,transparent);background:var(--lr-details-filled-bg,var(--lr-color-brand-quiet))}:host([appearance=filled-outlined]) [part~=base]{border-color:var(--lr-details-filled-outlined-border-color,var(--lr-color-border));background:var(--lr-details-filled-outlined-bg,var(--lr-color-brand-quiet))}:host([appearance=plain]) [part~=base]{background:0 0;border-color:#0000}[part=summary]{padding-block:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));padding-inline:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));color:var(--lr-color-text);cursor:pointer;font-weight:var(--lr-font-weight-semibold);overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;list-style:none;display:block;overflow:clip}[part=header]{align-items:center;gap:var(--lr-details-gap,var(--lr-space-s));min-inline-size:0;display:flex}.summary-content{overflow-wrap:anywhere;flex:auto;min-inline-size:0}[part=summary]::-webkit-details-marker{display:none}:host(:not([disabled])) [part=summary]:hover{background:var(--lr-details-summary-hover-bg,var(--lr-color-brand-quiet))}:host(:not([disabled])) [part=summary]:active{background:var(--lr-details-summary-active-bg,color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)))}[part=summary]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part~=icon]{flex:none;justify-content:center;align-items:center;display:inline-flex}:host([icon-placement=start]) [part~=icon]{order:-1}.icon-fallback{transition:transform var(--hide-duration,var(--lr-duration-base)) var(--lr-easing-standard);display:inline-flex;transform:rotate(90deg)}:host([open]) .icon-fallback{transition-duration:var(--show-duration,var(--lr-duration-base));transform:rotate(-90deg)}.icon-fallback svg{inline-size:var(--lr-size-1rem);block-size:var(--lr-size-1rem)}:host([disabled]) [part=summary]{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part~=header-actions]{flex:none;align-items:center;display:flex}[part~=header-actions][hidden]{display:none}[part=content]{padding-block-end:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));padding-inline:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%}@media (prefers-reduced-motion:reduce){.icon-fallback{transition:none}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-details-font-size:var(--lr-form-control-font-size);--_lr-details-spacing:var(--lr-form-control-padding-inline);min-inline-size:0;max-inline-size:100%;display:block}[part~=base]{border:var(--lr-border-width-thin) solid var(--lr-details-outlined-border-color,var(--lr-color-border));border-radius:var(--lr-details-radius,var(--lr-radius));background:var(--lr-details-outlined-bg,var(--lr-color-surface));min-inline-size:0;max-inline-size:100%;font-size:var(--lr-details-font-size,var(--_lr-details-font-size));overflow:clip}:host([appearance=filled]) [part~=base]{border-color:var(--lr-details-filled-border-color,transparent);background:var(--lr-details-filled-bg,var(--lr-color-brand-quiet))}:host([appearance=filled-outlined]) [part~=base]{border-color:var(--lr-details-filled-outlined-border-color,var(--lr-color-border));background:var(--lr-details-filled-outlined-bg,var(--lr-color-brand-quiet))}:host([appearance=plain]) [part~=base]{background:0 0;border-color:#0000}[part=header]{align-items:center;gap:var(--lr-details-gap,var(--lr-space-s));flex-wrap:wrap;min-inline-size:0;max-inline-size:100%;display:flex}.native-details{flex:auto;min-inline-size:0;max-inline-size:100%;display:block}[part=summary]{align-items:center;gap:var(--lr-details-gap,var(--lr-space-s));min-block-size:var(--lr-icon-button-size);padding-block:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));padding-inline:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));color:var(--lr-color-text);cursor:pointer;font-weight:var(--lr-font-weight-semibold);overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;list-style:none;display:flex;overflow:clip}.summary-content{overflow-wrap:anywhere;flex:auto;min-inline-size:0}[part=summary]::marker,[part=summary]::-webkit-details-marker{display:none}:host(:not([disabled])) [part=summary]:hover{background:var(--lr-details-summary-hover-bg,var(--lr-color-brand-quiet))}:host(:not([disabled])) [part=summary]:active{background:var(--lr-details-summary-active-bg,color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)))}[part=summary]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-width))}[part~=icon]{flex:none;justify-content:center;align-items:center;display:inline-flex}:host([icon-placement=start]) [part~=icon]{order:-1}.icon-fallback{transition:transform var(--hide-duration,var(--lr-duration-base)) var(--lr-easing-standard);display:inline-flex;transform:rotate(90deg)}:host([open]) .icon-fallback{transition-duration:var(--show-duration,var(--lr-duration-base));transform:rotate(-90deg)}.icon-fallback svg{inline-size:var(--lr-size-1rem);block-size:var(--lr-size-1rem)}:host([disabled]) [part=summary]{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part~=header-actions]{overflow-wrap:anywhere;flex:0 auto;align-items:center;min-inline-size:0;max-inline-size:100%;display:flex}.content-gate:where([hidden=until-found]){box-sizing:border-box;contain:layout;pointer-events:none;border:0;block-size:0;min-block-size:0;max-block-size:0;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;display:block;overflow:clip}[part=content]{padding-block-end:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));padding-inline:var(--spacing,var(--lr-details-spacing,var(--_lr-details-spacing)));overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%}@media (prefers-reduced-motion:reduce){.icon-fallback{transition:none}}`;export{styles};
@@ -71,8 +71,9 @@ readonly extent:string;}export interface LyraDockPanelCollapseChangeDetail{reado
71
71
  * `collapsed` state).
72
72
  * @csspart base - The panel root.
73
73
  * @csspart content - The wrapper around the default slot; hidden while `collapsed`.
74
- * @csspart handle - The draggable resize handle on the panel's inner edge. Only rendered when
75
- * `resizable` and not `collapsed`.
74
+ * @csspart handle - The draggable resize handle on the panel's inner edge. Its numeric ARIA range
75
+ * remains in CSS pixels while `aria-valuetext` reports the current extent through the effective
76
+ * locale. Only rendered when `resizable` and not `collapsed`.
76
77
  * @csspart collapse-toggle - The collapse/expand toggle button. Only rendered when `collapsible`.
77
78
  * @cssprop [--lr-dock-panel-collapsed-size=var(--lr-icon-button-size)] - The extent the panel
78
79
  * keeps along its resize axis while `collapsed` -- enough to still host the toggle button that
@@ -126,7 +127,7 @@ private containerPx;private resolveBoundsPx;
126
127
  * live box -- this is what lets `extent` be expressed in any CSS unit and still drag/step
127
128
  * correctly from wherever it actually rendered, with no separate unit-conversion path for the
128
129
  * "current" value. */
129
- private currentSizePx;private reconcileLiveExtent;
130
+ private currentSizePx;private resizeValueText;private reconcileLiveExtent;
130
131
  /** Computes the clamped extent a raw pixel size would resolve to, without applying it --
131
132
  * `undefined` when it's a no-op against the current live size. Split from `applyProposal()` so
132
133
  * a discrete step (keyboard, or a pointer drag's final settle) can offer the proposed extent
@@ -1,9 +1,10 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{isRtl}from"../../../internal/rtl.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./dock-panel.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{resolveCssLength}from"../../../internal/css-length.js";import{LYRA_DEFAULT_dockPanelCollapse,LYRA_DEFAULT_dockPanelExpand,LYRA_DEFAULT_dockPanelResize}from"../../../internal/default-strings.generated.js";const KEYBOARD_STEP_PX=16;class LyraDockPanel extends LyraElement{constructor(){super(...arguments),this.edge="end",this.extent="280px",this.minExtent="160px",this.maxExtent="",this.collapsible=!1,this.collapsed=!1,this.resizable=!0,this.drag=null,this.contentId=nextId("dock-panel-content"),this.onPointerDown=e=>{if(!e.isPrimary||e.button!==0||!this.resizable||this.collapsed||this.drag)return;const handle=e.currentTarget,ownerWindow=handle.ownerDocument.defaultView;if(!ownerWindow)return;const axis=this.axis,growSign=this.growSign;this.drag={pointerId:e.pointerId,startPos:axis==="inline"?e.clientX:e.clientY,startSizePx:this.currentSizePx(),axis,growSign,edge:this.edge,minExtent:this.minExtent,maxExtent:this.maxExtent,containerPx:this.containerPx(),expectedExtent:this.extent,finalExtent:this.extent,acceptedResize:!1},this.dragOwnerWindow=ownerWindow,handle.setPointerCapture(e.pointerId),ownerWindow.addEventListener("pointermove",this.onPointerMove),ownerWindow.addEventListener("pointerup",this.onPointerUp),ownerWindow.addEventListener("pointercancel",this.onPointerCancel),ownerWindow.addEventListener("lostpointercapture",this.onPointerCancel)},this.onPointerMove=e=>{const drag=this.drag;if(!drag||e.pointerId!==drag.pointerId)return;if(!this.dragSnapshotIsCurrent(drag)){this.endDrag();return}const pos=drag.axis==="inline"?e.clientX:e.clientY,delta=drag.growSign*(pos-drag.startPos),extent=this.commitSize(drag.startSizePx+delta);extent!==void 0&&(drag.expectedExtent=extent,drag.finalExtent=extent,drag.acceptedResize=!0,this.emitResize("lr-resize-input",extent))},this.onPointerUp=e=>{const drag=this.drag;if(!drag||e.pointerId!==drag.pointerId)return;const shouldCommit=drag.acceptedResize&&this.dragSnapshotIsCurrent(drag),finalExtent=drag.finalExtent,startSizePx=drag.startSizePx;if(this.endDrag(),!shouldCommit)return;if(this.emit("lr-resize-request",Object.freeze({extent:finalExtent}),{cancelable:!0}).defaultPrevented){this.applyProposal(this.resolveBoundsPx(),`${Math.round(startSizePx)}px`);return}this.emitResize("lr-resize-change",finalExtent)},this.onPointerCancel=e=>{!this.drag||e.pointerId!==this.drag.pointerId||this.endDrag()},this.onHandleKeyDown=e=>{if(!this.resizable||this.collapsed)return;const forwardKey=this.axis==="inline"?"ArrowRight":"ArrowDown",backwardKey=this.axis==="inline"?"ArrowLeft":"ArrowUp";let proposal;e.key===forwardKey?(e.preventDefault(),proposal=this.resolveProposal(this.currentSizePx()+this.growSign*KEYBOARD_STEP_PX)):e.key===backwardKey&&(e.preventDefault(),proposal=this.resolveProposal(this.currentSizePx()-this.growSign*KEYBOARD_STEP_PX)),proposal&&this.requestResize(proposal.bounds,proposal.nextExtent)&&(this.emitResize("lr-resize-input",proposal.nextExtent),this.emitResize("lr-resize-change",proposal.nextExtent))},this.toggleCollapsed=()=>{const next=!this.collapsed;this.emit("lr-collapse-request",Object.freeze({collapsed:next}),{cancelable:!0}).defaultPrevented||(this.collapsed=next,this.emit("lr-collapse-change",Object.freeze({collapsed:next})))}}static{this.defaultStrings={...super.defaultStrings,dockPanelCollapse:LYRA_DEFAULT_dockPanelCollapse,dockPanelExpand:LYRA_DEFAULT_dockPanelExpand,dockPanelResize:LYRA_DEFAULT_dockPanelResize}}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.applyHostSize(),this.armContainerResizeObserver()}disconnectedCallback(){super.disconnectedCallback(),this.endDrag(),this.containerResizeObserver?.disconnect(),this.containerResizeObserver=void 0}adoptedCallback(){super.adoptedCallback(),this.endDrag(),this.containerResizeObserver?.disconnect(),this.containerResizeObserver=void 0}armContainerResizeObserver(){const ResizeObserverCtor=this.ownerDocument.defaultView?.ResizeObserver;!this.parentElement||!ResizeObserverCtor||(this.containerResizeObserver??=new ResizeObserverCtor(()=>{this.isConnected&&(this.drag&&!this.dragSnapshotIsCurrent(this.drag)&&this.endDrag(),this.reconcileLiveExtent(),this.requestUpdate())}),this.containerResizeObserver.observe(this.parentElement),this.containerResizeObserver.observe(this))}willUpdate(changed){super.willUpdate(changed),changed.has("extent")||changed.has("minExtent")||changed.has("maxExtent")||changed.has("collapsed")||changed.has("edge")?(this.drag&&!this.dragSnapshotIsCurrent(this.drag)&&this.endDrag(),this.reconcileLiveExtent()):this.drag&&(changed.has("resizable")&&!this.resizable||changed.has("collapsed")&&this.collapsed)&&this.endDrag()}get axis(){return this.edge==="start"||this.edge==="end"?"inline":"block"}get growSign(){if(this.edge==="top")return 1;if(this.edge==="bottom")return-1;const rtl=isRtl(this);return this.edge==="start"?rtl?-1:1:rtl?1:-1}applyHostSize(bounds=this.resolveBoundsPx()){const value=this.collapsed?"var(--lr-dock-panel-collapsed-size, var(--_lr-dock-panel-collapsed-size))":this.extent;this.axis==="inline"?(this.style.inlineSize=value,this.style.blockSize="",this.style.minBlockSize="",this.style.maxBlockSize="",this.style.minInlineSize=this.collapsed?"":`${bounds.minPx}px`,this.style.maxInlineSize=this.collapsed?"":`${bounds.maxPx}px`):(this.style.blockSize=value,this.style.inlineSize="",this.style.minInlineSize="",this.style.maxInlineSize="",this.style.minBlockSize=this.collapsed?"":`${bounds.minPx}px`,this.style.maxBlockSize=this.collapsed?"":`${bounds.maxPx}px`)}containerPx(){const rect=this.parentElement?.getBoundingClientRect(),ownerWindow=this.ownerDocument.defaultView;return this.axis==="inline"?rect?.width??ownerWindow?.innerWidth??0:rect?.height??ownerWindow?.innerHeight??0}resolveBoundsPx(){const containerPx=Math.max(0,this.containerPx()),lengthContext={host:this,percentBase:containerPx,viewportBasis:this.ownerDocument.defaultView??void 0},authoredMax=Math.max(0,resolveCssLength(this.maxExtent,lengthContext)??containerPx),maxPx=Math.min(containerPx,authoredMax),authoredMin=Math.max(0,resolveCssLength(this.minExtent,lengthContext)??0);return{minPx:Math.min(authoredMin,maxPx),maxPx}}currentSizePx(){const rect=this.getBoundingClientRect();return this.axis==="inline"?rect.width:rect.height}reconcileLiveExtent(){const bounds=this.resolveBoundsPx();if(this.applyHostSize(bounds),this.collapsed)return;const containerPx=this.containerPx(),authoredPx=resolveCssLength(this.extent,{host:this,percentBase:containerPx,viewportBasis:this.ownerDocument.defaultView??void 0}),renderedPx=this.currentSizePx(),candidate=authoredPx??renderedPx;if(!Number.isFinite(candidate))return;const clamped=Math.min(Math.max(candidate,bounds.minPx),bounds.maxPx),renderedOutsideBounds=Number.isFinite(renderedPx)&&(renderedPx<bounds.minPx-.5||renderedPx>bounds.maxPx+.5);if(Math.abs(candidate-clamped)<=.5&&!renderedOutsideBounds)return;const nextExtent=`${Math.round(clamped)}px`;this.extent!==nextExtent&&(this.extent=nextExtent),this.applyHostSize(bounds)}resolveProposal(px){const bounds=this.resolveBoundsPx(),clamped=Math.min(Math.max(px,bounds.minPx),bounds.maxPx),nextExtent=`${Math.round(clamped)}px`,currentExtent=`${Math.round(this.currentSizePx())}px`;if(nextExtent!==currentExtent)return{bounds,nextExtent}}applyProposal(bounds,nextExtent){this.extent=nextExtent,this.applyHostSize(bounds)}commitSize(px){const proposal=this.resolveProposal(px);if(proposal)return this.applyProposal(proposal.bounds,proposal.nextExtent),proposal.nextExtent}requestResize(bounds,extent){return this.emit("lr-resize-request",Object.freeze({extent}),{cancelable:!0}).defaultPrevented?!1:(this.applyProposal(bounds,extent),!0)}emitResize(type,extent){this.emit(type,Object.freeze({extent}))}dragSnapshotIsCurrent(drag){return this.resizable&&!this.collapsed&&this.edge===drag.edge&&this.axis===drag.axis&&this.growSign===drag.growSign&&this.extent===drag.expectedExtent&&this.minExtent===drag.minExtent&&this.maxExtent===drag.maxExtent&&Math.abs(this.containerPx()-drag.containerPx)<=.5}endDrag(){const ownerWindow=this.dragOwnerWindow;this.drag=null,this.dragOwnerWindow=void 0,ownerWindow?.removeEventListener("pointermove",this.onPointerMove),ownerWindow?.removeEventListener("pointerup",this.onPointerUp),ownerWindow?.removeEventListener("pointercancel",this.onPointerCancel),ownerWindow?.removeEventListener("lostpointercapture",this.onPointerCancel)}get toggleChevronDeg(){if(this.edge==="top")return this.collapsed?90:-90;if(this.edge==="bottom")return this.collapsed?-90:90;const pinnedPhysicalEnd=this.edge==="end"?!isRtl(this):isRtl(this);return this.collapsed!==pinnedPhysicalEnd?0:180}handleTemplate(){if(!this.resizable||this.collapsed)return nothing;const{minPx,maxPx}=this.resolveBoundsPx(),nowPx=Math.min(Math.max(this.currentSizePx(),minPx),maxPx);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}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{isRtl}from"../../../internal/rtl.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./dock-panel.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{resolveCssLength}from"../../../internal/css-length.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_dockPanelCollapse,LYRA_DEFAULT_dockPanelExpand,LYRA_DEFAULT_dockPanelResize,LYRA_DEFAULT_resizeValuePixels}from"../../../internal/default-strings.generated.js";const KEYBOARD_STEP_PX=16;class LyraDockPanel extends LyraElement{constructor(){super(...arguments),this.edge="end",this.extent="280px",this.minExtent="160px",this.maxExtent="",this.collapsible=!1,this.collapsed=!1,this.resizable=!0,this.drag=null,this.contentId=nextId("dock-panel-content"),this.onPointerDown=e=>{if(!e.isPrimary||e.button!==0||!this.resizable||this.collapsed||this.drag)return;const handle=e.currentTarget,ownerWindow=handle.ownerDocument.defaultView;if(!ownerWindow)return;const axis=this.axis,growSign=this.growSign;this.drag={pointerId:e.pointerId,startPos:axis==="inline"?e.clientX:e.clientY,startSizePx:this.currentSizePx(),axis,growSign,edge:this.edge,minExtent:this.minExtent,maxExtent:this.maxExtent,containerPx:this.containerPx(),expectedExtent:this.extent,finalExtent:this.extent,acceptedResize:!1},this.dragOwnerWindow=ownerWindow,handle.setPointerCapture(e.pointerId),ownerWindow.addEventListener("pointermove",this.onPointerMove),ownerWindow.addEventListener("pointerup",this.onPointerUp),ownerWindow.addEventListener("pointercancel",this.onPointerCancel),ownerWindow.addEventListener("lostpointercapture",this.onPointerCancel)},this.onPointerMove=e=>{const drag=this.drag;if(!drag||e.pointerId!==drag.pointerId)return;if(!this.dragSnapshotIsCurrent(drag)){this.endDrag();return}const pos=drag.axis==="inline"?e.clientX:e.clientY,delta=drag.growSign*(pos-drag.startPos),extent=this.commitSize(drag.startSizePx+delta);extent!==void 0&&(drag.expectedExtent=extent,drag.finalExtent=extent,drag.acceptedResize=!0,this.emitResize("lr-resize-input",extent))},this.onPointerUp=e=>{const drag=this.drag;if(!drag||e.pointerId!==drag.pointerId)return;const shouldCommit=drag.acceptedResize&&this.dragSnapshotIsCurrent(drag),finalExtent=drag.finalExtent,startSizePx=drag.startSizePx;if(this.endDrag(),!shouldCommit)return;if(this.emit("lr-resize-request",Object.freeze({extent:finalExtent}),{cancelable:!0}).defaultPrevented){this.applyProposal(this.resolveBoundsPx(),`${Math.round(startSizePx)}px`);return}this.emitResize("lr-resize-change",finalExtent)},this.onPointerCancel=e=>{!this.drag||e.pointerId!==this.drag.pointerId||this.endDrag()},this.onHandleKeyDown=e=>{if(!this.resizable||this.collapsed)return;const forwardKey=this.axis==="inline"?"ArrowRight":"ArrowDown",backwardKey=this.axis==="inline"?"ArrowLeft":"ArrowUp";let proposal;e.key===forwardKey?(e.preventDefault(),proposal=this.resolveProposal(this.currentSizePx()+this.growSign*KEYBOARD_STEP_PX)):e.key===backwardKey&&(e.preventDefault(),proposal=this.resolveProposal(this.currentSizePx()-this.growSign*KEYBOARD_STEP_PX)),proposal&&this.requestResize(proposal.bounds,proposal.nextExtent)&&(this.emitResize("lr-resize-input",proposal.nextExtent),this.emitResize("lr-resize-change",proposal.nextExtent))},this.toggleCollapsed=()=>{const next=!this.collapsed;this.emit("lr-collapse-request",Object.freeze({collapsed:next}),{cancelable:!0}).defaultPrevented||(this.collapsed=next,this.emit("lr-collapse-change",Object.freeze({collapsed:next})))}}static{this.defaultStrings={...super.defaultStrings,dockPanelCollapse:LYRA_DEFAULT_dockPanelCollapse,dockPanelExpand:LYRA_DEFAULT_dockPanelExpand,dockPanelResize:LYRA_DEFAULT_dockPanelResize,resizeValuePixels:LYRA_DEFAULT_resizeValuePixels}}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.applyHostSize(),this.armContainerResizeObserver()}disconnectedCallback(){super.disconnectedCallback(),this.endDrag(),this.containerResizeObserver?.disconnect(),this.containerResizeObserver=void 0}adoptedCallback(){super.adoptedCallback(),this.endDrag(),this.containerResizeObserver?.disconnect(),this.containerResizeObserver=void 0}armContainerResizeObserver(){const ResizeObserverCtor=this.ownerDocument.defaultView?.ResizeObserver;!this.parentElement||!ResizeObserverCtor||(this.containerResizeObserver??=new ResizeObserverCtor(()=>{this.isConnected&&(this.drag&&!this.dragSnapshotIsCurrent(this.drag)&&this.endDrag(),this.reconcileLiveExtent(),this.requestUpdate())}),this.containerResizeObserver.observe(this.parentElement),this.containerResizeObserver.observe(this))}willUpdate(changed){super.willUpdate(changed),changed.has("extent")||changed.has("minExtent")||changed.has("maxExtent")||changed.has("collapsed")||changed.has("edge")?(this.drag&&!this.dragSnapshotIsCurrent(this.drag)&&this.endDrag(),this.reconcileLiveExtent()):this.drag&&(changed.has("resizable")&&!this.resizable||changed.has("collapsed")&&this.collapsed)&&this.endDrag()}get axis(){return this.edge==="start"||this.edge==="end"?"inline":"block"}get growSign(){if(this.edge==="top")return 1;if(this.edge==="bottom")return-1;const rtl=isRtl(this);return this.edge==="start"?rtl?-1:1:rtl?1:-1}applyHostSize(bounds=this.resolveBoundsPx()){const value=this.collapsed?"var(--lr-dock-panel-collapsed-size, var(--_lr-dock-panel-collapsed-size))":this.extent;this.axis==="inline"?(this.style.inlineSize=value,this.style.blockSize="",this.style.minBlockSize="",this.style.maxBlockSize="",this.style.minInlineSize=this.collapsed?"":`${bounds.minPx}px`,this.style.maxInlineSize=this.collapsed?"":`${bounds.maxPx}px`):(this.style.blockSize=value,this.style.inlineSize="",this.style.minInlineSize="",this.style.maxInlineSize="",this.style.minBlockSize=this.collapsed?"":`${bounds.minPx}px`,this.style.maxBlockSize=this.collapsed?"":`${bounds.maxPx}px`)}containerPx(){const rect=this.parentElement?.getBoundingClientRect(),ownerWindow=this.ownerDocument.defaultView;return this.axis==="inline"?rect?.width??ownerWindow?.innerWidth??0:rect?.height??ownerWindow?.innerHeight??0}resolveBoundsPx(){const containerPx=Math.max(0,this.containerPx()),lengthContext={host:this,percentBase:containerPx,viewportBasis:this.ownerDocument.defaultView??void 0},authoredMax=Math.max(0,resolveCssLength(this.maxExtent,lengthContext)??containerPx),maxPx=Math.min(containerPx,authoredMax),authoredMin=Math.max(0,resolveCssLength(this.minExtent,lengthContext)??0);return{minPx:Math.min(authoredMin,maxPx),maxPx}}currentSizePx(){const rect=this.getBoundingClientRect();return this.axis==="inline"?rect.width:rect.height}resizeValueText(sizePx){return this.localize("resizeValuePixels",void 0,{value:getNumberFormat(this.effectiveLocale).format(Math.round(sizePx))})}reconcileLiveExtent(){const bounds=this.resolveBoundsPx();if(this.applyHostSize(bounds),this.collapsed)return;const containerPx=this.containerPx(),authoredPx=resolveCssLength(this.extent,{host:this,percentBase:containerPx,viewportBasis:this.ownerDocument.defaultView??void 0}),renderedPx=this.currentSizePx(),candidate=authoredPx??renderedPx;if(!Number.isFinite(candidate))return;const clamped=Math.min(Math.max(candidate,bounds.minPx),bounds.maxPx),renderedOutsideBounds=Number.isFinite(renderedPx)&&(renderedPx<bounds.minPx-.5||renderedPx>bounds.maxPx+.5);if(Math.abs(candidate-clamped)<=.5&&!renderedOutsideBounds)return;const nextExtent=`${Math.round(clamped)}px`;this.extent!==nextExtent&&(this.extent=nextExtent),this.applyHostSize(bounds)}resolveProposal(px){const bounds=this.resolveBoundsPx(),clamped=Math.min(Math.max(px,bounds.minPx),bounds.maxPx),nextExtent=`${Math.round(clamped)}px`,currentExtent=`${Math.round(this.currentSizePx())}px`;if(nextExtent!==currentExtent)return{bounds,nextExtent}}applyProposal(bounds,nextExtent){this.extent=nextExtent,this.applyHostSize(bounds)}commitSize(px){const proposal=this.resolveProposal(px);if(proposal)return this.applyProposal(proposal.bounds,proposal.nextExtent),proposal.nextExtent}requestResize(bounds,extent){return this.emit("lr-resize-request",Object.freeze({extent}),{cancelable:!0}).defaultPrevented?!1:(this.applyProposal(bounds,extent),!0)}emitResize(type,extent){this.emit(type,Object.freeze({extent}))}dragSnapshotIsCurrent(drag){return this.resizable&&!this.collapsed&&this.edge===drag.edge&&this.axis===drag.axis&&this.growSign===drag.growSign&&this.extent===drag.expectedExtent&&this.minExtent===drag.minExtent&&this.maxExtent===drag.maxExtent&&Math.abs(this.containerPx()-drag.containerPx)<=.5}endDrag(){const ownerWindow=this.dragOwnerWindow;this.drag=null,this.dragOwnerWindow=void 0,ownerWindow?.removeEventListener("pointermove",this.onPointerMove),ownerWindow?.removeEventListener("pointerup",this.onPointerUp),ownerWindow?.removeEventListener("pointercancel",this.onPointerCancel),ownerWindow?.removeEventListener("lostpointercapture",this.onPointerCancel)}get toggleChevronDeg(){if(this.edge==="top")return this.collapsed?90:-90;if(this.edge==="bottom")return this.collapsed?-90:90;const pinnedPhysicalEnd=this.edge==="end"?!isRtl(this):isRtl(this);return this.collapsed!==pinnedPhysicalEnd?0:180}handleTemplate(){if(!this.resizable||this.collapsed)return nothing;const{minPx,maxPx}=this.resolveBoundsPx(),nowPx=Math.min(Math.max(this.currentSizePx(),minPx),maxPx);return html`<div
2
2
  part="handle"
3
3
  role="separator"
4
4
  aria-label=${this.localize("dockPanelResize")}
5
5
  aria-orientation=${this.axis==="inline"?"vertical":"horizontal"}
6
6
  aria-valuenow=${Math.round(nowPx)}
7
+ aria-valuetext=${this.resizeValueText(nowPx)}
7
8
  aria-valuemin=${Math.round(minPx)}
8
9
  aria-valuemax=${Math.round(maxPx)}
9
10
  tabindex="0"