@aceshooting/lyra-ui 1.2.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (384) hide show
  1. package/README.md +98 -14
  2. package/custom-elements.json +30279 -12124
  3. package/dist/components/app-rail/app-rail-item.d.ts +30 -0
  4. package/dist/components/app-rail/app-rail-item.js +68 -0
  5. package/dist/components/app-rail/app-rail-item.styles.d.ts +1 -0
  6. package/dist/components/app-rail/app-rail-item.styles.js +65 -0
  7. package/dist/components/app-rail/app-rail.d.ts +168 -0
  8. package/dist/components/app-rail/app-rail.js +419 -0
  9. package/dist/components/app-rail/app-rail.styles.d.ts +1 -0
  10. package/dist/components/app-rail/app-rail.styles.js +128 -0
  11. package/dist/components/attachment-chip/attachment-chip.d.ts +141 -0
  12. package/dist/components/attachment-chip/attachment-chip.js +356 -0
  13. package/dist/components/attachment-chip/attachment-chip.styles.d.ts +1 -0
  14. package/dist/components/attachment-chip/attachment-chip.styles.js +184 -0
  15. package/dist/components/attachment-trigger/attachment-trigger.d.ts +96 -0
  16. package/dist/components/attachment-trigger/attachment-trigger.js +270 -0
  17. package/dist/components/attachment-trigger/attachment-trigger.styles.d.ts +1 -0
  18. package/dist/components/attachment-trigger/attachment-trigger.styles.js +90 -0
  19. package/dist/components/chart/bar-chart.js +2 -18
  20. package/dist/components/chart/box-plot.d.ts +25 -1
  21. package/dist/components/chart/box-plot.js +147 -7
  22. package/dist/components/chart/box-plot.styles.js +13 -0
  23. package/dist/components/chart/bubble-chart.js +2 -18
  24. package/dist/components/chart/chart-loader.d.ts +44 -13
  25. package/dist/components/chart/chart-loader.js +65 -18
  26. package/dist/components/chart/chart.d.ts +55 -12
  27. package/dist/components/chart/chart.js +247 -49
  28. package/dist/components/chart/doughnut-chart.js +2 -18
  29. package/dist/components/chart/histogram-bin.d.ts +7 -1
  30. package/dist/components/chart/histogram-bin.js +32 -14
  31. package/dist/components/chart/histogram.js +8 -16
  32. package/dist/components/chart/line-chart.js +2 -18
  33. package/dist/components/chart/lite-chart.d.ts +134 -3
  34. package/dist/components/chart/lite-chart.js +382 -67
  35. package/dist/components/chart/lite-chart.styles.js +9 -0
  36. package/dist/components/chart/pie-chart.js +2 -18
  37. package/dist/components/chart/polar-area-chart.js +2 -18
  38. package/dist/components/chart/radar-chart.js +2 -18
  39. package/dist/components/chart/scatter-chart.js +2 -18
  40. package/dist/components/chat-composer/chat-composer.d.ts +133 -0
  41. package/dist/components/chat-composer/chat-composer.js +366 -0
  42. package/dist/components/chat-composer/chat-composer.styles.d.ts +1 -0
  43. package/dist/components/chat-composer/chat-composer.styles.js +145 -0
  44. package/dist/components/chat-message/chat-message.d.ts +141 -0
  45. package/dist/components/chat-message/chat-message.js +331 -0
  46. package/dist/components/chat-message/chat-message.styles.d.ts +1 -0
  47. package/dist/components/chat-message/chat-message.styles.js +203 -0
  48. package/dist/components/checkbox/checkbox.d.ts +117 -0
  49. package/dist/components/checkbox/checkbox.js +353 -0
  50. package/dist/components/checkbox/checkbox.styles.d.ts +1 -0
  51. package/dist/components/checkbox/checkbox.styles.js +77 -0
  52. package/dist/components/chip/chip-group.d.ts +56 -0
  53. package/dist/components/chip/chip-group.js +130 -0
  54. package/dist/components/chip/chip-group.styles.d.ts +1 -0
  55. package/dist/components/chip/chip-group.styles.js +57 -0
  56. package/dist/components/chip/chip.d.ts +64 -0
  57. package/dist/components/chip/chip.js +122 -0
  58. package/dist/components/chip/chip.styles.d.ts +1 -0
  59. package/dist/components/chip/chip.styles.js +115 -0
  60. package/dist/components/citation-badge/citation-badge.d.ts +113 -0
  61. package/dist/components/citation-badge/citation-badge.js +318 -0
  62. package/dist/components/citation-badge/citation-badge.styles.d.ts +1 -0
  63. package/dist/components/citation-badge/citation-badge.styles.js +96 -0
  64. package/dist/components/code-block/code-block.d.ts +127 -0
  65. package/dist/components/code-block/code-block.js +382 -0
  66. package/dist/components/code-block/code-block.styles.d.ts +1 -0
  67. package/dist/components/code-block/code-block.styles.js +187 -0
  68. package/dist/components/code-block/code-loader.d.ts +87 -0
  69. package/dist/components/code-block/code-loader.js +142 -0
  70. package/dist/components/combobox/combobox.d.ts +65 -6
  71. package/dist/components/combobox/combobox.js +258 -48
  72. package/dist/components/combobox/combobox.styles.js +3 -3
  73. package/dist/components/combobox/option.d.ts +5 -1
  74. package/dist/components/combobox/option.js +35 -0
  75. package/dist/components/context-meter/context-meter.d.ts +53 -0
  76. package/dist/components/context-meter/context-meter.js +159 -0
  77. package/dist/components/context-meter/context-meter.styles.d.ts +1 -0
  78. package/dist/components/context-meter/context-meter.styles.js +114 -0
  79. package/dist/components/conversation-item/conversation-item.d.ts +125 -0
  80. package/dist/components/conversation-item/conversation-item.js +331 -0
  81. package/dist/components/conversation-item/conversation-item.styles.d.ts +1 -0
  82. package/dist/components/conversation-item/conversation-item.styles.js +155 -0
  83. package/dist/components/date-picker/calendar-core.d.ts +24 -0
  84. package/dist/components/date-picker/calendar-core.js +51 -4
  85. package/dist/components/date-picker/date-input.d.ts +100 -9
  86. package/dist/components/date-picker/date-input.js +383 -66
  87. package/dist/components/date-picker/date-picker.d.ts +35 -4
  88. package/dist/components/date-picker/date-picker.js +171 -44
  89. package/dist/components/dialog/confirm.d.ts +40 -0
  90. package/dist/components/dialog/confirm.js +76 -0
  91. package/dist/components/dialog/dialog.d.ts +129 -0
  92. package/dist/components/dialog/dialog.js +288 -0
  93. package/dist/components/dialog/dialog.styles.d.ts +1 -0
  94. package/dist/components/dialog/dialog.styles.js +96 -0
  95. package/dist/components/dock-panel/dock-panel.d.ts +142 -0
  96. package/dist/components/dock-panel/dock-panel.js +359 -0
  97. package/dist/components/dock-panel/dock-panel.styles.d.ts +1 -0
  98. package/dist/components/dock-panel/dock-panel.styles.js +159 -0
  99. package/dist/components/document-preview/document-preview.d.ts +143 -0
  100. package/dist/components/document-preview/document-preview.js +388 -0
  101. package/dist/components/document-preview/document-preview.styles.d.ts +1 -0
  102. package/dist/components/document-preview/document-preview.styles.js +191 -0
  103. package/dist/components/empty/empty.d.ts +1 -2
  104. package/dist/components/empty/empty.js +18 -12
  105. package/dist/components/empty/empty.styles.js +0 -3
  106. package/dist/components/export-button/csv.js +1 -1
  107. package/dist/components/export-button/export-button.d.ts +12 -0
  108. package/dist/components/export-button/export-button.js +35 -5
  109. package/dist/components/export-button/export-button.styles.js +5 -1
  110. package/dist/components/file-input/accept.js +2 -0
  111. package/dist/components/file-input/file-input.d.ts +10 -1
  112. package/dist/components/file-input/file-input.js +36 -5
  113. package/dist/components/flag/flag.d.ts +29 -13
  114. package/dist/components/flag/flag.js +54 -14
  115. package/dist/components/flag/flag.styles.js +1 -1
  116. package/dist/components/flag/language-map.d.ts +4 -1
  117. package/dist/components/flag/language-map.js +6 -3
  118. package/dist/components/gauge/gauge.d.ts +10 -1
  119. package/dist/components/gauge/gauge.js +41 -13
  120. package/dist/components/generation-status/generation-status.d.ts +117 -0
  121. package/dist/components/generation-status/generation-status.js +327 -0
  122. package/dist/components/generation-status/generation-status.styles.d.ts +1 -0
  123. package/dist/components/generation-status/generation-status.styles.js +84 -0
  124. package/dist/components/graph/graph.d.ts +37 -3
  125. package/dist/components/graph/graph.js +132 -20
  126. package/dist/components/heatmap/calendar-grid.d.ts +19 -7
  127. package/dist/components/heatmap/calendar-grid.js +42 -18
  128. package/dist/components/heatmap/heatmap-scale.d.ts +11 -1
  129. package/dist/components/heatmap/heatmap-scale.js +14 -2
  130. package/dist/components/heatmap/heatmap.d.ts +227 -12
  131. package/dist/components/heatmap/heatmap.js +488 -93
  132. package/dist/components/json-viewer/json-viewer.d.ts +70 -0
  133. package/dist/components/json-viewer/json-viewer.js +361 -0
  134. package/dist/components/json-viewer/json-viewer.styles.d.ts +1 -0
  135. package/dist/components/json-viewer/json-viewer.styles.js +177 -0
  136. package/dist/components/kbd/kbd.d.ts +77 -0
  137. package/dist/components/kbd/kbd.js +231 -0
  138. package/dist/components/kbd/kbd.styles.d.ts +1 -0
  139. package/dist/components/kbd/kbd.styles.js +52 -0
  140. package/dist/components/live-region/live-region.d.ts +90 -0
  141. package/dist/components/live-region/live-region.js +189 -0
  142. package/dist/components/live-region/live-region.styles.d.ts +1 -0
  143. package/dist/components/live-region/live-region.styles.js +10 -0
  144. package/dist/components/map/map.d.ts +32 -7
  145. package/dist/components/map/map.js +133 -32
  146. package/dist/components/markdown/markdown-loader.d.ts +58 -0
  147. package/dist/components/markdown/markdown-loader.js +77 -0
  148. package/dist/components/markdown/markdown.d.ts +119 -0
  149. package/dist/components/markdown/markdown.js +389 -0
  150. package/dist/components/markdown/markdown.styles.d.ts +1 -0
  151. package/dist/components/markdown/markdown.styles.js +88 -0
  152. package/dist/components/media-card/media-card.d.ts +130 -0
  153. package/dist/components/media-card/media-card.js +273 -0
  154. package/dist/components/media-card/media-card.styles.d.ts +1 -0
  155. package/dist/components/media-card/media-card.styles.js +132 -0
  156. package/dist/components/mention-popover/mention-popover.d.ts +203 -0
  157. package/dist/components/mention-popover/mention-popover.js +493 -0
  158. package/dist/components/mention-popover/mention-popover.styles.d.ts +1 -0
  159. package/dist/components/mention-popover/mention-popover.styles.js +101 -0
  160. package/dist/components/menu/menu-item.d.ts +91 -0
  161. package/dist/components/menu/menu-item.js +206 -0
  162. package/dist/components/menu/menu-item.styles.d.ts +1 -0
  163. package/dist/components/menu/menu-item.styles.js +75 -0
  164. package/dist/components/menu/menu.d.ts +167 -0
  165. package/dist/components/menu/menu.js +461 -0
  166. package/dist/components/menu/menu.styles.d.ts +1 -0
  167. package/dist/components/menu/menu.styles.js +67 -0
  168. package/dist/components/model-select/model-select.d.ts +170 -0
  169. package/dist/components/model-select/model-select.js +588 -0
  170. package/dist/components/model-select/model-select.styles.d.ts +1 -0
  171. package/dist/components/model-select/model-select.styles.js +203 -0
  172. package/dist/components/model-settings-panel/model-settings-panel.d.ts +93 -0
  173. package/dist/components/model-settings-panel/model-settings-panel.js +209 -0
  174. package/dist/components/model-settings-panel/model-settings-panel.styles.d.ts +1 -0
  175. package/dist/components/model-settings-panel/model-settings-panel.styles.js +82 -0
  176. package/dist/components/playback/playback.d.ts +19 -3
  177. package/dist/components/playback/playback.js +109 -33
  178. package/dist/components/playback/playback.styles.js +6 -1
  179. package/dist/components/responsive-panel/responsive-panel.d.ts +163 -0
  180. package/dist/components/responsive-panel/responsive-panel.js +363 -0
  181. package/dist/components/responsive-panel/responsive-panel.styles.d.ts +1 -0
  182. package/dist/components/responsive-panel/responsive-panel.styles.js +103 -0
  183. package/dist/components/result-card/result-card.d.ts +50 -0
  184. package/dist/components/result-card/result-card.js +89 -0
  185. package/dist/components/result-card/result-card.styles.d.ts +1 -0
  186. package/dist/components/result-card/result-card.styles.js +49 -0
  187. package/dist/components/result-card/result-field.d.ts +36 -0
  188. package/dist/components/result-card/result-field.js +87 -0
  189. package/dist/components/result-card/result-field.styles.d.ts +1 -0
  190. package/dist/components/result-card/result-field.styles.js +32 -0
  191. package/dist/components/select/select.d.ts +84 -4
  192. package/dist/components/select/select.js +251 -36
  193. package/dist/components/skeleton/skeleton.d.ts +3 -0
  194. package/dist/components/skeleton/skeleton.js +7 -1
  195. package/dist/components/skeleton/skeleton.styles.js +5 -4
  196. package/dist/components/slider/slider.d.ts +141 -0
  197. package/dist/components/slider/slider.js +467 -0
  198. package/dist/components/slider/slider.styles.d.ts +1 -0
  199. package/dist/components/slider/slider.styles.js +87 -0
  200. package/dist/components/source-card/source-card.d.ts +104 -0
  201. package/dist/components/source-card/source-card.js +195 -0
  202. package/dist/components/source-card/source-card.styles.d.ts +1 -0
  203. package/dist/components/source-card/source-card.styles.js +69 -0
  204. package/dist/components/source-list/source-list.d.ts +63 -0
  205. package/dist/components/source-list/source-list.js +130 -0
  206. package/dist/components/source-list/source-list.styles.d.ts +1 -0
  207. package/dist/components/source-list/source-list.styles.js +59 -0
  208. package/dist/components/sparkline/sparkline.js +58 -20
  209. package/dist/components/split/split.d.ts +224 -5
  210. package/dist/components/split/split.js +617 -43
  211. package/dist/components/split/split.styles.js +47 -0
  212. package/dist/components/stat/stat.d.ts +15 -4
  213. package/dist/components/stat/stat.js +53 -12
  214. package/dist/components/stream-status/stream-status.d.ts +126 -0
  215. package/dist/components/stream-status/stream-status.js +292 -0
  216. package/dist/components/stream-status/stream-status.styles.d.ts +1 -0
  217. package/dist/components/stream-status/stream-status.styles.js +103 -0
  218. package/dist/components/streaming-text/streaming-text.d.ts +104 -0
  219. package/dist/components/streaming-text/streaming-text.js +224 -0
  220. package/dist/components/streaming-text/streaming-text.styles.d.ts +1 -0
  221. package/dist/components/streaming-text/streaming-text.styles.js +63 -0
  222. package/dist/components/switch/switch.d.ts +103 -0
  223. package/dist/components/switch/switch.js +250 -0
  224. package/dist/components/switch/switch.styles.d.ts +1 -0
  225. package/dist/components/switch/switch.styles.js +75 -0
  226. package/dist/components/table/table.d.ts +89 -5
  227. package/dist/components/table/table.js +243 -26
  228. package/dist/components/table/table.styles.js +6 -1
  229. package/dist/components/tabs/tabs.d.ts +74 -0
  230. package/dist/components/tabs/tabs.js +254 -0
  231. package/dist/components/tabs/tabs.styles.d.ts +1 -0
  232. package/dist/components/tabs/tabs.styles.js +74 -0
  233. package/dist/components/thinking-panel/thinking-panel.d.ts +123 -0
  234. package/dist/components/thinking-panel/thinking-panel.js +260 -0
  235. package/dist/components/thinking-panel/thinking-panel.styles.d.ts +1 -0
  236. package/dist/components/thinking-panel/thinking-panel.styles.js +123 -0
  237. package/dist/components/time-range/time-range.d.ts +59 -2
  238. package/dist/components/time-range/time-range.js +163 -67
  239. package/dist/components/toast/toast-item.d.ts +12 -2
  240. package/dist/components/toast/toast-item.js +106 -44
  241. package/dist/components/toast/toast-item.styles.js +59 -28
  242. package/dist/components/toast/toast.js +17 -5
  243. package/dist/components/toast/toaster.js +10 -1
  244. package/dist/components/tool-approval-dialog/tool-approval-dialog.d.ts +131 -0
  245. package/dist/components/tool-approval-dialog/tool-approval-dialog.js +329 -0
  246. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.d.ts +1 -0
  247. package/dist/components/tool-approval-dialog/tool-approval-dialog.styles.js +160 -0
  248. package/dist/components/tool-call-chip/tool-call-chip.d.ts +105 -0
  249. package/dist/components/tool-call-chip/tool-call-chip.js +349 -0
  250. package/dist/components/tool-call-chip/tool-call-chip.styles.d.ts +1 -0
  251. package/dist/components/tool-call-chip/tool-call-chip.styles.js +203 -0
  252. package/dist/components/tool-param-form/tool-param-form.d.ts +206 -0
  253. package/dist/components/tool-param-form/tool-param-form.js +610 -0
  254. package/dist/components/tool-param-form/tool-param-form.styles.d.ts +1 -0
  255. package/dist/components/tool-param-form/tool-param-form.styles.js +75 -0
  256. package/dist/components/tool-result-dialog/tool-result-dialog.d.ts +122 -0
  257. package/dist/components/tool-result-dialog/tool-result-dialog.js +358 -0
  258. package/dist/components/tool-result-dialog/tool-result-dialog.styles.d.ts +1 -0
  259. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js +176 -0
  260. package/dist/components/tool-result-view/registry.d.ts +73 -0
  261. package/dist/components/tool-result-view/registry.js +89 -0
  262. package/dist/components/tool-result-view/tool-result-view.d.ts +58 -0
  263. package/dist/components/tool-result-view/tool-result-view.js +152 -0
  264. package/dist/components/tool-result-view/tool-result-view.styles.d.ts +1 -0
  265. package/dist/components/tool-result-view/tool-result-view.styles.js +13 -0
  266. package/dist/components/tool-select-dialog/tool-select-dialog.d.ts +151 -0
  267. package/dist/components/tool-select-dialog/tool-select-dialog.js +350 -0
  268. package/dist/components/tool-select-dialog/tool-select-dialog.styles.d.ts +1 -0
  269. package/dist/components/tool-select-dialog/tool-select-dialog.styles.js +191 -0
  270. package/dist/components/tree/tree-node.d.ts +15 -3
  271. package/dist/components/tree/tree-node.js +20 -7
  272. package/dist/components/tree/tree.d.ts +25 -10
  273. package/dist/components/tree/tree.js +39 -31
  274. package/dist/components/typing-indicator/typing-indicator.d.ts +70 -0
  275. package/dist/components/typing-indicator/typing-indicator.js +108 -0
  276. package/dist/components/typing-indicator/typing-indicator.styles.d.ts +1 -0
  277. package/dist/components/typing-indicator/typing-indicator.styles.js +132 -0
  278. package/dist/components/virtual-list/virtual-list.d.ts +210 -0
  279. package/dist/components/virtual-list/virtual-list.js +607 -0
  280. package/dist/components/virtual-list/virtual-list.styles.d.ts +1 -0
  281. package/dist/components/virtual-list/virtual-list.styles.js +56 -0
  282. package/dist/components/widget/widget.d.ts +5 -4
  283. package/dist/components/widget/widget.js +54 -120
  284. package/dist/components/widget/widget.styles.js +8 -2
  285. package/dist/components/word-cloud/word-cloud-layout.d.ts +7 -0
  286. package/dist/components/word-cloud/word-cloud-layout.js +29 -2
  287. package/dist/components/word-cloud/word-cloud.d.ts +28 -2
  288. package/dist/components/word-cloud/word-cloud.js +69 -19
  289. package/dist/components/word-cloud/word-cloud.styles.js +16 -3
  290. package/dist/internal/anchored-validity.d.ts +1 -0
  291. package/dist/internal/anchored-validity.js +86 -0
  292. package/dist/internal/announcer.d.ts +57 -0
  293. package/dist/internal/announcer.js +71 -0
  294. package/dist/internal/form-associated.d.ts +8 -0
  295. package/dist/internal/form-associated.js +98 -15
  296. package/dist/internal/group-by-recency.d.ts +50 -0
  297. package/dist/internal/group-by-recency.js +80 -0
  298. package/dist/internal/numbers.d.ts +12 -0
  299. package/dist/internal/numbers.js +26 -0
  300. package/dist/internal/overlay-manager.d.ts +51 -0
  301. package/dist/internal/overlay-manager.js +523 -0
  302. package/dist/internal/positioner.js +27 -3
  303. package/dist/internal/rtl.d.ts +23 -0
  304. package/dist/internal/rtl.js +28 -0
  305. package/dist/internal/safe-url.d.ts +12 -0
  306. package/dist/internal/safe-url.js +41 -0
  307. package/dist/internal/scroll-lock.d.ts +10 -5
  308. package/dist/internal/scroll-lock.js +30 -14
  309. package/dist/internal/tokens.styles.js +22 -10
  310. package/dist/lyra.d.ts +133 -31
  311. package/dist/lyra.js +96 -26
  312. package/llms-full.txt +4546 -183
  313. package/llms.txt +21 -5
  314. package/package.json +41 -6
  315. package/dist/components/chart/bar-chart.stories.d.ts +0 -5
  316. package/dist/components/chart/bar-chart.stories.js +0 -20
  317. package/dist/components/chart/box-plot.stories.d.ts +0 -5
  318. package/dist/components/chart/box-plot.stories.js +0 -29
  319. package/dist/components/chart/bubble-chart.stories.d.ts +0 -5
  320. package/dist/components/chart/bubble-chart.stories.js +0 -26
  321. package/dist/components/chart/chart.stories.d.ts +0 -32
  322. package/dist/components/chart/chart.stories.js +0 -141
  323. package/dist/components/chart/doughnut-chart.stories.d.ts +0 -5
  324. package/dist/components/chart/doughnut-chart.stories.js +0 -26
  325. package/dist/components/chart/histogram.stories.d.ts +0 -5
  326. package/dist/components/chart/histogram.stories.js +0 -17
  327. package/dist/components/chart/line-chart.stories.d.ts +0 -22
  328. package/dist/components/chart/line-chart.stories.js +0 -99
  329. package/dist/components/chart/lite-chart.stories.d.ts +0 -14
  330. package/dist/components/chart/lite-chart.stories.js +0 -114
  331. package/dist/components/chart/pie-chart.stories.d.ts +0 -5
  332. package/dist/components/chart/pie-chart.stories.js +0 -26
  333. package/dist/components/chart/polar-area-chart.stories.d.ts +0 -5
  334. package/dist/components/chart/polar-area-chart.stories.js +0 -20
  335. package/dist/components/chart/radar-chart.stories.d.ts +0 -5
  336. package/dist/components/chart/radar-chart.stories.js +0 -20
  337. package/dist/components/chart/scatter-chart.stories.d.ts +0 -5
  338. package/dist/components/chart/scatter-chart.stories.js +0 -31
  339. package/dist/components/combobox/combobox.stories.d.ts +0 -24
  340. package/dist/components/combobox/combobox.stories.js +0 -102
  341. package/dist/components/date-picker/date-input.stories.d.ts +0 -10
  342. package/dist/components/date-picker/date-input.stories.js +0 -48
  343. package/dist/components/date-picker/date-picker.stories.d.ts +0 -10
  344. package/dist/components/date-picker/date-picker.stories.js +0 -25
  345. package/dist/components/empty/empty.stories.d.ts +0 -7
  346. package/dist/components/empty/empty.stories.js +0 -34
  347. package/dist/components/export-button/export-button.stories.d.ts +0 -7
  348. package/dist/components/export-button/export-button.stories.js +0 -37
  349. package/dist/components/file-input/file-input.stories.d.ts +0 -7
  350. package/dist/components/file-input/file-input.stories.js +0 -19
  351. package/dist/components/flag/flag.stories.d.ts +0 -6
  352. package/dist/components/flag/flag.stories.js +0 -31
  353. package/dist/components/gauge/gauge.stories.d.ts +0 -8
  354. package/dist/components/gauge/gauge.stories.js +0 -19
  355. package/dist/components/graph/graph.stories.d.ts +0 -8
  356. package/dist/components/graph/graph.stories.js +0 -68
  357. package/dist/components/heatmap/heatmap.stories.d.ts +0 -27
  358. package/dist/components/heatmap/heatmap.stories.js +0 -179
  359. package/dist/components/map/map.stories.d.ts +0 -15
  360. package/dist/components/map/map.stories.js +0 -135
  361. package/dist/components/playback/playback.stories.d.ts +0 -7
  362. package/dist/components/playback/playback.stories.js +0 -16
  363. package/dist/components/select/select.stories.d.ts +0 -21
  364. package/dist/components/select/select.stories.js +0 -91
  365. package/dist/components/skeleton/skeleton.stories.d.ts +0 -5
  366. package/dist/components/skeleton/skeleton.stories.js +0 -16
  367. package/dist/components/sparkline/sparkline.stories.d.ts +0 -11
  368. package/dist/components/sparkline/sparkline.stories.js +0 -39
  369. package/dist/components/split/split.stories.d.ts +0 -7
  370. package/dist/components/split/split.stories.js +0 -36
  371. package/dist/components/stat/stat.stories.d.ts +0 -9
  372. package/dist/components/stat/stat.stories.js +0 -81
  373. package/dist/components/table/table.stories.d.ts +0 -12
  374. package/dist/components/table/table.stories.js +0 -67
  375. package/dist/components/time-range/time-range.stories.d.ts +0 -8
  376. package/dist/components/time-range/time-range.stories.js +0 -26
  377. package/dist/components/toast/toast.stories.d.ts +0 -8
  378. package/dist/components/toast/toast.stories.js +0 -72
  379. package/dist/components/tree/tree.stories.d.ts +0 -9
  380. package/dist/components/tree/tree.stories.js +0 -52
  381. package/dist/components/widget/widget.stories.d.ts +0 -9
  382. package/dist/components/widget/widget.stories.js +0 -74
  383. package/dist/components/word-cloud/word-cloud.stories.d.ts +0 -10
  384. package/dist/components/word-cloud/word-cloud.stories.js +0 -55
@@ -0,0 +1,91 @@
1
+ import { type PropertyValues, type TemplateResult } from 'lit';
2
+ import { LyraElement } from '../../internal/lyra-element.js';
3
+ export type MenuItemType = 'normal' | 'checkbox';
4
+ export interface MenuItemChangeDetail {
5
+ value: string;
6
+ checked: boolean;
7
+ }
8
+ /**
9
+ * `<lyra-menu-item>` — a single action row inside `<lyra-menu>`'s default
10
+ * slot. Not meaningful on its own (there is no standalone "click a menu item"
11
+ * use case) — it exists purely as `<lyra-menu>`'s light-DOM child, the same
12
+ * relationship `<lyra-option>` has to `<lyra-combobox>`/`<lyra-select>`.
13
+ *
14
+ * `role="menuitem"` and the roving `tabindex` both live on *this host
15
+ * element*, not an internal shadow-DOM button — mirroring `<lyra-tree-node>`'s
16
+ * identical choice (see that class's doc). `<lyra-menu>` is the sole owner of
17
+ * this element's `tabIndex`: it flips exactly one navigable item's `tabIndex`
18
+ * to `0` (the rest sit at `-1`) as its roving-tabindex highlight moves, and
19
+ * calls `.focus()` directly on this host to move real DOM focus there.
20
+ * `[part="base"]` is purely a visual box with no interactive semantics of its
21
+ * own — see the class doc on `<lyra-menu>` for why real DOM focus (rather
22
+ * than `aria-activedescendant`) was chosen for this pair.
23
+ *
24
+ * Enter/Space activation is handled by `<lyra-menu>`'s own delegated
25
+ * `keydown` listener calling `select()` on whichever item is currently
26
+ * roving-focused (mirrors `<lyra-tree>` calling `current.select()` from its
27
+ * own keydown handler) — this element only wires a plain `click` listener
28
+ * itself, so `select()` fires identically whether the item was reached by
29
+ * mouse or keyboard.
30
+ *
31
+ * `type="checkbox"` (mirroring `wa-dropdown-item`'s identical `type` option)
32
+ * renders `role="menuitemcheckbox"` in place of `role="menuitem"`, with
33
+ * `aria-checked` reflecting `checked` and a checkmark glyph shown once
34
+ * `checked` is `true`. Activating a `checkbox`-type item (click, or the
35
+ * parent's Enter/Space handling via `select()`) toggles `checked` and fires
36
+ * `lyra-menu-item-change` *in addition to* the usual `lyra-menu-item-select`
37
+ * — the latter is never suppressed, so a parent `<lyra-menu>` still closes
38
+ * and re-fires its consolidated `lyra-menu-select` exactly as it does for a
39
+ * `type="normal"` item. `type="normal"` (the default) renders and behaves
40
+ * exactly as before this option existed — no role, rendering, or event
41
+ * differences.
42
+ *
43
+ * @customElement lyra-menu-item
44
+ * @slot - The item's label content.
45
+ * @slot icon - Optional leading icon.
46
+ * @event lyra-menu-item-select - This item was activated (click, or the
47
+ * parent `<lyra-menu>`'s own Enter/Space handling of the roving-focused
48
+ * item). No detail payload — a listener already has `event.target` (this
49
+ * element) to read `value` off of, and `<lyra-menu>` itself consumes this
50
+ * event to close and re-fire it as its own consolidated `lyra-menu-select`
51
+ * (`detail: { value }`) rather than requiring a consumer to listen on every
52
+ * individual item — listen there instead unless you specifically need a
53
+ * per-item handler.
54
+ * @event lyra-menu-item-change - A `type="checkbox"` item was activated and
55
+ * its `checked` state toggled. `detail: { value, checked }` — the item's own
56
+ * `value` and its new `checked` value. Fired in addition to (never instead
57
+ * of) `lyra-menu-item-select` above. Never fired for `type="normal"`.
58
+ * @csspart base - The row (`role` lives on the host — see the class doc).
59
+ * @csspart icon - Wrapper around the `icon` slot. Not rendered at all when the slot is empty.
60
+ * @csspart label - Wrapper around the default slot.
61
+ * @csspart checkmark - The checkmark glyph shown when a `type="checkbox"` item is `checked`. Not rendered at all for `type="normal"`.
62
+ */
63
+ export declare class LyraMenuItem extends LyraElement {
64
+ static styles: import("lit").CSSResultGroup[];
65
+ /** An id/value the parent `<lyra-menu>`'s `lyra-menu-select` detail keys off of. */
66
+ value: string;
67
+ /** Disables selection and excludes this item from `<lyra-menu>`'s roving-tabindex nav entirely. */
68
+ disabled: boolean;
69
+ /** Visual treatment for a dangerous action (e.g. "Delete") — tints the row with `--lyra-color-danger`. */
70
+ destructive: boolean;
71
+ /** `'checkbox'` renders `role="menuitemcheckbox"` with a toggleable `checked` state and a
72
+ * checkmark glyph, mirroring `wa-dropdown-item`'s identical `type` option — see the class doc. */
73
+ type: MenuItemType;
74
+ /** Whether a `type="checkbox"` item is checked. Meaningless (ignored) for `type="normal"`. */
75
+ checked: boolean;
76
+ private hasIconSlot;
77
+ connectedCallback(): void;
78
+ protected willUpdate(changed: PropertyValues): void;
79
+ /** Fires `lyra-menu-item-select` (no-op while `disabled`). Called by this element's own
80
+ * click handler, and by `<lyra-menu>`'s Enter/Space keydown handling of the active item.
81
+ * For `type="checkbox"`, also toggles `checked` and fires `lyra-menu-item-change` first --
82
+ * see the class doc. */
83
+ select(): void;
84
+ private onIconSlotChange;
85
+ render(): TemplateResult;
86
+ }
87
+ declare global {
88
+ interface HTMLElementTagNameMap {
89
+ 'lyra-menu-item': LyraMenuItem;
90
+ }
91
+ }
@@ -0,0 +1,206 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, nothing, svg } from 'lit';
8
+ import { property, state } from 'lit/decorators.js';
9
+ import { LyraElement } from '../../internal/lyra-element.js';
10
+ import { defineElement } from '../../internal/prefix.js';
11
+ import { styles } from './menu-item.styles.js';
12
+ // Mirrors the shared icon set's viewBox/stroke conventions
13
+ // (internal/icons.ts's chevronIcon()/closeIcon()/etc.) without adding a
14
+ // checkmark glyph to that module -- it's off limits here -- so this one-off
15
+ // icon still reads as part of the same visual language as the rest of the
16
+ // library's inline icons. Same approach lyra-checkbox's own local
17
+ // checkmark/indeterminate glyphs (and lyra-chat-message's local retryIcon())
18
+ // take for the identical reason.
19
+ const GLYPH_VIEW_BOX = '0 0 24 24';
20
+ const GLYPH_STROKE_WIDTH = '1.75';
21
+ function checkmarkGlyph() {
22
+ return svg `
23
+ <svg
24
+ part="checkmark"
25
+ width="1em"
26
+ height="1em"
27
+ viewBox=${GLYPH_VIEW_BOX}
28
+ fill="none"
29
+ stroke="currentColor"
30
+ stroke-width=${GLYPH_STROKE_WIDTH}
31
+ stroke-linecap="round"
32
+ stroke-linejoin="round"
33
+ aria-hidden="true"
34
+ focusable="false"
35
+ ><polyline points="5 12.5 10 17.5 19 6.5"></polyline></svg>
36
+ `;
37
+ }
38
+ /**
39
+ * `<lyra-menu-item>` — a single action row inside `<lyra-menu>`'s default
40
+ * slot. Not meaningful on its own (there is no standalone "click a menu item"
41
+ * use case) — it exists purely as `<lyra-menu>`'s light-DOM child, the same
42
+ * relationship `<lyra-option>` has to `<lyra-combobox>`/`<lyra-select>`.
43
+ *
44
+ * `role="menuitem"` and the roving `tabindex` both live on *this host
45
+ * element*, not an internal shadow-DOM button — mirroring `<lyra-tree-node>`'s
46
+ * identical choice (see that class's doc). `<lyra-menu>` is the sole owner of
47
+ * this element's `tabIndex`: it flips exactly one navigable item's `tabIndex`
48
+ * to `0` (the rest sit at `-1`) as its roving-tabindex highlight moves, and
49
+ * calls `.focus()` directly on this host to move real DOM focus there.
50
+ * `[part="base"]` is purely a visual box with no interactive semantics of its
51
+ * own — see the class doc on `<lyra-menu>` for why real DOM focus (rather
52
+ * than `aria-activedescendant`) was chosen for this pair.
53
+ *
54
+ * Enter/Space activation is handled by `<lyra-menu>`'s own delegated
55
+ * `keydown` listener calling `select()` on whichever item is currently
56
+ * roving-focused (mirrors `<lyra-tree>` calling `current.select()` from its
57
+ * own keydown handler) — this element only wires a plain `click` listener
58
+ * itself, so `select()` fires identically whether the item was reached by
59
+ * mouse or keyboard.
60
+ *
61
+ * `type="checkbox"` (mirroring `wa-dropdown-item`'s identical `type` option)
62
+ * renders `role="menuitemcheckbox"` in place of `role="menuitem"`, with
63
+ * `aria-checked` reflecting `checked` and a checkmark glyph shown once
64
+ * `checked` is `true`. Activating a `checkbox`-type item (click, or the
65
+ * parent's Enter/Space handling via `select()`) toggles `checked` and fires
66
+ * `lyra-menu-item-change` *in addition to* the usual `lyra-menu-item-select`
67
+ * — the latter is never suppressed, so a parent `<lyra-menu>` still closes
68
+ * and re-fires its consolidated `lyra-menu-select` exactly as it does for a
69
+ * `type="normal"` item. `type="normal"` (the default) renders and behaves
70
+ * exactly as before this option existed — no role, rendering, or event
71
+ * differences.
72
+ *
73
+ * @customElement lyra-menu-item
74
+ * @slot - The item's label content.
75
+ * @slot icon - Optional leading icon.
76
+ * @event lyra-menu-item-select - This item was activated (click, or the
77
+ * parent `<lyra-menu>`'s own Enter/Space handling of the roving-focused
78
+ * item). No detail payload — a listener already has `event.target` (this
79
+ * element) to read `value` off of, and `<lyra-menu>` itself consumes this
80
+ * event to close and re-fire it as its own consolidated `lyra-menu-select`
81
+ * (`detail: { value }`) rather than requiring a consumer to listen on every
82
+ * individual item — listen there instead unless you specifically need a
83
+ * per-item handler.
84
+ * @event lyra-menu-item-change - A `type="checkbox"` item was activated and
85
+ * its `checked` state toggled. `detail: { value, checked }` — the item's own
86
+ * `value` and its new `checked` value. Fired in addition to (never instead
87
+ * of) `lyra-menu-item-select` above. Never fired for `type="normal"`.
88
+ * @csspart base - The row (`role` lives on the host — see the class doc).
89
+ * @csspart icon - Wrapper around the `icon` slot. Not rendered at all when the slot is empty.
90
+ * @csspart label - Wrapper around the default slot.
91
+ * @csspart checkmark - The checkmark glyph shown when a `type="checkbox"` item is `checked`. Not rendered at all for `type="normal"`.
92
+ */
93
+ export class LyraMenuItem extends LyraElement {
94
+ constructor() {
95
+ super(...arguments);
96
+ /** An id/value the parent `<lyra-menu>`'s `lyra-menu-select` detail keys off of. */
97
+ this.value = '';
98
+ /** Disables selection and excludes this item from `<lyra-menu>`'s roving-tabindex nav entirely. */
99
+ this.disabled = false;
100
+ /** Visual treatment for a dangerous action (e.g. "Delete") — tints the row with `--lyra-color-danger`. */
101
+ this.destructive = false;
102
+ /** `'checkbox'` renders `role="menuitemcheckbox"` with a toggleable `checked` state and a
103
+ * checkmark glyph, mirroring `wa-dropdown-item`'s identical `type` option — see the class doc. */
104
+ this.type = 'normal';
105
+ /** Whether a `type="checkbox"` item is checked. Meaningless (ignored) for `type="normal"`. */
106
+ this.checked = false;
107
+ // [part='icon'] never matches a bare :empty selector -- see menu-item.styles.ts's
108
+ // own comment on that part. Same fix as lyra-tool-call-chip's hasDetailSlot.
109
+ this.hasIconSlot = false;
110
+ this.onIconSlotChange = (e) => {
111
+ this.hasIconSlot = e.target.assignedElements({ flatten: true }).length > 0;
112
+ };
113
+ }
114
+ static { this.styles = [LyraElement.styles, styles]; }
115
+ connectedCallback() {
116
+ super.connectedCallback();
117
+ // A safe, focusable-but-out-of-tab-order baseline before <lyra-menu> ever
118
+ // gets a chance to assign roving-tabindex state (e.g. a standalone
119
+ // fixture in a test, or the brief window before the parent's own
120
+ // slotchange handler runs). <lyra-menu> is the sole subsequent owner of
121
+ // this property -- see the class doc.
122
+ if (this.tabIndex !== 0)
123
+ this.tabIndex = -1;
124
+ }
125
+ willUpdate(changed) {
126
+ // role/aria-disabled/aria-checked live on the host (see the class doc),
127
+ // so they're plain imperative attribute writes here rather than part of
128
+ // render()'s shadow-DOM template -- mirrors lyra-tree-node's identical
129
+ // willUpdate.
130
+ const isCheckbox = this.type === 'checkbox';
131
+ this.setAttribute('role', isCheckbox ? 'menuitemcheckbox' : 'menuitem');
132
+ if (isCheckbox) {
133
+ this.setAttribute('aria-checked', this.checked ? 'true' : 'false');
134
+ }
135
+ else {
136
+ // Kept absent entirely for type="normal" -- see the class doc's "no
137
+ // role, rendering, or event differences" guarantee for that default.
138
+ this.removeAttribute('aria-checked');
139
+ }
140
+ if (this.disabled) {
141
+ this.setAttribute('aria-disabled', 'true');
142
+ // Defense-in-depth mirroring connectedCallback's baseline above:
143
+ // <lyra-menu>'s roving-tabindex bookkeeping (activeIndex) only gets a
144
+ // chance to resync once real focus actually moves (via its own
145
+ // focusin listener), so a `disabled` flip must proactively strip this
146
+ // item out of the roving target and drop any focus it's currently
147
+ // holding right here -- regardless of what the parent's activeIndex
148
+ // still thinks -- so a disabled item can never remain the roving
149
+ // target or retain focus.
150
+ if (changed.has('disabled')) {
151
+ this.tabIndex = -1;
152
+ if (document.activeElement === this)
153
+ this.blur();
154
+ }
155
+ }
156
+ else {
157
+ this.removeAttribute('aria-disabled');
158
+ }
159
+ if (changed.has('disabled')) {
160
+ this.emit('lyra-menu-item-state-change', { disabled: this.disabled, hidden: this.hidden });
161
+ }
162
+ }
163
+ /** Fires `lyra-menu-item-select` (no-op while `disabled`). Called by this element's own
164
+ * click handler, and by `<lyra-menu>`'s Enter/Space keydown handling of the active item.
165
+ * For `type="checkbox"`, also toggles `checked` and fires `lyra-menu-item-change` first --
166
+ * see the class doc. */
167
+ select() {
168
+ if (this.disabled)
169
+ return;
170
+ if (this.type === 'checkbox') {
171
+ this.checked = !this.checked;
172
+ this.emit('lyra-menu-item-change', { value: this.value, checked: this.checked });
173
+ }
174
+ this.emit('lyra-menu-item-select');
175
+ }
176
+ render() {
177
+ return html `
178
+ <span part="base" @click=${() => this.select()}>
179
+ <span part="icon" aria-hidden="true" ?hidden=${!this.hasIconSlot}>
180
+ <slot name="icon" @slotchange=${this.onIconSlotChange}></slot>
181
+ </span>
182
+ <span part="label"><slot></slot></span>
183
+ ${this.type === 'checkbox' && this.checked ? checkmarkGlyph() : nothing}
184
+ </span>
185
+ `;
186
+ }
187
+ }
188
+ __decorate([
189
+ property()
190
+ ], LyraMenuItem.prototype, "value", void 0);
191
+ __decorate([
192
+ property({ type: Boolean, reflect: true })
193
+ ], LyraMenuItem.prototype, "disabled", void 0);
194
+ __decorate([
195
+ property({ type: Boolean, reflect: true })
196
+ ], LyraMenuItem.prototype, "destructive", void 0);
197
+ __decorate([
198
+ property()
199
+ ], LyraMenuItem.prototype, "type", void 0);
200
+ __decorate([
201
+ property({ type: Boolean, reflect: true })
202
+ ], LyraMenuItem.prototype, "checked", void 0);
203
+ __decorate([
204
+ state()
205
+ ], LyraMenuItem.prototype, "hasIconSlot", void 0);
206
+ defineElement('menu-item', LyraMenuItem);
@@ -0,0 +1 @@
1
+ export declare const styles: import("lit").CSSResult;
@@ -0,0 +1,75 @@
1
+ import { css } from 'lit';
2
+ export const styles = css `
3
+ :host {
4
+ display: block;
5
+ /* The host itself is the focusable role="menuitem" target (see the class
6
+ doc) -- the ring paints on [part='base'] instead of the host's own
7
+ box, matching lyra-tree-node's identical :host(:focus-visible)
8
+ delegation, so it always hugs the visible row rather than any
9
+ host-level margin/inline layout quirks. */
10
+ outline: none;
11
+ border-radius: var(--lyra-radius);
12
+ }
13
+ :host(:focus-visible) [part='base'] {
14
+ outline: var(--lyra-focus-ring-width) solid var(--lyra-focus-ring-color);
15
+ outline-offset: calc(-1 * var(--lyra-focus-ring-width));
16
+ }
17
+ [part='base'] {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: var(--lyra-space-xs);
21
+ padding: var(--lyra-space-xs) var(--lyra-space-s);
22
+ border-radius: var(--lyra-radius);
23
+ cursor: pointer;
24
+ font: inherit;
25
+ color: inherit;
26
+ line-height: 1.3;
27
+ }
28
+ [part='base']:hover {
29
+ background: var(--lyra-color-brand-quiet);
30
+ }
31
+ :host([disabled]) [part='base'] {
32
+ /* Shared library-wide disabled-state token -- see lyra-checkbox/lyra-select. */
33
+ opacity: var(--lyra-opacity-disabled);
34
+ cursor: not-allowed;
35
+ }
36
+ :host([disabled]) [part='base']:hover {
37
+ background: none;
38
+ }
39
+ :host([destructive]) [part='base'] {
40
+ color: var(--lyra-color-danger);
41
+ }
42
+ :host([destructive]) [part='base']:hover {
43
+ background: var(--lyra-color-danger-quiet);
44
+ }
45
+ [part='icon'] {
46
+ display: inline-flex;
47
+ flex: 0 0 auto;
48
+ align-items: center;
49
+ justify-content: center;
50
+ line-height: 1;
51
+ }
52
+ /* [part='icon'][hidden] rather than a bare :empty selector -- the part
53
+ always contains a literal <slot> child element regardless of assigned
54
+ content, so :empty never matches (same fix as lyra-select's
55
+ [part='hint']/[part='error']). Real emptiness is tracked in JS
56
+ (hasIconSlot) and reflected via the hidden attribute instead. */
57
+ [part='icon'][hidden] {
58
+ display: none;
59
+ }
60
+ [part='label'] {
61
+ flex: 1 1 auto;
62
+ min-inline-size: 0;
63
+ overflow: hidden;
64
+ text-overflow: ellipsis;
65
+ white-space: nowrap;
66
+ }
67
+ /* Only ever present in the DOM at all for a checked type="checkbox" item
68
+ (see menu-item.ts's render()) -- no [hidden]-toggling needed, unlike
69
+ [part='icon'] above, since there's no always-present <slot> child here
70
+ to keep visually empty in between. */
71
+ [part='checkmark'] {
72
+ flex: 0 0 auto;
73
+ color: var(--lyra-color-brand);
74
+ }
75
+ `;
@@ -0,0 +1,167 @@
1
+ import { type TemplateResult, type PropertyValues } from 'lit';
2
+ import type { Placement } from '@floating-ui/dom';
3
+ import { LyraElement } from '../../internal/lyra-element.js';
4
+ import './menu-item.js';
5
+ export interface MenuSelectDetail {
6
+ value: string;
7
+ }
8
+ /**
9
+ * `<lyra-menu>` — an anchored dropdown of `<lyra-menu-item>` actions, opened
10
+ * from a consumer-supplied trigger (typically an icon button). A close, drop-
11
+ * in-shaped replacement for reaching outside this library for a third-party
12
+ * dropdown to build a gear menu, an avatar menu, or a history row's overflow
13
+ * menu: click the trigger, a positioned menu appears, clicking an item both
14
+ * performs the action *and* closes the menu.
15
+ *
16
+ * **ARIA pattern — `role="menu"`/`role="menuitem"` with real roving DOM
17
+ * focus, not a listbox.** Two coherent, mutually-exclusive shapes were
18
+ * available here: (a) `role="listbox"`/`role="option"` with
19
+ * `aria-activedescendant`, the pattern `<lyra-select>`'s trigger-button +
20
+ * popup listbox uses, where DOM focus never leaves the trigger; or (b)
21
+ * `role="menu"`/`role="menuitem"` with real focus moving between actual
22
+ * focusable rows, the WAI-ARIA "menu button" pattern. This picks (b):
23
+ * `<lyra-menu-item>` rows are real, independently-focusable elements (see
24
+ * that class's own doc), which is the more natural fit for a menu
25
+ * specifically — unlike a listbox's rows, a menu's rows are conventionally
26
+ * button-/link-shaped, and every well-known native/OS menu (and this
27
+ * family's own `<lyra-tree>`/`<lyra-tree-node>` pair, which this component's
28
+ * roving-tabindex plumbing directly mirrors) already moves real focus rather
29
+ * than merely a virtual `aria-activedescendant` pointer. `role`/`tabIndex`
30
+ * are consistently the menu-button shape throughout — never mixed with
31
+ * listbox/option.
32
+ *
33
+ * Interaction contract (mirrors the WAI-ARIA APG "menu button" pattern):
34
+ * - Click the trigger (or Enter/Space on it, via the trigger's own native
35
+ * `click` activation) toggles the menu, moving focus to the first
36
+ * non-disabled item on open.
37
+ * - ArrowDown/ArrowUp on the trigger while closed also open it, focusing the
38
+ * first/last non-disabled item respectively.
39
+ * - Once open, ArrowDown/ArrowUp move the roving focus among non-disabled
40
+ * items (wrapping past either end — the recommended, and more common,
41
+ * menu-widget behavior, unlike `<lyra-select>`'s clamped listbox nav).
42
+ * Home/End jump to the first/last non-disabled item. Enter/Space activate
43
+ * the focused item. Escape closes and returns focus to the trigger. Tab
44
+ * closes the menu without trapping focus (the browser's own default Tab
45
+ * behavior proceeds untouched). A printable keypress runs type-ahead:
46
+ * roving focus jumps to the next non-disabled item whose text starts with
47
+ * the accumulated buffer, cycling from just after the active item (mirrors
48
+ * `<lyra-select>`'s identical listbox type-ahead).
49
+ * - A click outside both the trigger and the open popup closes it (mirrors
50
+ * `<lyra-select>`'s `onDocPointer` exactly) — this does *not* refocus the
51
+ * trigger, since the outside click itself already moved focus somewhere
52
+ * the user chose; Escape and a committed selection *do* refocus the
53
+ * trigger, since those are dismissals with nowhere else for focus to go.
54
+ *
55
+ * The trigger element itself is read from the `trigger` slot's assigned
56
+ * element (first one, if several are assigned) and enhanced imperatively
57
+ * with `aria-haspopup="menu"`/`aria-expanded`/`aria-controls` — the same
58
+ * "reach into a consumer-owned light-DOM element to complete its a11y
59
+ * wiring" approach `<lyra-dialog>` documents for its own heading detection,
60
+ * necessary here because those attributes belong on the actual interactive
61
+ * trigger, which lives outside this component's own shadow root.
62
+ *
63
+ * The popup is always rendered (never `display:none`) so `.focus()` calls on
64
+ * its content work synchronously the instant it opens — visually hidden via
65
+ * `visibility`/`opacity` instead (identical to `<lyra-select>`'s own
66
+ * `[part="listbox"]`). `visibility` is an inherited CSS property that
67
+ * pierces the `<slot>` projection boundary, so every closed-state
68
+ * `<lyra-menu-item>` is automatically excluded from sequential (Tab-key)
69
+ * navigation with no separate JS bookkeeping.
70
+ *
71
+ * @customElement lyra-menu
72
+ * @slot trigger - The consumer's own trigger element (typically an icon
73
+ * button). Clicking it toggles the menu; it's positioned against via
74
+ * `internal/positioner.js`'s `place()`.
75
+ * @slot - `<lyra-menu-item>` elements, plus optionally plain `<hr>` dividers
76
+ * between groups (native `<hr>` already carries an implicit `separator`
77
+ * role, matching what `role="menu"` expects between item groups).
78
+ * @event lyra-show - The menu opened. Not fired for markup that renders
79
+ * `open` true from the start (mirrors `<lyra-select>`'s identical guard).
80
+ * @event lyra-hide - The menu closed. Same first-render guard as `lyra-show`.
81
+ * @event lyra-menu-select - A `<lyra-menu-item>` was activated. `detail: {
82
+ * value }` — the consolidated re-fire of that item's own
83
+ * `lyra-menu-item-select` (see `<lyra-menu-item>`'s doc for why listening
84
+ * here, rather than on every item, is the recommended approach). Always
85
+ * followed by the menu closing and focus returning to the trigger.
86
+ * @csspart trigger - The wrapper around the `trigger` slot (the positioning anchor).
87
+ * @csspart popup - The positioned floating panel.
88
+ * @csspart list - The `role="menu"` container wrapping the default slot.
89
+ */
90
+ export declare class LyraMenu extends LyraElement {
91
+ static styles: import("lit").CSSResultGroup[];
92
+ /** Whether the menu is open. */
93
+ open: boolean;
94
+ /**
95
+ * Optional placement override forwarded to `place()`. Defaults to whatever `place()` itself
96
+ * defaults to. A `left`/`right` side is resolved through `rtlAwareSide` semantics (see
97
+ * `internal/rtl.ts`) so e.g. `placement="left-start"` still anchors to the menu's trailing edge
98
+ * under RTL rather than pinning to the physical left.
99
+ */
100
+ placement?: Placement;
101
+ /** Accessible name for the `role="menu"` popup — override with something
102
+ * specific (e.g. "Row actions") when a page has more than one menu. */
103
+ label: string;
104
+ private items;
105
+ private activeIndex;
106
+ private triggerEl?;
107
+ private cleanup?;
108
+ private itemStateObserver?;
109
+ private _isFirstUpdate;
110
+ private pendingFocus;
111
+ private readonly listId;
112
+ private typeAheadBuffer;
113
+ private typeAheadTimer?;
114
+ protected willUpdate(): void;
115
+ protected updated(changed: PropertyValues): void;
116
+ private reposition;
117
+ disconnectedCallback(): void;
118
+ private show;
119
+ /** `refocusTrigger` is only ever `true` for a dismissal with nowhere else
120
+ * for focus to land (Escape, a committed selection) -- see the class
121
+ * doc's interaction contract for why an outside click deliberately omits it. */
122
+ private hide;
123
+ private onDocPointer;
124
+ private onTriggerClick;
125
+ private onTriggerKeyDown;
126
+ private onTriggerSlotChange;
127
+ /** `aria-haspopup`/`aria-expanded`/`aria-controls` belong on the actual
128
+ * interactive trigger, which is consumer-owned light-DOM content outside
129
+ * this component's own shadow root -- see the class doc. */
130
+ private syncTriggerA11y;
131
+ private onItemsSlotChange;
132
+ private isNavigable;
133
+ /** Rehomes roving focus immediately when an active item becomes disabled or hidden. */
134
+ private onItemStateChange;
135
+ private onItemSelect;
136
+ /** Flips exactly one non-disabled item's `tabIndex` to `0` (the roving
137
+ * target) and every other item's to `-1` -- see `<lyra-menu-item>`'s doc
138
+ * for why this is the sole authority over that property. */
139
+ private applyRovingTabIndex;
140
+ /** Moves the roving focus (and real DOM focus) to the first/last
141
+ * non-disabled item. A no-op when there are none -- focus then simply
142
+ * stays on the trigger (see onTriggerKeyDown's Escape safety net). */
143
+ private focusRoving;
144
+ private setActiveItem;
145
+ /** Resyncs `activeIndex` (and the roving `tabindex`) to wherever real DOM
146
+ * focus actually lands, for any path that doesn't go through
147
+ * `setActiveItem()` -- e.g. a real mousedown on an item, which focuses it
148
+ * even while `disabled` (`tabIndex="-1"` remains mouse-focusable per
149
+ * spec). Without this, `activeIndex` goes stale the moment focus moves any
150
+ * other way, and subsequent Arrow-key navigation computes its next item
151
+ * from that stale position instead of from where focus actually is. A
152
+ * no-op for `setActiveItem()`'s own `.focus()` call, since `activeIndex`
153
+ * there is already set to match before focus moves. */
154
+ private onListFocusIn;
155
+ private onListKeyDown;
156
+ /** Standard WAI-ARIA APG menu-button type-ahead: moves the roving focus to
157
+ * the next non-disabled item whose text content starts with the
158
+ * accumulated buffer, cycling from just after the currently active item
159
+ * -- mirrors `<lyra-select>`'s identical listbox type-ahead. */
160
+ private typeAhead;
161
+ render(): TemplateResult;
162
+ }
163
+ declare global {
164
+ interface HTMLElementTagNameMap {
165
+ 'lyra-menu': LyraMenu;
166
+ }
167
+ }