@aceshooting/lyra-ui 9.1.0 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/CHANGELOG.md +843 -0
  2. package/README.md +7 -0
  3. package/custom-elements.json +1 -1
  4. package/dist/cli/migrate-wa.mjs +52 -0
  5. package/dist/cli/migration-contract.json +1 -1
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +2 -2
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +0 -16
  8. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
  9. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +9 -7
  10. package/dist/components/agent-tools/agent-run/agent-run.class.js +2 -2
  11. package/dist/components/agent-tools/agent-run/agent-run.styles.js +0 -13
  12. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +1 -1
  13. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +7 -4
  14. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +7 -5
  15. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +0 -3
  16. package/dist/components/agent-tools/browser-frame/browser-frame.class.js +1 -1
  17. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -5
  18. package/dist/components/agent-tools/commit-card/commit-card.class.js +1 -1
  19. package/dist/components/agent-tools/commit-card/commit-card.styles.js +0 -10
  20. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +11 -6
  21. package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
  22. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +0 -46
  23. package/dist/components/agent-tools/context-inspector/context-inspector.class.js +1 -1
  24. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +0 -7
  25. package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
  26. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +2 -2
  27. package/dist/components/agent-tools/policy-summary/policy-summary.class.js +1 -1
  28. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +0 -15
  29. package/dist/components/agent-tools/result-card/result-card.styles.js +0 -7
  30. package/dist/components/agent-tools/result-card/result-field.styles.js +0 -5
  31. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +2 -5
  32. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +1 -1
  33. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +0 -15
  34. package/dist/components/agent-tools/stack-trace/stack-trace.styles.js +0 -20
  35. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  36. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -4
  37. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  38. package/dist/components/agent-tools/task-list/task-list.styles.js +0 -15
  39. package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -6
  40. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  41. package/dist/components/agent-tools/terminal/terminal.styles.js +0 -46
  42. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  43. package/dist/components/agent-tools/test-results/test-results.styles.js +0 -5
  44. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.js +1 -1
  45. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +0 -41
  46. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +0 -41
  47. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
  48. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +0 -30
  49. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +6 -6
  50. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +0 -5
  51. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  52. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +0 -20
  53. package/dist/components/agent-tools/tool-result-view/tool-result-view.styles.js +0 -4
  54. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +0 -21
  55. package/dist/components/agent-tools/trace-tree/trace-tree.class.js +2 -2
  56. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +7 -31
  57. package/dist/components/charts/chart/bar-chart.class.js +1 -1
  58. package/dist/components/charts/chart/box-plot.styles.js +0 -20
  59. package/dist/components/charts/chart/bubble-chart.class.js +1 -1
  60. package/dist/components/charts/chart/chart-colors.d.ts +1 -1
  61. package/dist/components/charts/chart/chart-colors.js +1 -1
  62. package/dist/components/charts/chart/chart-core-loader.d.ts +1 -0
  63. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  64. package/dist/components/charts/chart/chart-feature-loader.d.ts +35 -0
  65. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  66. package/dist/components/charts/chart/chart.class.d.ts +93 -0
  67. package/dist/components/charts/chart/chart.class.js +3 -3
  68. package/dist/components/charts/chart/chart.styles.js +0 -27
  69. package/dist/components/charts/chart/doughnut-chart.class.js +1 -1
  70. package/dist/components/charts/chart/histogram.class.js +1 -1
  71. package/dist/components/charts/chart/line-chart.class.js +1 -1
  72. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -1
  73. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  74. package/dist/components/charts/chart/lite-chart.styles.js +0 -27
  75. package/dist/components/charts/chart/pie-chart.class.js +1 -1
  76. package/dist/components/charts/chart/polar-area-chart.class.js +1 -1
  77. package/dist/components/charts/chart/radar-chart.class.js +1 -1
  78. package/dist/components/charts/chart/scatter-chart.class.js +1 -1
  79. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +20 -0
  80. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +3 -1
  81. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +3 -0
  82. package/dist/components/conversation/audio-visualizer/audio-visualizer.styles.js +0 -7
  83. package/dist/components/conversation/branch-picker/branch-picker.styles.js +0 -3
  84. package/dist/components/conversation/chat-composer/chat-composer.styles.js +0 -51
  85. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  86. package/dist/components/conversation/chat-message/chat-message.styles.js +13 -35
  87. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  88. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +0 -33
  89. package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
  90. package/dist/components/conversation/checkpoint/checkpoint.styles.js +0 -3
  91. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -2
  92. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  93. package/dist/components/conversation/code-block/code-block.styles.js +4 -95
  94. package/dist/components/conversation/code-block/code-loader.d.ts +11 -0
  95. package/dist/components/conversation/code-block/code-loader.js +1 -1
  96. package/dist/components/conversation/code-block/shiki-types.d.ts +12 -0
  97. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  98. package/dist/components/conversation/conversation-item/conversation-item.styles.js +8 -54
  99. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  100. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +0 -17
  101. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  102. package/dist/components/conversation/markdown/markdown.styles.js +0 -41
  103. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -3
  104. package/dist/components/conversation/message-feedback/message-feedback.styles.js +0 -35
  105. package/dist/components/conversation/message-parts/message-parts.class.d.ts +1 -1
  106. package/dist/components/conversation/message-parts/message-parts.styles.js +0 -5
  107. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  108. package/dist/components/conversation/model-select/model-select.styles.js +12 -47
  109. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +0 -6
  110. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -0
  111. package/dist/components/conversation/prompt-input/prompt-input.styles.js +0 -10
  112. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +0 -8
  113. package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
  114. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -11
  115. package/dist/components/conversation/stream-status/stream-status.styles.js +0 -16
  116. package/dist/components/conversation/streaming-text/streaming-text.styles.js +0 -15
  117. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +0 -5
  118. package/dist/components/conversation/thread-list/thread-list.styles.js +5 -19
  119. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +16 -4
  120. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  121. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +0 -1
  122. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +0 -23
  123. package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
  124. package/dist/components/conversation/usage-badge/usage-badge.styles.js +0 -3
  125. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  126. package/dist/components/conversation/voice-picker/voice-picker.styles.js +9 -29
  127. package/dist/components/conversation/widget-renderer/resolve.d.ts +2 -0
  128. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  129. package/dist/components/data/calendar/calendar.class.d.ts +15 -2
  130. package/dist/components/data/calendar/calendar.class.js +2 -2
  131. package/dist/components/data/calendar/calendar.styles.js +2 -28
  132. package/dist/components/data/condition-builder/condition-builder.class.d.ts +10 -6
  133. package/dist/components/data/condition-builder/condition-builder.class.js +2 -2
  134. package/dist/components/data/condition-builder/condition-builder.styles.js +0 -6
  135. package/dist/components/data/context-meter/context-meter.styles.js +0 -24
  136. package/dist/components/data/data-grid/data-grid.class.js +3 -3
  137. package/dist/components/data/data-grid/data-grid.styles.js +0 -22
  138. package/dist/components/data/document-library/document-library.class.js +2 -2
  139. package/dist/components/data/document-library/document-library.styles.js +0 -4
  140. package/dist/components/data/env-list/env-list.class.js +1 -1
  141. package/dist/components/data/env-list/env-list.styles.js +7 -4
  142. package/dist/components/data/file-tree/file-tree.class.d.ts +12 -0
  143. package/dist/components/data/file-tree/file-tree.class.js +1 -1
  144. package/dist/components/data/flow-canvas/flow-canvas.styles.js +12 -19
  145. package/dist/components/data/flow-controls/flow-controls.class.js +2 -2
  146. package/dist/components/data/flow-controls/flow-controls.styles.js +3 -36
  147. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  148. package/dist/components/data/flow-minimap/flow-minimap.styles.js +0 -9
  149. package/dist/components/data/flow-node/flow-node.styles.js +0 -23
  150. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  151. package/dist/components/data/flow-run-status/flow-run-status.styles.js +0 -7
  152. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -7
  153. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  154. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +0 -10
  155. package/dist/components/data/heatmap/heatmap-scale.d.ts +20 -0
  156. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  157. package/dist/components/data/heatmap/heatmap.class.d.ts +85 -2
  158. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  159. package/dist/components/data/heatmap/heatmap.styles.js +0 -54
  160. package/dist/components/data/pagination/pagination.class.js +1 -1
  161. package/dist/components/data/pagination/pagination.styles.js +23 -46
  162. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +34 -1
  163. package/dist/components/data/sequence-strip/sequence-strip.class.js +5 -2
  164. package/dist/components/data/sequence-strip/sequence-strip.styles.js +14 -20
  165. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  166. package/dist/components/data/stat/stat.styles.js +0 -67
  167. package/dist/components/data/table/table.class.d.ts +42 -3
  168. package/dist/components/data/table/table.class.js +4 -4
  169. package/dist/components/data/table/table.styles.js +20 -91
  170. package/dist/components/data/timeline/timeline-item.styles.js +0 -30
  171. package/dist/components/data/timeline/timeline.class.d.ts +89 -1
  172. package/dist/components/data/timeline/timeline.class.js +2 -2
  173. package/dist/components/data/timeline/timeline.styles.js +111 -31
  174. package/dist/components/data/tree/tree-item.styles.js +1 -28
  175. package/dist/components/data/tree/tree.class.js +2 -2
  176. package/dist/components/data/tree/tree.styles.js +0 -6
  177. package/dist/components/data/word-cloud/word-cloud.styles.js +0 -5
  178. package/dist/components/forms/button/button.class.js +1 -1
  179. package/dist/components/forms/button/button.styles.js +1 -106
  180. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  181. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  182. package/dist/components/forms/checkbox/checkbox.styles.js +0 -39
  183. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +21 -2
  184. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  185. package/dist/components/forms/checkbox-group/checkbox-group.styles.js +0 -18
  186. package/dist/components/forms/code-editor/code-editor.styles.js +0 -30
  187. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  188. package/dist/components/forms/color-picker/color-picker.styles.js +0 -69
  189. package/dist/components/forms/combobox/combobox.class.js +2 -2
  190. package/dist/components/forms/combobox/combobox.styles.js +22 -111
  191. package/dist/components/forms/combobox/option.styles.js +7 -1
  192. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  193. package/dist/components/forms/date-picker/date-input.styles.js +12 -67
  194. package/dist/components/forms/date-picker/date-picker.class.d.ts +1 -0
  195. package/dist/components/forms/date-picker/date-picker.class.js +22 -20
  196. package/dist/components/forms/date-picker/date-picker.styles.js +36 -29
  197. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +6 -3
  198. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  199. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +8 -1
  200. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  201. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +3 -41
  202. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  203. package/dist/components/forms/icon-button/icon-button.styles.js +0 -16
  204. package/dist/components/forms/input/input.styles.js +0 -54
  205. package/dist/components/forms/input/number-input.styles.d.ts +4 -5
  206. package/dist/components/forms/input/number-input.styles.js +0 -11
  207. package/dist/components/forms/input/time-input-shared.d.ts +11 -0
  208. package/dist/components/forms/input/time-input-shared.js +1 -1
  209. package/dist/components/forms/input/time-input.class.d.ts +11 -2
  210. package/dist/components/forms/input/time-input.class.js +1 -1
  211. package/dist/components/forms/input/time-input.styles.js +0 -6
  212. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  213. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -26
  214. package/dist/components/forms/otp-input/otp-input.class.js +3 -3
  215. package/dist/components/forms/otp-input/otp-input.styles.js +0 -16
  216. package/dist/components/forms/phone-input/phone-input.class.d.ts +9 -1
  217. package/dist/components/forms/phone-input/phone-input.class.js +2 -2
  218. package/dist/components/forms/phone-input/phone-input.styles.js +0 -37
  219. package/dist/components/forms/radio/radio-button.styles.js +1 -30
  220. package/dist/components/forms/radio/radio-group.styles.js +0 -4
  221. package/dist/components/forms/radio/radio.styles.js +0 -44
  222. package/dist/components/forms/rubric-form/rubric-form.styles.js +0 -5
  223. package/dist/components/forms/select/select.class.js +1 -1
  224. package/dist/components/forms/select/select.styles.js +14 -114
  225. package/dist/components/forms/slider/slider.styles.js +0 -55
  226. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +0 -11
  227. package/dist/components/forms/swatch-picker/swatch-picker.class.js +2 -2
  228. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +0 -77
  229. package/dist/components/forms/switch/switch.class.d.ts +3 -0
  230. package/dist/components/forms/switch/switch.class.js +1 -1
  231. package/dist/components/forms/switch/switch.styles.js +3 -38
  232. package/dist/components/forms/textarea/textarea.styles.js +0 -28
  233. package/dist/components/forms/time-range/time-range.styles.js +12 -84
  234. package/dist/components/forms/token-input/token-input.class.d.ts +23 -9
  235. package/dist/components/forms/token-input/token-input.class.js +1 -1
  236. package/dist/components/forms/token-input/token-input.styles.js +1 -54
  237. package/dist/components/layout/app-rail/app-rail-item.class.js +2 -2
  238. package/dist/components/layout/app-rail/app-rail-item.styles.js +0 -13
  239. package/dist/components/layout/app-rail/app-rail.class.d.ts +5 -0
  240. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  241. package/dist/components/layout/app-rail/app-rail.styles.js +0 -46
  242. package/dist/components/layout/button-group/button-group.styles.js +0 -6
  243. package/dist/components/layout/card/card.class.d.ts +12 -0
  244. package/dist/components/layout/card/card.styles.js +5 -13
  245. package/dist/components/layout/carousel/carousel.styles.js +0 -1
  246. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -0
  247. package/dist/components/layout/command-palette/command-palette.class.js +3 -1
  248. package/dist/components/layout/command-palette/command-palette.styles.js +1 -13
  249. package/dist/components/layout/control-group/control-group.styles.js +0 -7
  250. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  251. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +6 -25
  252. package/dist/components/layout/details/accordion.class.d.ts +13 -0
  253. package/dist/components/layout/details/accordion.class.js +1 -1
  254. package/dist/components/layout/details/details.class.js +1 -1
  255. package/dist/components/layout/details/details.styles.js +0 -12
  256. package/dist/components/layout/dock-panel/dock-panel.styles.js +0 -45
  257. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts +2 -0
  258. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  259. package/dist/components/layout/drilldown-panel/drilldown-panel.styles.js +0 -4
  260. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  261. package/dist/components/layout/filter-bar/filter-bar.styles.js +0 -9
  262. package/dist/components/layout/menu/menu-item.class.d.ts +5 -0
  263. package/dist/components/layout/menu/menu-item.class.js +1 -1
  264. package/dist/components/layout/menu/menu-item.styles.js +0 -49
  265. package/dist/components/layout/menu/menu-label.styles.js +0 -2
  266. package/dist/components/layout/menu/menu.styles.js +0 -18
  267. package/dist/components/layout/multi-split/multi-split.class.js +1 -1
  268. package/dist/components/layout/multi-split/multi-split.styles.js +8 -51
  269. package/dist/components/layout/page/page.class.d.ts +4 -0
  270. package/dist/components/layout/page/page.class.js +1 -1
  271. package/dist/components/layout/reorder-list/reorder-item.styles.js +0 -4
  272. package/dist/components/layout/responsive-panel/responsive-panel.styles.js +0 -27
  273. package/dist/components/layout/scroller/scroller.styles.js +0 -20
  274. package/dist/components/layout/segmented/segmented.class.d.ts +7 -1
  275. package/dist/components/layout/segmented/segmented.class.js +1 -1
  276. package/dist/components/layout/segmented/segmented.styles.js +69 -37
  277. package/dist/components/layout/split-panel/split-panel.styles.js +1 -7
  278. package/dist/components/layout/stepper/stepper.class.d.ts +8 -1
  279. package/dist/components/layout/stepper/stepper.class.js +1 -1
  280. package/dist/components/layout/stepper/stepper.styles.js +140 -41
  281. package/dist/components/layout/tab-group/tab-group.class.d.ts +4 -1
  282. package/dist/components/layout/tab-group/tab-group.styles.js +9 -75
  283. package/dist/components/layout/tab-group/tab.styles.js +0 -2
  284. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +4 -4
  285. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  286. package/dist/components/layout/virtual-list/virtual-list.styles.js +0 -68
  287. package/dist/components/layout/widget/widget.class.d.ts +5 -1
  288. package/dist/components/layout/widget/widget.class.js +1 -1
  289. package/dist/components/layout/widget/widget.styles.js +97 -40
  290. package/dist/components/media/animated-image/animated-image.class.d.ts +3 -0
  291. package/dist/components/media/animated-image/animated-image.class.js +1 -1
  292. package/dist/components/media/animated-image/animated-image.styles.js +0 -28
  293. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +1 -1
  294. package/dist/components/media/attachment-chip/attachment-chip.class.js +2 -2
  295. package/dist/components/media/attachment-chip/attachment-chip.styles.js +0 -31
  296. package/dist/components/media/attachment-trigger/attachment-trigger.class.d.ts +1 -1
  297. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +4 -4
  298. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +0 -40
  299. package/dist/components/media/av-player/av-player.class.d.ts +5 -6
  300. package/dist/components/media/av-player/av-player.class.js +1 -1
  301. package/dist/components/media/av-player/av-player.styles.js +0 -45
  302. package/dist/components/media/avatar/avatar.styles.js +3 -16
  303. package/dist/components/media/file-icon/file-icon.class.d.ts +1 -2
  304. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  305. package/dist/components/media/file-input/file-input.class.d.ts +12 -0
  306. package/dist/components/media/file-input/file-input.class.js +1 -1
  307. package/dist/components/media/file-input/file-input.styles.js +3 -24
  308. package/dist/components/media/flag/flag.class.d.ts +20 -0
  309. package/dist/components/media/flag/flag.class.js +4 -2
  310. package/dist/components/media/flag/flag.styles.js +7 -1
  311. package/dist/components/media/flag/language-map.d.ts +10 -0
  312. package/dist/components/media/flag/language-map.js +1 -1
  313. package/dist/components/media/image-comparer/image-comparer.styles.js +4 -33
  314. package/dist/components/media/image-viewer/image-viewer.class.js +0 -2
  315. package/dist/components/media/image-viewer/image-viewer.styles.js +7 -27
  316. package/dist/components/media/lightbox/lightbox.class.js +0 -2
  317. package/dist/components/media/lightbox/lightbox.styles.js +2 -21
  318. package/dist/components/media/map/map-loader.d.ts +19 -1
  319. package/dist/components/media/map/map-loader.js +1 -1
  320. package/dist/components/media/map/map.class.d.ts +141 -1
  321. package/dist/components/media/map/map.class.js +15 -3
  322. package/dist/components/media/map/map.styles.js +20 -17
  323. package/dist/components/media/media-card/media-card.class.d.ts +14 -3
  324. package/dist/components/media/media-card/media-card.class.js +1 -1
  325. package/dist/components/media/media-card/media-card.styles.js +2 -28
  326. package/dist/components/media/pan-zoom/pan-zoom.styles.js +0 -3
  327. package/dist/components/media/qr-code/qr-code.class.d.ts +3 -2
  328. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  329. package/dist/components/media/qr-code/qr-code.styles.js +0 -3
  330. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -0
  331. package/dist/components/media/sequence-playback/sequence-playback.class.js +2 -1
  332. package/dist/components/media/sequence-playback/sequence-playback.styles.js +0 -19
  333. package/dist/components/media/video/video.class.d.ts +23 -2
  334. package/dist/components/media/video/video.class.js +3 -3
  335. package/dist/components/media/video/video.styles.js +4 -2
  336. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  337. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  338. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +0 -5
  339. package/dist/components/overlays/alert/alert.styles.js +4 -2
  340. package/dist/components/overlays/badge/badge.styles.js +4 -48
  341. package/dist/components/overlays/badge/tag.styles.js +0 -14
  342. package/dist/components/overlays/callout/callout.styles.js +2 -13
  343. package/dist/components/overlays/chip/chip-group.styles.js +0 -18
  344. package/dist/components/overlays/chip/chip.styles.js +6 -69
  345. package/dist/components/overlays/dialog/confirm.d.ts +1 -4
  346. package/dist/components/overlays/dialog/confirm.js +1 -1
  347. package/dist/components/overlays/dialog/dialog.class.d.ts +12 -9
  348. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  349. package/dist/components/overlays/dialog/dialog.styles.js +0 -43
  350. package/dist/components/overlays/drawer/drawer.class.d.ts +2 -2
  351. package/dist/components/overlays/drawer/drawer.styles.js +0 -9
  352. package/dist/components/overlays/empty/empty.styles.js +0 -12
  353. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  354. package/dist/components/overlays/kbd/kbd.styles.js +0 -8
  355. package/dist/components/overlays/overlay/dropdown.class.d.ts +1 -6
  356. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  357. package/dist/components/overlays/overlay/overlay.styles.js +0 -28
  358. package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
  359. package/dist/components/overlays/overlay/popover.class.js +2 -2
  360. package/dist/components/overlays/overlay/tooltip.class.d.ts +10 -0
  361. package/dist/components/overlays/overlay/tooltip.class.js +2 -2
  362. package/dist/components/overlays/popup/popup.class.d.ts +1 -0
  363. package/dist/components/overlays/popup/popup.class.js +2 -2
  364. package/dist/components/overlays/popup/popup.styles.js +0 -15
  365. package/dist/components/overlays/progress/progress-ring.class.d.ts +9 -1
  366. package/dist/components/overlays/progress/progress-ring.class.js +3 -3
  367. package/dist/components/overlays/progress/progress.styles.js +0 -21
  368. package/dist/components/overlays/rating/rating.styles.js +0 -25
  369. package/dist/components/overlays/skeleton/skeleton.styles.js +0 -4
  370. package/dist/components/overlays/spinner/spinner.styles.js +2 -5
  371. package/dist/components/overlays/toast/toast-item.styles.js +3 -45
  372. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +0 -35
  373. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +2 -2
  374. package/dist/components/retrieval/citation-badge/citation-badge.class.js +3 -3
  375. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +0 -20
  376. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +1 -1
  377. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +0 -8
  378. package/dist/components/retrieval/community-card/community-card.class.d.ts +1 -0
  379. package/dist/components/retrieval/community-card/community-card.styles.js +0 -6
  380. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +8 -12
  381. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +4 -3
  382. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  383. package/dist/components/retrieval/entity-card/entity-card.styles.js +0 -12
  384. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +10 -4
  385. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -3
  386. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +6 -9
  387. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +19 -5
  388. package/dist/components/retrieval/entity-dossier/entity-dossier.class.js +1 -1
  389. package/dist/components/retrieval/graph/graph.class.d.ts +5 -0
  390. package/dist/components/retrieval/graph/graph.class.js +1 -1
  391. package/dist/components/retrieval/graph/graph.styles.js +0 -30
  392. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +0 -3
  393. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +2 -2
  394. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +0 -25
  395. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +2 -0
  396. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +0 -7
  397. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +20 -6
  398. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -2
  399. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +6 -11
  400. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  401. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +5 -3
  402. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  403. package/dist/components/retrieval/mind-map/mind-map.styles.js +0 -2
  404. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +3 -2
  405. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  406. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +0 -30
  407. package/dist/components/retrieval/node-palette/node-palette.styles.js +0 -11
  408. package/dist/components/retrieval/path-strip/path-strip.styles.js +0 -10
  409. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +12 -3
  410. package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
  411. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +0 -2
  412. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +3 -2
  413. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +2 -2
  414. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +0 -28
  415. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +0 -4
  416. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  417. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +0 -2
  418. package/dist/components/retrieval/source-card/source-card.styles.js +0 -13
  419. package/dist/components/retrieval/source-list/source-list.styles.js +0 -7
  420. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  421. package/dist/components/retrieval/source-picker/source-picker.styles.js +0 -7
  422. package/dist/components/utility/copy-button/copy-button.styles.js +0 -10
  423. package/dist/components/utility/diff-view/diff-view.styles.js +0 -14
  424. package/dist/components/utility/export-button/export-button.styles.js +0 -22
  425. package/dist/components/utility/icon/icon.styles.js +0 -6
  426. package/dist/components/utility/json-viewer/json-viewer.styles.js +2 -48
  427. package/dist/components/utility/known-date/known-date.class.d.ts +7 -3
  428. package/dist/components/utility/known-date/known-date.styles.js +10 -51
  429. package/dist/components/utility/live-region/live-region.styles.js +0 -4
  430. package/dist/components/utility/mention-popover/mention-popover.styles.js +0 -25
  431. package/dist/components/utility/poll-status/poll-status.styles.js +0 -4
  432. package/dist/components/utility/random-content/random-content.class.d.ts +22 -0
  433. package/dist/components/utility/random-content/random-content.class.js +3 -2
  434. package/dist/components/utility/random-content/random-content.styles.js +6 -13
  435. package/dist/components/utility/tour/tour.class.d.ts +4 -2
  436. package/dist/components/utility/tour/tour.class.js +3 -3
  437. package/dist/components/utility/tour/tour.styles.js +0 -13
  438. package/dist/components/utility/visually-hidden/visually-hidden.styles.js +0 -5
  439. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  440. package/dist/components/viewers/archive-viewer/archive-viewer.styles.d.ts +2 -2
  441. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +0 -10
  442. package/dist/components/viewers/contact-viewer/contact-viewer.class.js +1 -1
  443. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +1 -1
  444. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +0 -19
  445. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +1 -1
  446. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +0 -15
  447. package/dist/components/viewers/document-compare/document-compare.class.js +1 -1
  448. package/dist/components/viewers/document-compare/document-compare.styles.js +0 -3
  449. package/dist/components/viewers/document-preview/document-preview.styles.js +0 -25
  450. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -1
  451. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
  452. package/dist/components/viewers/document-viewer/document-viewer.styles.js +0 -5
  453. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +0 -17
  454. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  455. package/dist/components/viewers/ebook-viewer/ebook-viewer.styles.js +0 -4
  456. package/dist/components/viewers/email-viewer/email-viewer.styles.js +0 -7
  457. package/dist/components/viewers/geojson-view/geojson-view.styles.js +0 -5
  458. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +0 -3
  459. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
  460. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +0 -38
  461. package/dist/components/viewers/page-rail/page-rail.class.js +1 -1
  462. package/dist/components/viewers/page-rail/page-rail.styles.js +0 -13
  463. package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +13 -2
  464. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  465. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +32 -2
  466. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  467. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +1 -27
  468. package/dist/components/viewers/pptx-viewer/pptx-viewer.styles.js +0 -3
  469. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +1 -1
  470. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +0 -14
  471. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +0 -7
  472. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +2 -24
  473. package/dist/custom-elements-jsx.d.ts +56 -37
  474. package/dist/events.d.ts +43 -33
  475. package/dist/internal/agent-status-variants.d.ts +18 -0
  476. package/dist/internal/agent-status-variants.js +1 -0
  477. package/dist/internal/announcer.d.ts +8 -3
  478. package/dist/internal/announcer.js +1 -1
  479. package/dist/internal/autoloader-manifest.js +1 -1
  480. package/dist/internal/canvas-color.d.ts +16 -0
  481. package/dist/internal/canvas-color.js +1 -1
  482. package/dist/internal/catalog-picker.d.ts +0 -1
  483. package/dist/internal/catalog-picker.js +1 -1
  484. package/dist/internal/default-strings.generated.d.ts +1 -0
  485. package/dist/internal/default-strings.generated.js +1 -1
  486. package/dist/internal/dev-mode-attribute-warning.d.ts +30 -0
  487. package/dist/internal/dev-mode-attribute-warning.js +1 -0
  488. package/dist/internal/localization-runtime.js +1 -1
  489. package/dist/internal/localization-types.d.ts +1 -1
  490. package/dist/internal/localization.js +1 -1
  491. package/dist/internal/lyra-element.d.ts +13 -0
  492. package/dist/internal/lyra-element.js +1 -1
  493. package/dist/internal/media-controller.js +1 -1
  494. package/dist/internal/package-metadata.d.ts +1 -1
  495. package/dist/internal/package-metadata.js +1 -1
  496. package/dist/internal/scroll-overflow.d.ts +35 -13
  497. package/dist/internal/scroll-overflow.js +1 -1
  498. package/dist/internal/sizes.styles.js +0 -2
  499. package/dist/internal/specialist-tokens.styles.js +6 -11
  500. package/dist/internal/text-highlights.d.ts +4 -1
  501. package/dist/internal/text-highlights.js +1 -1
  502. package/dist/internal/tokens/palette.styles.js +0 -15
  503. package/dist/internal/tokens.styles.js +19 -113
  504. package/dist/lyra.d.ts +8 -5
  505. package/dist/styles/reservations.css +82 -0
  506. package/dist/svelte.d.ts +56 -37
  507. package/dist/translations/ar.js +1 -1
  508. package/dist/translations/de.js +1 -1
  509. package/dist/translations/es.js +1 -1
  510. package/dist/translations/fa.js +1 -1
  511. package/dist/translations/fr.js +1 -1
  512. package/dist/translations/he.js +1 -1
  513. package/dist/translations/ja.js +1 -1
  514. package/dist/translations/pt-BR.js +1 -1
  515. package/dist/translations/ru.js +1 -1
  516. package/dist/translations/zh-CN.js +1 -1
  517. package/dist/vue.d.ts +56 -37
  518. package/llms/components/lr-accordion-item.md +12 -3
  519. package/llms/components/lr-accordion.md +11 -2
  520. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  521. package/llms/components/lr-agent-trace.md +3 -1
  522. package/llms/components/lr-agent-workspace.md +20 -0
  523. package/llms/components/lr-artifact-panel.md +10 -4
  524. package/llms/components/lr-attachment-chip.md +7 -4
  525. package/llms/components/lr-attachment-trigger.md +9 -6
  526. package/llms/components/lr-av-player.md +3 -1
  527. package/llms/components/lr-avatar.md +6 -6
  528. package/llms/components/lr-bar-chart.md +4 -3
  529. package/llms/components/lr-box-plot.md +1 -1
  530. package/llms/components/lr-browser-frame.md +7 -3
  531. package/llms/components/lr-bubble-chart.md +4 -3
  532. package/llms/components/lr-calendar.md +9 -2
  533. package/llms/components/lr-card.md +24 -0
  534. package/llms/components/lr-chart.md +32 -8
  535. package/llms/components/lr-chat-viewport.md +7 -2
  536. package/llms/components/lr-checkbox-group.md +13 -5
  537. package/llms/components/lr-checkbox.md +5 -2
  538. package/llms/components/lr-checkpoint.md +6 -2
  539. package/llms/components/lr-combobox.md +5 -2
  540. package/llms/components/lr-command-palette.md +4 -1
  541. package/llms/components/lr-confirm-bar.md +7 -3
  542. package/llms/components/lr-context-meter.md +12 -11
  543. package/llms/components/lr-conversation-item.md +7 -4
  544. package/llms/components/lr-details.md +11 -2
  545. package/llms/components/lr-dialog.md +15 -10
  546. package/llms/components/lr-dock-panel.md +7 -10
  547. package/llms/components/lr-document-preview.md +6 -1
  548. package/llms/components/lr-document-viewer.md +3 -2
  549. package/llms/components/lr-doughnut-chart.md +4 -3
  550. package/llms/components/lr-drawer.md +3 -3
  551. package/llms/components/lr-entity-card.md +3 -3
  552. package/llms/components/lr-entity-chip.md +1 -1
  553. package/llms/components/lr-entity-dossier.md +4 -1
  554. package/llms/components/lr-file-input.md +2 -2
  555. package/llms/components/lr-flag.md +20 -5
  556. package/llms/components/lr-heatmap.md +29 -1
  557. package/llms/components/lr-histogram.md +3 -1
  558. package/llms/components/lr-icon.md +1 -1
  559. package/llms/components/lr-json-schema-viewer.md +2 -1
  560. package/llms/components/lr-knowledge-graph-explorer.md +8 -3
  561. package/llms/components/lr-known-date.md +4 -2
  562. package/llms/components/lr-line-chart.md +4 -3
  563. package/llms/components/lr-lite-chart.md +16 -6
  564. package/llms/components/lr-map.md +72 -8
  565. package/llms/components/lr-markdown-core.md +3 -2
  566. package/llms/components/lr-media-card.md +28 -12
  567. package/llms/components/lr-message-parts.md +2 -1
  568. package/llms/components/lr-model-select.md +9 -10
  569. package/llms/components/lr-model-settings-panel.md +9 -9
  570. package/llms/components/lr-neighbor-list.md +1 -1
  571. package/llms/components/lr-notebook-viewer.md +6 -3
  572. package/llms/components/lr-option.md +5 -2
  573. package/llms/components/lr-pdf-viewer.md +62 -2
  574. package/llms/components/lr-pie-chart.md +4 -3
  575. package/llms/components/lr-polar-area-chart.md +4 -3
  576. package/llms/components/lr-popover.md +5 -0
  577. package/llms/components/lr-progress-ring.md +8 -1
  578. package/llms/components/lr-prompt-studio.md +1 -1
  579. package/llms/components/lr-provenance-panel.md +4 -2
  580. package/llms/components/lr-qr-code.md +1 -1
  581. package/llms/components/lr-radar-chart.md +4 -3
  582. package/llms/components/lr-rag-eval-dashboard.md +2 -2
  583. package/llms/components/lr-random-content.md +13 -0
  584. package/llms/components/lr-reorder-item.md +6 -1
  585. package/llms/components/lr-reorder-list.md +6 -1
  586. package/llms/components/lr-responsive-panel.md +11 -7
  587. package/llms/components/lr-scatter-chart.md +4 -3
  588. package/llms/components/lr-sequence-strip.md +16 -2
  589. package/llms/components/lr-slider.md +12 -5
  590. package/llms/components/lr-sparkline.md +1 -1
  591. package/llms/components/lr-suggestion-chips.md +7 -2
  592. package/llms/components/lr-swatch-picker.md +5 -5
  593. package/llms/components/lr-switch.md +5 -2
  594. package/llms/components/lr-table.md +30 -4
  595. package/llms/components/lr-terminal.md +3 -1
  596. package/llms/components/lr-thread-list.md +8 -8
  597. package/llms/components/lr-time-input.md +6 -1
  598. package/llms/components/lr-timeline-item.md +24 -0
  599. package/llms/components/lr-timeline.md +25 -1
  600. package/llms/components/lr-token-input.md +7 -2
  601. package/llms/components/lr-tool-approval-dialog.md +7 -8
  602. package/llms/components/lr-tool-call-chip.md +5 -1
  603. package/llms/components/lr-tool-param-form.md +14 -12
  604. package/llms/components/lr-tool-result-dialog.md +11 -9
  605. package/llms/components/lr-tool-result-view.md +7 -6
  606. package/llms/components/lr-tool-select-dialog.md +18 -16
  607. package/llms/components/lr-trace-tree.md +3 -1
  608. package/llms/components/lr-usage-badge.md +4 -1
  609. package/llms/components/lr-video-playlist.md +1 -1
  610. package/llms/components/lr-virtual-list.md +22 -14
  611. package/llms/components/lr-voice-picker.md +8 -5
  612. package/llms/components/lr-widget-renderer.md +3 -3
  613. package/llms/components/lr-widget.md +1 -1
  614. package/llms/components/lr-word-cloud.md +6 -2
  615. package/llms/index.md +1 -1
  616. package/llms/peers.md +13 -3
  617. package/llms/shared.md +83 -2
  618. package/llms-full.txt +1159 -288
  619. package/package.json +19 -7
  620. package/vscode-css-data.json +37 -2
  621. package/vscode-html-data.json +402 -45
  622. package/web-types.json +300 -56
@@ -21,6 +21,8 @@ export interface LyraCommandPaletteEventMap {
21
21
  }>>;
22
22
  'lr-open': CustomEvent<null>;
23
23
  'lr-close': CustomEvent<null>;
24
+ focus: CustomEvent<null>;
25
+ blur: CustomEvent<null>;
24
26
  }
25
27
  /** `<lr-command-palette>` — searchable application command menu with keyboard navigation.
26
28
  * Shared overlay infrastructure (the same one `<lr-dialog>` uses) coordinates focus-trapping
@@ -35,6 +37,10 @@ export interface LyraCommandPaletteEventMap {
35
37
  * closed.
36
38
  * @event lr-close - Emitted before the palette closes. Cancelable: `preventDefault()` keeps it
37
39
  * open.
40
+ * @event focus - Re-dispatched when the search input receives focus. Native `focus` neither
41
+ * bubbles nor crosses the shadow boundary, so a host listener on `<lr-command-palette>` itself
42
+ * never sees it otherwise.
43
+ * @event blur - Re-dispatched when the search input loses focus.
38
44
  * @csspart backdrop - Modal backdrop.
39
45
  * @csspart dialog - Palette dialog.
40
46
  * @csspart search - The search row wrapping the leading icon and the `input`.
@@ -166,6 +172,8 @@ export declare class LyraCommandPalette extends LyraElement<LyraCommandPaletteEv
166
172
  private setActiveIndex;
167
173
  private onKeyDown;
168
174
  private onInput;
175
+ private onSearchFocus;
176
+ private onSearchBlur;
169
177
  private get resultModel();
170
178
  private visibleGroups;
171
179
  private optionId;
@@ -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.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;try{commandId=command?.commandId}catch{continue}typeof commandId!="string"||commandId.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=>[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=>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{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;try{commandId=command?.commandId}catch{continue}typeof commandId!="string"||commandId.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=>[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=>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
2
2
  id=${this.optionId(row.index)}
3
3
  part="command"
4
4
  role="option"
@@ -40,6 +40,8 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
40
40
  aria-controls=${this.listId}
41
41
  aria-activedescendant=${activeId}
42
42
  @input=${this.onInput}
43
+ @focus=${this.onSearchFocus}
44
+ @blur=${this.onSearchBlur}
43
45
  />
44
46
  </div>
45
47
  <div
@@ -43,11 +43,7 @@ import{css}from"lit";const styles=css`
43
43
  overflow: hidden;
44
44
  border: var(--lr-border-width-thin) solid var(--lr-color-border);
45
45
  border-radius: var(--lr-radius);
46
- /* Modal-panel surface, not the page surface -- in dark mode the two would be the same
47
- near-black and the palette would read as a scrim with a floating list on it. */
48
46
  background: var(--lr-color-surface-overlay);
49
- /* Modal layer, top step: the palette floats free on all four edges over its own scrim,
50
- exactly like a centered lr-dialog. */
51
47
  box-shadow: var(--lr-shadow-xl);
52
48
  color: var(--lr-color-text);
53
49
  }
@@ -142,9 +138,6 @@ import{css}from"lit";const styles=css`
142
138
  var(--lr-color-brand-quiet)
143
139
  );
144
140
  }
145
- /* Same fill as hover (including a consumer's own --lr-command-palette-active-bg), mixed further
146
- toward --lr-color-mix-partner so the press reads as a deeper step of the same highlight. Kept
147
- at the hover rule's own zeroed specificity for the same reason it was zeroed. */
148
141
  :where([part="command"]):active:where(:not(:disabled)) {
149
142
  background: color-mix(
150
143
  in oklab,
@@ -152,18 +145,13 @@ import{css}from"lit";const styles=css`
152
145
  var(--lr-color-mix-partner) var(--lr-color-mix-active)
153
146
  );
154
147
  }
155
- /* Inline var() fallback rather than a :host-declared property, so a consumer can set it on any
156
- ancestor without a :host declaration shadowing that. ::part(command)[data-active='true'] is
157
- invalid CSS (an attribute selector cannot follow ::part), so highlighting the active row used to
158
- require hijacking the shared --lr-color-brand-quiet token, repainting everything else that reads
159
- it. Unset, it falls back to that token, so the rendering is unchanged. */
160
148
  [part="command"][data-active="true"] {
161
149
  background: var(
162
150
  --lr-command-palette-active-bg,
163
151
  var(--lr-color-brand-quiet)
164
152
  );
165
153
  }
166
- :where([part="command"][data-active="true"]):active:where(:not(:disabled)) {
154
+ [part="command"][data-active="true"]:active:where(:not(:disabled)) {
167
155
  background: color-mix(
168
156
  in oklab,
169
157
  var(--lr-command-palette-active-bg, var(--lr-color-brand-quiet)),
@@ -7,9 +7,6 @@ import{css}from"lit";const styles=css`
7
7
  vertical-align: middle;
8
8
  }
9
9
 
10
- /* Query container so the @container rule below reacts to this group's own allocated width,
11
- matching lr-button-group's own container-query approach -- opt-in only, see the class doc's
12
- responsive property. */
13
10
  :host([responsive]) {
14
11
  container-type: inline-size;
15
12
  contain-intrinsic-inline-size: var(--lr-size-12rem);
@@ -18,10 +15,6 @@ import{css}from"lit";const styles=css`
18
15
  [part='base'] {
19
16
  display: inline-flex;
20
17
  flex-wrap: wrap;
21
- /* center, not stretch: unlike lr-button-group's uniform-height button rows,
22
- this group's children are commonly different intrinsic heights (a select, a
23
- segmented control, a plain button) -- stretching would misalign them since
24
- none of those components re-center their own content inside a taller host box. */
25
18
  align-items: center;
26
19
  gap: var(--lr-control-group-gap, var(--lr-space-xs));
27
20
  max-inline-size: 100%;
@@ -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)){const cellId=child.getAttribute("cell-id");if(this.ownedDefaultCells.has(child)){if(!cellId){child.remove();continue}const matches=ownedById.get(cellId)??[];matches.push(child),ownedById.set(cellId,matches);continue}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("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{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
2
2
  part="cell"
3
3
  role="group"
4
4
  tabindex=${active?"0":"-1"}
@@ -1,9 +1,6 @@
1
1
  import{css}from"lit";const styles=css`
2
2
  :host {
3
3
  display: block;
4
- /* Query container so the @container rule below reacts to this grid's own allocated inline
5
- size (a dashboard-grid is commonly embedded in a panel of varying width, not the viewport)
6
- -- same convention as lr-button-group/lr-control-group's own container-query approach. */
7
4
  container-type: inline-size;
8
5
  contain-intrinsic-inline-size: var(--lr-size-20rem);
9
6
  min-inline-size: 0;
@@ -47,23 +44,10 @@ import{css}from"lit";const styles=css`
47
44
  overflow-wrap: anywhere;
48
45
  }
49
46
 
50
- /* The resize handle is absolutely positioned and therefore cannot contribute to the cell's
51
- intrinsic block size. Apply the shared action floor only while that handle actually exists;
52
- readonly and locked short cells keep their content-derived height in the stacked layout. */
53
47
  [part="cell"][data-resizable] {
54
48
  min-block-size: var(--lr-icon-button-size);
55
49
  }
56
50
 
57
- /* A cell's slotted content (default lr-widget, or a consumer's own opaque markup) commonly
58
- fills the whole cell -- a background-color hover would paint underneath it and never be
59
- seen. An outline draws outside the box like [part='cell'][data-collision]'s own outline
60
- below, so it stays visible above any occluding content, matching the :focus-visible ring's
61
- own reliably-visible treatment for the exact same real, keyboard-navigable/draggable
62
- target. */
63
- /* no-pressed-state: the cell's real pressed interaction is a drag, which already has its own
64
- [data-dragging] treatment below; a plain :active rule would additionally fire for every press
65
- landing on the slotted widget's own buttons, since :active matches the ancestors of whatever
66
- was pressed. */
67
51
  [part="cell"]:hover {
68
52
  outline: var(--lr-border-width-thin) solid
69
53
  var(
@@ -89,8 +73,6 @@ import{css}from"lit";const styles=css`
89
73
  [part="cell"][data-dragging],
90
74
  [part="cell"][data-resizing] {
91
75
  z-index: var(--lr-layer-content);
92
- /* A tile being dragged or resized has left the resting plane and is riding above its
93
- neighbours, so it takes the overlay step rather than the card step its siblings use. */
94
76
  box-shadow: var(--lr-dashboard-grid-interaction-shadow, var(--lr-shadow-m));
95
77
  }
96
78
 
@@ -100,6 +82,12 @@ import{css}from"lit";const styles=css`
100
82
  outline-offset: var(--lr-size-2px);
101
83
  }
102
84
 
85
+ [part="cell"][data-collision]:focus-visible {
86
+ box-shadow:
87
+ 0 0 0 var(--lr-focus-ring-width) var(--lr-focus-ring-color),
88
+ var(--lr-dashboard-grid-interaction-shadow, var(--lr-shadow-m));
89
+ }
90
+
103
91
  [part="resize-handle"] {
104
92
  position: absolute;
105
93
  inset-block-end: 0;
@@ -118,9 +106,6 @@ import{css}from"lit";const styles=css`
118
106
  [part="resize-handle"]:hover {
119
107
  background: var(--lr-color-brand-quiet);
120
108
  }
121
- /* Unlike [part="cell"] above, this handle is a leaf button with nothing slotted inside it, so
122
- :active means exactly one thing here: the resize gesture is under way. Pointer capture holds
123
- it for the whole drag. */
124
109
  [part="resize-handle"]:active {
125
110
  background: color-mix(
126
111
  in oklab,
@@ -133,10 +118,6 @@ import{css}from"lit";const styles=css`
133
118
  cursor: nesw-resize;
134
119
  }
135
120
 
136
- /* Below the breakpoint, drop the two-dimensional grid in favor of a single stacked column --
137
- each cell's authored x/y/w/h stops driving placement (document flow takes over), but the
138
- cells still render in row-major spatial DOM order, so the reading order stays the same
139
- one the grid itself would have shown. */
140
121
  @container (max-inline-size: 40rem) {
141
122
  [part="base"] {
142
123
  display: flex;
@@ -11,6 +11,10 @@ export interface LyraAccordionEventMap {
11
11
  'lr-after-expand': CustomEvent<LyraEventDetailSnapshot<LyraAccordionEventDetail>>;
12
12
  'lr-collapse': CustomEvent<LyraEventDetailSnapshot<LyraAccordionEventDetail>>;
13
13
  'lr-after-collapse': CustomEvent<LyraEventDetailSnapshot<LyraAccordionEventDetail>>;
14
+ 'lr-toggle-request': CustomEvent<LyraEventDetailSnapshot<{
15
+ readonly collapsed: boolean;
16
+ readonly item: LyraAccordionItem;
17
+ }>>;
14
18
  }
15
19
  /**
16
20
  * `<lr-accordion>` — coordinates accessible, vertically stacked expandable sections.
@@ -31,6 +35,14 @@ export interface LyraAccordionEventMap {
31
35
  * @event lr-after-expand - Emitted after a direct item finishes expanding. `detail: { item }`.
32
36
  * @event lr-collapse - Emitted before a direct item collapses. `detail: { item }`. Cancelable.
33
37
  * @event lr-after-collapse - Emitted after a direct item finishes collapsing. `detail: { item }`.
38
+ * @event lr-toggle-request - Emitted alongside `lr-expand`/`lr-collapse` for the same proposed
39
+ * transition, with the direction in the detail instead of the event name -- the same
40
+ * `{ collapsed }` shape `<lr-code-block>` and `<lr-chat-message>` use for their own
41
+ * `lr-toggle-request`, plus `item` to identify which child is proposed to change.
42
+ * `detail: { collapsed, item }`. Cancelable; a listener calling `preventDefault()` on either
43
+ * `lr-toggle-request` or the matching `lr-expand`/`lr-collapse` vetoes the transition, and both
44
+ * always fire so a listener on one name never misses a transition the other name already
45
+ * vetoed.
34
46
  * @csspart base - The accordion wrapper.
35
47
  * @cssprop [--lr-accordion-outlined-bg=var(--lr-color-surface)] - Outlined group background.
36
48
  * @cssprop [--lr-accordion-outlined-border-color=var(--lr-color-border)] - Outlined border color.
@@ -50,6 +62,7 @@ export declare class LyraAccordion extends LyraElement<LyraAccordionEventMap> {
50
62
  'lr-after-expand': readonly string[];
51
63
  'lr-collapse': readonly string[];
52
64
  'lr-after-collapse': readonly string[];
65
+ 'lr-toggle-request': readonly string[];
53
66
  }>;
54
67
  protected static readonly immutableEventDetails: readonly string[];
55
68
  static styles: import("lit").CSSResultGroup[];
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property}from"lit/decorators.js";import{composedParentElement,deepActiveElementIn}from"../../../internal/active-element.js";import{isAccessibilitySubtreeExcluded}from"../../../internal/accessibility-visibility.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{applyAccordionItemOwnerState,bindAccordionItemOwner,releaseAccordionItemOwner}from"./accordion-owner.js";import{styles}from"./accordion.styles.js";function normalizeMode(value){return value==="single"||value==="single-collapsible"?value:"multiple"}class LyraAccordion extends LyraElement{constructor(){super(...arguments),this.#_mode="multiple",this.panels=new Set,this.#panelsInitialized=!1,this.iconPlacement="end",this.headingLevel="3",this.appearance="outlined",this.#handleSlotChange=event=>{this.#bindPanels(event.target.assignedElements({flatten:!0}))},this.#handleOwnedItemStateChange=item=>{this.panels.has(item)&&queueMicrotask(()=>{this.panels.has(item)&&this.#reconcileRovingFocus(item)})},this.handleFocusIn=event=>{const item=this.#itemFor(event);!item||!this.#isNavigableItem(item)||(this.#lastFocusedItem=item,this.#syncRovingTabIndex(item))},this.handleKeyDown=event=>{const current=this.#itemFor(event);if(!current||!this.#isNavigableItem(current)||!this.#itemTriggerOwnsEvent(current,event))return;const items=this.#navigableItems();if(items.length===0)return;const currentIndex=items.indexOf(current);if(currentIndex<0)return;const forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let nextIndex;if(event.key==="ArrowDown"||event.key===forwardKey?nextIndex=(currentIndex+1)%items.length:event.key==="ArrowUp"||event.key===backwardKey?nextIndex=(currentIndex-1+items.length)%items.length:event.key==="Home"?nextIndex=0:event.key==="End"&&(nextIndex=items.length-1),nextIndex===void 0)return;event.preventDefault(),event.stopPropagation();const next=items[nextIndex];this.#syncRovingTabIndex(next),next.focus()},this.#handleOwnedItemTransition=(item,expanded,source)=>!this.panels.has(item)||item.disabled||!expanded&&source==="user"&&this.mode==="single"?!1:expanded?this.emit("lr-expand",{item},{cancelable:!0}).defaultPrevented?!1:this.mode==="multiple"||this.#collapseSiblings(item):!this.emit("lr-collapse",{item},{cancelable:!0}).defaultPrevented,this.#handleOwnedItemTransitionSettled=(item,expanded)=>{!this.panels.has(item)||item.expanded!==expanded||this.emit(expanded?"lr-after-expand":"lr-after-collapse",{item})}}static{this.identityEventDetailProperties=Object.freeze({"lr-expand":Object.freeze(["item"]),"lr-after-expand":Object.freeze(["item"]),"lr-collapse":Object.freeze(["item"]),"lr-after-collapse":Object.freeze(["item"])})}static{this.immutableEventDetails=Object.freeze(["lr-expand","lr-after-expand","lr-collapse","lr-after-collapse"])}static{this.styles=[LyraElement.styles,styles]}#_mode;#rovingItem;#lastFocusedItem;#availabilityObserver;#panelsInitialized;get mode(){return this.#_mode}set mode(next){const normalized=normalizeMode(next),old=this.#_mode;if(normalized!==old){if(this.#panelsInitialized&&normalized!=="multiple"&&!this.#reconcileExpandedPanels(!1,normalized)){this.requestUpdate("mode",normalized);return}this.#_mode=normalized,this.requestUpdate("mode",old)}}connectedCallback(){super.connectedCallback(),this.#armAvailabilityObserver(),this.hasUpdated&&queueMicrotask(()=>{if(!this.isConnected)return;const slot=this.renderRoot.querySelector("slot");slot&&this.#bindPanels(slot.assignedElements({flatten:!0}))})}disconnectedCallback(){this.#resetAvailabilityObserver();for(const panel of this.panels)releaseAccordionItemOwner(panel,this);this.panels.clear(),this.#rovingItem=void 0,this.#lastFocusedItem=void 0,super.disconnectedCallback()}updated(changed){super.updated(changed),(changed.has("iconPlacement")||changed.has("headingLevel")||changed.has("appearance"))&&this.#syncPresentation()}expandAll(){if(this.mode==="multiple")for(const panel of this.panels)panel.disabled||panel.expanded||panel.expand()}collapseAll(){for(const panel of this.panels)panel.expanded&&this.#requestCollapse(panel)}#bindPanels(assigned){const itemTag=tag("accordion-item"),next=assigned.filter(element=>element.localName===itemTag),previous=new Set(this.panels);this.panels.clear();for(const panel of next)this.panels.add(panel);for(const panel of previous)this.panels.has(panel)||releaseAccordionItemOwner(panel,this);this.#syncPresentation(),this.#reconcileExpandedPanels(!this.#panelsInitialized),this.#panelsInitialized=!0,this.#syncRovingTabIndex()}#syncPresentation(){for(const panel of this.panels)bindAccordionItemOwner(panel,{owner:this,iconPlacement:this.iconPlacement,headingLevel:this.headingLevel,appearance:this.appearance,requestTransition:this.#handleOwnedItemTransition,transitionSettled:this.#handleOwnedItemTransitionSettled,stateChanged:this.#handleOwnedItemStateChange})}#reconcileExpandedPanels(silent=!1,mode=this.mode){if(mode==="multiple")return!0;let foundExpanded=!1;for(const panel of this.panels){if(!panel.expanded)continue;if(!foundExpanded){foundExpanded=!0;continue}if(!(silent?this.#performPanelState(panel,!1):this.#requestCollapse(panel)))return!1}return!0}#isNavigableItem(item){if(item.disabled)return!1;for(let current=item;current;current=composedParentElement(current))if(isAccessibilitySubtreeExcluded(current))return!1;return!0}#navigableItems(){return[...this.panels].filter(panel=>this.#isNavigableItem(panel))}#syncRovingTabIndex(preferred){const items=this.#navigableItems(),active=preferred&&items.includes(preferred)?preferred:this.#rovingItem&&items.includes(this.#rovingItem)?this.#rovingItem:items.find(item=>item.isTabbable)??items[0];active&&(this.#rovingItem=active);for(const panel of this.panels)panel.isTabbable=panel===active;return active}#nextNavigableItem(displaced){const items=[...this.panels],index=items.indexOf(displaced);return index<0?this.#navigableItems()[0]:items.slice(index+1).find(item=>this.#isNavigableItem(item))??items.slice(0,index).reverse().find(item=>this.#isNavigableItem(item))}#reconcileRovingFocus(displaced=this.#lastFocusedItem){const unavailable=displaced!==void 0&&this.panels.has(displaced)&&!this.#isNavigableItem(displaced),focused=deepActiveElementIn(this.ownerDocument),wasFocused=displaced===this.#lastFocusedItem&&(focused===null||focused===this.ownerDocument.body||focused===displaced||focused!==null&&displaced?.shadowRoot?.contains(focused)),active=this.#syncRovingTabIndex(unavailable?this.#nextNavigableItem(displaced):void 0);!unavailable||!active||!wasFocused||active.focus()}#armAvailabilityObserver(){const ownerDocument=this.ownerDocument;if(!this.isConnected||this.#availabilityObserver)return;const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const observer=new MutationObserverCtor(()=>{this.#availabilityObserver!==observer||!this.isConnected||this.ownerDocument!==ownerDocument||this.#reconcileRovingFocus()});this.#availabilityObserver=observer,observer.observe(this,{attributes:!0,subtree:!0,attributeFilter:["disabled","hidden","aria-hidden","inert","class","style"]});for(let ancestor=composedParentElement(this);ancestor;ancestor=composedParentElement(ancestor))observer.observe(ancestor,{attributes:!0,attributeFilter:["hidden","aria-hidden","inert","class","style"]})}#resetAvailabilityObserver(){this.#availabilityObserver?.disconnect(),this.#availabilityObserver=void 0}#performPanelState(panel,expanded,announce=!1){return applyAccordionItemOwnerState(panel,expanded,announce),panel.expanded===expanded}#requestCollapse(panel){return panel.expanded?this.emit("lr-collapse",{item:panel},{cancelable:!0}).defaultPrevented?!1:this.#performPanelState(panel,!1,!0):!0}#collapseSiblings(source){for(const panel of this.panels)if(!(panel===source||!panel.expanded)&&!this.#requestCollapse(panel))return!1;return!0}#handleSlotChange;#handleOwnedItemStateChange;#itemFor(event){const item=event.composedPath().find(node=>node?.nodeType===1&&node.localName===tag("accordion-item"));return item&&this.panels.has(item)?item:void 0}#itemTriggerOwnsEvent(item,event){return event.composedPath().some(node=>{if(node?.nodeType!==1)return!1;const element=node;return element.localName==="button"&&element.getRootNode()===item.shadowRoot&&element.getAttribute("part")?.split(/\s+/u).includes("button")===!0})}#handleOwnedItemTransition;#handleOwnedItemTransitionSettled;render(){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}from"lit";import{property}from"lit/decorators.js";import{composedParentElement,deepActiveElementIn}from"../../../internal/active-element.js";import{isAccessibilitySubtreeExcluded}from"../../../internal/accessibility-visibility.js";import{LyraElement}from"../../../internal/lyra-element.js";import{tag}from"../../../internal/prefix.js";import{applyAccordionItemOwnerState,bindAccordionItemOwner,releaseAccordionItemOwner}from"./accordion-owner.js";import{styles}from"./accordion.styles.js";function normalizeMode(value){return value==="single"||value==="single-collapsible"?value:"multiple"}class LyraAccordion extends LyraElement{constructor(){super(...arguments),this.#_mode="multiple",this.panels=new Set,this.#panelsInitialized=!1,this.iconPlacement="end",this.headingLevel="3",this.appearance="outlined",this.#handleSlotChange=event=>{this.#bindPanels(event.target.assignedElements({flatten:!0}))},this.#handleOwnedItemStateChange=item=>{this.panels.has(item)&&queueMicrotask(()=>{this.panels.has(item)&&this.#reconcileRovingFocus(item)})},this.handleFocusIn=event=>{const item=this.#itemFor(event);!item||!this.#isNavigableItem(item)||(this.#lastFocusedItem=item,this.#syncRovingTabIndex(item))},this.handleKeyDown=event=>{const current=this.#itemFor(event);if(!current||!this.#isNavigableItem(current)||!this.#itemTriggerOwnsEvent(current,event))return;const items=this.#navigableItems();if(items.length===0)return;const currentIndex=items.indexOf(current);if(currentIndex<0)return;const forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let nextIndex;if(event.key==="ArrowDown"||event.key===forwardKey?nextIndex=(currentIndex+1)%items.length:event.key==="ArrowUp"||event.key===backwardKey?nextIndex=(currentIndex-1+items.length)%items.length:event.key==="Home"?nextIndex=0:event.key==="End"&&(nextIndex=items.length-1),nextIndex===void 0)return;event.preventDefault(),event.stopPropagation();const next=items[nextIndex];this.#syncRovingTabIndex(next),next.focus()},this.#handleOwnedItemTransition=(item,expanded,source)=>!this.panels.has(item)||item.disabled||!expanded&&source==="user"&&this.mode==="single"?!1:expanded?this.#emitToggleVeto(item,!1)?this.mode==="multiple"||this.#collapseSiblings(item):!1:this.#emitToggleVeto(item,!0),this.#handleOwnedItemTransitionSettled=(item,expanded)=>{!this.panels.has(item)||item.expanded!==expanded||this.emit(expanded?"lr-after-expand":"lr-after-collapse",{item})}}static{this.identityEventDetailProperties=Object.freeze({"lr-expand":Object.freeze(["item"]),"lr-after-expand":Object.freeze(["item"]),"lr-collapse":Object.freeze(["item"]),"lr-after-collapse":Object.freeze(["item"]),"lr-toggle-request":Object.freeze(["item"])})}static{this.immutableEventDetails=Object.freeze(["lr-expand","lr-after-expand","lr-collapse","lr-after-collapse","lr-toggle-request"])}static{this.styles=[LyraElement.styles,styles]}#_mode;#rovingItem;#lastFocusedItem;#availabilityObserver;#panelsInitialized;get mode(){return this.#_mode}set mode(next){const normalized=normalizeMode(next),old=this.#_mode;if(normalized!==old){if(this.#panelsInitialized&&normalized!=="multiple"&&!this.#reconcileExpandedPanels(!1,normalized)){this.requestUpdate("mode",normalized);return}this.#_mode=normalized,this.requestUpdate("mode",old)}}connectedCallback(){super.connectedCallback(),this.#armAvailabilityObserver(),this.hasUpdated&&queueMicrotask(()=>{if(!this.isConnected)return;const slot=this.renderRoot.querySelector("slot");slot&&this.#bindPanels(slot.assignedElements({flatten:!0}))})}disconnectedCallback(){this.#resetAvailabilityObserver();for(const panel of this.panels)releaseAccordionItemOwner(panel,this);this.panels.clear(),this.#rovingItem=void 0,this.#lastFocusedItem=void 0,super.disconnectedCallback()}updated(changed){super.updated(changed),(changed.has("iconPlacement")||changed.has("headingLevel")||changed.has("appearance"))&&this.#syncPresentation()}expandAll(){if(this.mode==="multiple")for(const panel of this.panels)panel.disabled||panel.expanded||panel.expand()}collapseAll(){for(const panel of this.panels)panel.expanded&&this.#requestCollapse(panel)}#bindPanels(assigned){const itemTag=tag("accordion-item"),next=assigned.filter(element=>element.localName===itemTag),previous=new Set(this.panels);this.panels.clear();for(const panel of next)this.panels.add(panel);for(const panel of previous)this.panels.has(panel)||releaseAccordionItemOwner(panel,this);this.#syncPresentation(),this.#reconcileExpandedPanels(!this.#panelsInitialized),this.#panelsInitialized=!0,this.#syncRovingTabIndex()}#syncPresentation(){for(const panel of this.panels)bindAccordionItemOwner(panel,{owner:this,iconPlacement:this.iconPlacement,headingLevel:this.headingLevel,appearance:this.appearance,requestTransition:this.#handleOwnedItemTransition,transitionSettled:this.#handleOwnedItemTransitionSettled,stateChanged:this.#handleOwnedItemStateChange})}#reconcileExpandedPanels(silent=!1,mode=this.mode){if(mode==="multiple")return!0;let foundExpanded=!1;for(const panel of this.panels){if(!panel.expanded)continue;if(!foundExpanded){foundExpanded=!0;continue}if(!(silent?this.#performPanelState(panel,!1):this.#requestCollapse(panel)))return!1}return!0}#isNavigableItem(item){if(item.disabled)return!1;for(let current=item;current;current=composedParentElement(current))if(isAccessibilitySubtreeExcluded(current))return!1;return!0}#navigableItems(){return[...this.panels].filter(panel=>this.#isNavigableItem(panel))}#syncRovingTabIndex(preferred){const items=this.#navigableItems(),active=preferred&&items.includes(preferred)?preferred:this.#rovingItem&&items.includes(this.#rovingItem)?this.#rovingItem:items.find(item=>item.isTabbable)??items[0];active&&(this.#rovingItem=active);for(const panel of this.panels)panel.isTabbable=panel===active;return active}#nextNavigableItem(displaced){const items=[...this.panels],index=items.indexOf(displaced);return index<0?this.#navigableItems()[0]:items.slice(index+1).find(item=>this.#isNavigableItem(item))??items.slice(0,index).reverse().find(item=>this.#isNavigableItem(item))}#reconcileRovingFocus(displaced=this.#lastFocusedItem){const unavailable=displaced!==void 0&&this.panels.has(displaced)&&!this.#isNavigableItem(displaced),focused=deepActiveElementIn(this.ownerDocument),wasFocused=displaced===this.#lastFocusedItem&&(focused===null||focused===this.ownerDocument.body||focused===displaced||focused!==null&&displaced?.shadowRoot?.contains(focused)),active=this.#syncRovingTabIndex(unavailable?this.#nextNavigableItem(displaced):void 0);!unavailable||!active||!wasFocused||active.focus()}#armAvailabilityObserver(){const ownerDocument=this.ownerDocument;if(!this.isConnected||this.#availabilityObserver)return;const MutationObserverCtor=ownerDocument.defaultView?.MutationObserver;if(!MutationObserverCtor)return;const observer=new MutationObserverCtor(()=>{this.#availabilityObserver!==observer||!this.isConnected||this.ownerDocument!==ownerDocument||this.#reconcileRovingFocus()});this.#availabilityObserver=observer,observer.observe(this,{attributes:!0,subtree:!0,attributeFilter:["disabled","hidden","aria-hidden","inert","class","style"]});for(let ancestor=composedParentElement(this);ancestor;ancestor=composedParentElement(ancestor))observer.observe(ancestor,{attributes:!0,attributeFilter:["hidden","aria-hidden","inert","class","style"]})}#resetAvailabilityObserver(){this.#availabilityObserver?.disconnect(),this.#availabilityObserver=void 0}#performPanelState(panel,expanded,announce=!1){return applyAccordionItemOwnerState(panel,expanded,announce),panel.expanded===expanded}#emitToggleVeto(item,collapsed){const directional=this.emit(collapsed?"lr-collapse":"lr-expand",{item},{cancelable:!0}),unified=this.emit("lr-toggle-request",{item,collapsed},{cancelable:!0});return!directional.defaultPrevented&&!unified.defaultPrevented}#requestCollapse(panel){return panel.expanded?this.#emitToggleVeto(panel,!0)?this.#performPanelState(panel,!1,!0):!1:!0}#collapseSiblings(source){for(const panel of this.panels)if(!(panel===source||!panel.expanded)&&!this.#requestCollapse(panel))return!1;return!0}#handleSlotChange;#handleOwnedItemStateChange;#itemFor(event){const item=event.composedPath().find(node=>node?.nodeType===1&&node.localName===tag("accordion-item"));return item&&this.panels.has(item)?item:void 0}#itemTriggerOwnsEvent(item,event){return event.composedPath().some(node=>{if(node?.nodeType!==1)return!1;const element=node;return element.localName==="button"&&element.getRootNode()===item.shadowRoot&&element.getAttribute("part")?.split(/\s+/u).includes("button")===!0})}#handleOwnedItemTransition;#handleOwnedItemTransitionSettled;render(){return html`<div
2
2
  part="base"
3
3
  @focusin=${this.handleFocusIn}
4
4
  @keydown=${this.handleKeyDown}
@@ -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{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,LYRA_DEFAULT_fieldRequired}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(),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,fieldRequired:LYRA_DEFAULT_fieldRequired}}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
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(),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
2
  part="base details"
3
3
  .open=${this.open}
4
4
  name=${this.name||nothing}
@@ -3,22 +3,10 @@ import{css}from"lit";const styles=css`
3
3
  display: block;
4
4
  min-inline-size: 0;
5
5
  max-inline-size: 100%;
6
- /* The disclosure's density knobs, both pointed at the shared size ladder so the tiers live in
7
- one place. Spacing reads the ladder's INLINE padding knob: a stacked panel's block rhythm is
8
- generous like a control's inline padding, while the ladder's own block padding exists to fit
9
- text inside a fixed control height and would collapse the summary row. The 'm' tier resolves
10
- to the same --lr-space-m this panel always used, so an un-sized disclosure is unchanged. */
11
6
  --_lr-details-font-size: var(--lr-form-control-font-size);
12
7
  --_lr-details-spacing: var(--lr-form-control-padding-inline);
13
8
  }
14
9
  [part~="base"] {
15
- /* flex-wrap, not grid: the header-actions part must render as a peer of the summary row
16
- instead of nested inside it (nesting an interactive control inside <summary> would make
17
- every press on it also toggle the panel), while [part="content"] still needs its own full
18
- width on the row below. A CSS Grid column spanned by both a "row 1" item and content's own
19
- "row 2" span couples their track sizing -- content's long-text max-content demand starves
20
- the row-1 columns. flex-basis: 100% on content instead forces its own wrapped line with no
21
- such coupling: line 1 (summary + header-actions) sizes independently of line 2 (content). */
22
10
  display: flex;
23
11
  flex-wrap: wrap;
24
12
  border: var(--lr-border-width-thin) solid