@slotted/angular 0.0.0-stage → 0.1.0-beta.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 (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,1211 @@
1
+ import { createDismissableLayer } from '@slotted/core/dismissable-layer';
2
+ import { createArrowNavigation, tabbables } from '@slotted/core/focus';
3
+ import { createPortalRoot } from '@slotted/core/portal';
4
+ import { submenuOffsets, createPositioner } from '@slotted/core/positioner';
5
+ import { createPresence } from '@slotted/core/presence';
6
+ import { createControllable } from '@slotted/core/state';
7
+ import { createTypeahead, isPrintable } from '@slotted/core/typeahead';
8
+ import * as i0 from '@angular/core';
9
+ import { InjectionToken, inject, input, signal, computed, model, output, numberAttribute, booleanAttribute, ViewContainerRef, viewChild, DestroyRef, effect, untracked, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, ElementRef, HostAttributeToken, Directive } from '@angular/core';
10
+ import { createPointerIntent } from '@slotted/core/pointer-intent';
11
+ import { keysMessages } from '@slotted/core/i18n';
12
+ import { parseShortcut, canonicalKey, resolveShortcut, resolvePlatform } from '@slotted/core/keys';
13
+ import { injectMessages } from '@slotted/angular/i18n';
14
+ import { SlGlyph, SlIcon } from '@slotted/angular/icon';
15
+
16
+ /**
17
+ * The numbers, and why they are these numbers: `side` and `align` hang the
18
+ * surface under the start edge of its own control, where the control's text and
19
+ * the items' labels share one edge; `submenuOpenDelay` is short enough that a
20
+ * deliberate hover is answered and long enough that a pointer crossing three
21
+ * items opens none of them; `hideWhenDetached` is `true` where `popover`'s is
22
+ * `false`, because a menu whose control has scrolled away commands nothing.
23
+ */
24
+ const FALLBACK = {
25
+ align: 'start',
26
+ alignOffset: 0,
27
+ closeOnEscape: true,
28
+ closeOnOutsidePress: true,
29
+ closeOnSelect: true,
30
+ collisionPadding: 8,
31
+ disabled: false,
32
+ flip: true,
33
+ hideWhenDetached: true,
34
+ loop: true,
35
+ mount: 'active',
36
+ openOnHover: true,
37
+ portal: true,
38
+ shift: true,
39
+ side: 'bottom',
40
+ sideOffset: 0,
41
+ size: 'md',
42
+ strategy: 'absolute',
43
+ submenuCloseDelay: 300,
44
+ submenuOpenDelay: 150,
45
+ typeahead: true,
46
+ typeaheadTimeout: 500,
47
+ };
48
+ const MENU_DEFAULTS = new InjectionToken('slotted menu defaults', {
49
+ providedIn: 'root',
50
+ factory: () => FALLBACK,
51
+ });
52
+ /**
53
+ * An application decides once how its menus open, where they hang and how long
54
+ * a submenu waits. A menu that states any of them itself still wins.
55
+ */
56
+ function provideMenuDefaults(defaults) {
57
+ return {
58
+ provide: MENU_DEFAULTS,
59
+ useFactory: () => ({ ...FALLBACK, ...defaults }),
60
+ };
61
+ }
62
+ /** What a menu renders as here, before it states anything of its own. */
63
+ function injectMenuDefaults() {
64
+ return inject(MENU_DEFAULTS);
65
+ }
66
+
67
+ const MENUBAR_SURFACE = new InjectionToken('slotted menubar surface');
68
+
69
+ /** Every item of a surface, in the order the document holds them. */
70
+ const MENU_ITEM_SELECTOR = "[data-part='item']";
71
+ const textOf = (item) => item.dataset['textValue'] ??
72
+ item.querySelector("[data-part='label']")?.textContent?.trim() ??
73
+ item.textContent?.trim() ??
74
+ '';
75
+ const enabled = (item) => item.dataset['disabled'] === undefined;
76
+ /**
77
+ * Focus without the browser's own scroll, which reveals an item by scrolling
78
+ * the page as well as the surface and centres it in the window, carrying the
79
+ * layer off its trigger. The surface scrolls inside the room the positioner
80
+ * gives it, so the item is brought into the surface and nothing further.
81
+ */
82
+ const reveal = (item) => {
83
+ item.focus({ preventScroll: true });
84
+ const surface = item.closest("[data-part='content']");
85
+ if (surface === null)
86
+ return;
87
+ const box = surface.getBoundingClientRect();
88
+ const own = item.getBoundingClientRect();
89
+ if (own.top < box.top)
90
+ surface.scrollTop -= box.top - own.top;
91
+ else if (own.bottom > box.bottom)
92
+ surface.scrollTop += own.bottom - box.bottom;
93
+ };
94
+ /**
95
+ * A list of commands on a layer.
96
+ *
97
+ * The component renders **nothing where it is written**: its content lives in a
98
+ * template, and the layer is built into the portal when the menu opens. Angular
99
+ * Material's menu is built the same way and for the same reason — a surface
100
+ * that has to escape its parent's clipping cannot be rendered where it was
101
+ * declared.
102
+ *
103
+ * Where it sits decides what it is. On its own it hangs from the control that
104
+ * carries `slMenuTrigger`. Inside another menu it is a submenu, and its trigger
105
+ * becomes an item of the surface above. Inside `sl-menubar` it is one of the
106
+ * bar's menus, and the bar holds which one is open — a bar has at most one, and
107
+ * a boolean on each could represent two.
108
+ */
109
+ class SlMenu {
110
+ /** The name this menu answers to on a bar. */
111
+ value = input(undefined, /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
113
+ /** The accessible name, for a menu opened from a control with no words. */
114
+ ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
115
+ /** The ids of what describes the menu, written on the element that carries `role="menu"`. */
116
+ ariaDescribedBy = input(undefined, { ...(ngDevMode ? { debugName: "ariaDescribedBy" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
117
+ /** Written by `slMenuHeader`: the block the surface is described by. */
118
+ headerId = signal(null, /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "headerId" }] : /* istanbul ignore next */ []));
120
+ /** The consumer's description and the header's, joined. */
121
+ describedBy = computed(() => [this.ariaDescribedBy(), this.headerId()].filter(Boolean).join(' ') || null, /* @ts-ignore */
122
+ ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
123
+ open = model(false, /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
125
+ /** One output for one transition, carrying the reason and the event. */
126
+ openChangeRequest = output();
127
+ align = input(undefined, /* @ts-ignore */
128
+ ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
129
+ side = input(undefined, /* @ts-ignore */
130
+ ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
131
+ size = input(undefined, /* @ts-ignore */
132
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
133
+ mount = input(undefined, /* @ts-ignore */
134
+ ...(ngDevMode ? [{ debugName: "mount" }] : /* istanbul ignore next */ []));
135
+ strategy = input(undefined, /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "strategy" }] : /* istanbul ignore next */ []));
137
+ sideOffset = input(undefined, { ...(ngDevMode ? { debugName: "sideOffset" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
138
+ alignOffset = input(undefined, { ...(ngDevMode ? { debugName: "alignOffset" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
139
+ collisionPadding = input(undefined, { ...(ngDevMode ? { debugName: "collisionPadding" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
140
+ submenuOpenDelay = input(undefined, { ...(ngDevMode ? { debugName: "submenuOpenDelay" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
141
+ submenuCloseDelay = input(undefined, { ...(ngDevMode ? { debugName: "submenuCloseDelay" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
142
+ typeaheadTimeout = input(undefined, { ...(ngDevMode ? { debugName: "typeaheadTimeout" } : /* istanbul ignore next */ {}), transform: (given) => (given === undefined ? undefined : numberAttribute(given)) });
143
+ static flag = (given) => given === undefined ? undefined : booleanAttribute(given);
144
+ disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
145
+ loop = input(undefined, { ...(ngDevMode ? { debugName: "loop" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
146
+ typeahead = input(undefined, { ...(ngDevMode ? { debugName: "typeahead" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
147
+ openOnHover = input(undefined, { ...(ngDevMode ? { debugName: "openOnHover" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
148
+ closeOnSelect = input(undefined, { ...(ngDevMode ? { debugName: "closeOnSelect" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
149
+ closeOnEscape = input(undefined, { ...(ngDevMode ? { debugName: "closeOnEscape" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
150
+ closeOnOutsidePress = input(undefined, { ...(ngDevMode ? { debugName: "closeOnOutsidePress" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
151
+ flip = input(undefined, { ...(ngDevMode ? { debugName: "flip" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
152
+ shift = input(undefined, { ...(ngDevMode ? { debugName: "shift" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
153
+ hideWhenDetached = input(undefined, { ...(ngDevMode ? { debugName: "hideWhenDetached" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
154
+ portal = input(undefined, { ...(ngDevMode ? { debugName: "portal" } : /* istanbul ignore next */ {}), transform: SlMenu.flag });
155
+ /**
156
+ * The surface is waiting for its items. It keeps its measure, says so with
157
+ * `aria-busy`, and shows whatever the consumer put in `slMenuEmpty`.
158
+ */
159
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
160
+ defaults = injectMenuDefaults();
161
+ viewContainer = inject(ViewContainerRef);
162
+ template = viewChild.required('layer', /* @ts-ignore */
163
+ ...(ngDevMode ? [{ debugName: "template" }] : /* istanbul ignore next */ []));
164
+ /** The surface above this one, when this menu is a submenu of it. */
165
+ parent = inject(SlMenu, { optional: true, skipSelf: true });
166
+ /** The bar in scope. A submenu of a bar's menu still sees it. */
167
+ bar = inject(MENUBAR_SURFACE, { optional: true });
168
+ /** Whether this menu is one of the bar's own rather than nested in one. */
169
+ onBar = this.parent === null && this.bar !== null;
170
+ identifier = Math.random().toString(36).slice(2, 8);
171
+ contentId = `sl-menu-${this.identifier}`;
172
+ triggerId = `sl-menu-trigger-${this.identifier}`;
173
+ /** The control that opens this menu, given by `slMenuTrigger`. */
174
+ trigger = signal(null, /* @ts-ignore */
175
+ ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
176
+ /**
177
+ * What the layer is positioned against when it is not the trigger: a row the
178
+ * menu hangs from, or the point a context menu was opened at, which
179
+ * `slContextMenuTriggerFor` writes here. Positioning only — the trigger stays
180
+ * the portal origin, the branch of the layer and the element focus returns
181
+ * to. Written by a directive, as `trigger` is, rather than bound in a
182
+ * template.
183
+ */
184
+ anchor = signal(null, /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []));
186
+ /**
187
+ * Where focus lands when the surface closes, for a trigger that is gone by
188
+ * then or one that never held focus — a context menu's target. `null` means
189
+ * the trigger.
190
+ */
191
+ finalFocus = signal(null, /* @ts-ignore */
192
+ ...(ngDevMode ? [{ debugName: "finalFocus" }] : /* istanbul ignore next */ []));
193
+ /** Where focus lands when the surface opens. */
194
+ entry = { current: 'first' };
195
+ view = null;
196
+ layerNode = null;
197
+ surfaceNode = null;
198
+ portalRoot = null;
199
+ positioner = null;
200
+ layer = null;
201
+ navigation = null;
202
+ presence = null;
203
+ typeaheadHandle = null;
204
+ name = computed(() => this.value() ?? this.contentId, /* @ts-ignore */
205
+ ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
206
+ resolvedAlign = computed(() => this.align() ?? (this.parent === null ? this.defaults.align : 'start'), /* @ts-ignore */
207
+ ...(ngDevMode ? [{ debugName: "resolvedAlign" }] : /* istanbul ignore next */ []));
208
+ resolvedSide = computed(() => {
209
+ if (this.side() !== undefined)
210
+ return this.side();
211
+ if (this.parent !== null)
212
+ return 'inline-end';
213
+ if (this.onBar && this.bar?.orientation() === 'vertical')
214
+ return 'inline-end';
215
+ return this.defaults.side;
216
+ }, /* @ts-ignore */
217
+ ...(ngDevMode ? [{ debugName: "resolvedSide" }] : /* istanbul ignore next */ []));
218
+ resolvedSize = computed(() => this.size() ?? (this.onBar ? this.bar?.size() : undefined) ?? this.defaults.size, /* @ts-ignore */
219
+ ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
220
+ resolvedDisabled = computed(() => (this.disabled() ?? this.defaults.disabled) ||
221
+ (this.onBar && (this.bar?.disabled() ?? false)), /* @ts-ignore */
222
+ ...(ngDevMode ? [{ debugName: "resolvedDisabled" }] : /* istanbul ignore next */ []));
223
+ resolvedLoop = computed(() => this.loop() ?? this.defaults.loop, /* @ts-ignore */
224
+ ...(ngDevMode ? [{ debugName: "resolvedLoop" }] : /* istanbul ignore next */ []));
225
+ resolvedTypeahead = computed(() => this.typeahead() ?? this.defaults.typeahead, /* @ts-ignore */
226
+ ...(ngDevMode ? [{ debugName: "resolvedTypeahead" }] : /* istanbul ignore next */ []));
227
+ resolvedOpenOnHover = computed(() => this.openOnHover() ?? this.defaults.openOnHover, /* @ts-ignore */
228
+ ...(ngDevMode ? [{ debugName: "resolvedOpenOnHover" }] : /* istanbul ignore next */ []));
229
+ resolvedCloseOnSelect = computed(() => this.closeOnSelect() ?? this.defaults.closeOnSelect, /* @ts-ignore */
230
+ ...(ngDevMode ? [{ debugName: "resolvedCloseOnSelect" }] : /* istanbul ignore next */ []));
231
+ resolvedSubmenuOpenDelay = computed(() => this.submenuOpenDelay() ?? this.defaults.submenuOpenDelay, /* @ts-ignore */
232
+ ...(ngDevMode ? [{ debugName: "resolvedSubmenuOpenDelay" }] : /* istanbul ignore next */ []));
233
+ resolvedSubmenuCloseDelay = computed(() => this.submenuCloseDelay() ?? this.defaults.submenuCloseDelay, /* @ts-ignore */
234
+ ...(ngDevMode ? [{ debugName: "resolvedSubmenuCloseDelay" }] : /* istanbul ignore next */ []));
235
+ /**
236
+ * A menu on a bar reads its own state from the bar, so the two models compose
237
+ * rather than compete: the bar holds the identity of the open menu, and this
238
+ * menu is open when that identity is its own.
239
+ */
240
+ isOpen = computed(() => {
241
+ const held = this.onBar ? this.bar?.value() === this.name() : this.open();
242
+ return held && !this.resolvedDisabled();
243
+ }, /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
245
+ constructor() {
246
+ const destroyRef = inject(DestroyRef);
247
+ effect(() => {
248
+ const open = this.isOpen();
249
+ untracked(() => (open ? this.show() : this.hide()));
250
+ });
251
+ /* A context menu opened again at a new point moves rather than closing and
252
+ reopening: the anchor changed while the surface is open, so it is
253
+ measured again. */
254
+ effect(() => {
255
+ this.anchor();
256
+ untracked(() => {
257
+ if (this.isOpen())
258
+ this.position();
259
+ });
260
+ });
261
+ afterNextRender(() => {
262
+ if (this.resolvedMount() === 'eager' && !this.isOpen())
263
+ this.build();
264
+ });
265
+ destroyRef.onDestroy(() => this.teardown());
266
+ }
267
+ /** The painted surface, once it exists. The grace area is measured off it. */
268
+ surface() {
269
+ return this.surfaceNode;
270
+ }
271
+ /** Asks to open or close, and reports the reason before anything moves. */
272
+ toggle(next, reason, source) {
273
+ if (next === this.isOpen())
274
+ return;
275
+ let cancelled = false;
276
+ const state = createControllable({
277
+ initial: this.isOpen(),
278
+ onRequest: (request) => {
279
+ this.openChangeRequest.emit(request);
280
+ cancelled = request.cancelled;
281
+ },
282
+ });
283
+ const moved = state.request(next, reason, source);
284
+ if (cancelled)
285
+ return;
286
+ if (this.onBar && this.bar !== null) {
287
+ if (next)
288
+ this.bar.open(this.name(), reason, source);
289
+ else
290
+ this.bar.close(reason, source);
291
+ }
292
+ else if (moved) {
293
+ this.open.set(next);
294
+ }
295
+ /* Focus goes back to whatever opened the surface, unless the reader pressed
296
+ somewhere else — taking it back then would fight them. */
297
+ if (!next && reason !== 'outsidePress' && reason !== 'programmatic') {
298
+ (this.finalFocus() ?? this.trigger())?.focus({ preventScroll: true });
299
+ }
300
+ }
301
+ /** Closes this surface and every surface above it. */
302
+ closeAll(reason, source) {
303
+ this.toggle(false, reason, source);
304
+ this.parent?.closeAll(reason, source);
305
+ if (!this.onBar)
306
+ this.bar?.close(reason, source);
307
+ }
308
+ /** Moves focus onto an item of this surface. */
309
+ focusItem(index) {
310
+ const list = this.items();
311
+ const item = list[index < 0 ? list.length + index : index];
312
+ if (item !== undefined)
313
+ reveal(item);
314
+ }
315
+ items() {
316
+ return [...(this.surfaceNode?.querySelectorAll(MENU_ITEM_SELECTOR) ?? [])];
317
+ }
318
+ resolvedMount = computed(() => this.mount() ?? this.defaults.mount, /* @ts-ignore */
319
+ ...(ngDevMode ? [{ debugName: "resolvedMount" }] : /* istanbul ignore next */ []));
320
+ show() {
321
+ this.build();
322
+ this.position();
323
+ this.bind();
324
+ this.enter();
325
+ }
326
+ /**
327
+ * The layer, built once. `active` drops it again when the menu closes,
328
+ * `lazy` keeps it from the first open and `eager` builds it up front — the
329
+ * same axis `tooltip`, `popover` and `collapsible` declare. A layer kept
330
+ * while closed carries `inert`, so its items are in neither the tab order
331
+ * nor the accessibility tree.
332
+ */
333
+ build() {
334
+ if (this.view !== null) {
335
+ this.presence?.sync(this.isOpen());
336
+ return;
337
+ }
338
+ this.portalRoot = createPortalRoot({
339
+ origin: this.trigger(),
340
+ disabled: this.portal() === false,
341
+ });
342
+ this.view = this.viewContainer.createEmbeddedView(this.template());
343
+ this.view.detectChanges();
344
+ this.layerNode = this.view.rootNodes.find((node) => node instanceof HTMLElement);
345
+ this.surfaceNode = this.layerNode?.querySelector("[data-part='content']") ?? null;
346
+ if (this.layerNode === null || this.surfaceNode === null)
347
+ return;
348
+ this.portalRoot.container?.append(this.layerNode);
349
+ this.presence = createPresence({ present: this.isOpen() });
350
+ this.presence.setNode(this.layerNode);
351
+ }
352
+ position() {
353
+ if (this.layerNode === null)
354
+ return;
355
+ const trigger = this.trigger();
356
+ const anchor = this.anchor() ?? trigger;
357
+ if (anchor === null)
358
+ return;
359
+ /* A submenu is anchored to its item and placed from the parent's edge: the
360
+ parent surface's inset is added along the side, and the submenu's own
361
+ inset above its first item is taken off along the alignment, so the
362
+ first item lines up with the item that opened it (M2). */
363
+ const submenu = this.parent !== null && this.surfaceNode !== null && trigger !== null
364
+ ? submenuOffsets({
365
+ parentSurface: this.parent.surface(),
366
+ item: trigger,
367
+ surface: this.surfaceNode,
368
+ })
369
+ : { sideOffset: 0, alignOffset: 0 };
370
+ this.positioner?.destroy();
371
+ this.positioner = createPositioner(anchor, this.layerNode, {
372
+ align: this.resolvedAlign(),
373
+ alignOffset: (this.alignOffset() ?? this.defaults.alignOffset) + submenu.alignOffset,
374
+ boundaryPadding: this.collisionPadding() ?? this.defaults.collisionPadding,
375
+ flip: this.flip() ?? this.defaults.flip,
376
+ hideWhenDetached: this.hideWhenDetached() ?? this.defaults.hideWhenDetached,
377
+ shift: this.shift() ?? this.defaults.shift,
378
+ side: this.resolvedSide(),
379
+ sideOffset: (this.sideOffset() ?? this.defaults.sideOffset) + submenu.sideOffset,
380
+ strategy: this.strategy() ?? this.defaults.strategy,
381
+ });
382
+ void this.positioner.update();
383
+ }
384
+ bind() {
385
+ if (this.layerNode === null || this.surfaceNode === null)
386
+ return;
387
+ const branches = [this.trigger(), this.parent?.surface() ?? null].filter((branch) => branch !== null);
388
+ this.layer = createDismissableLayer(this.layerNode, {
389
+ branches,
390
+ escape: this.closeOnEscape() ?? this.defaults.closeOnEscape,
391
+ focusOutside: false,
392
+ modal: false,
393
+ outsidePress: this.closeOnOutsidePress() ?? this.defaults.closeOnOutsidePress,
394
+ scrollLock: false,
395
+ onDismiss: (request) => {
396
+ const reason = request.reason === 'escape' ? 'escape' : 'outsidePress';
397
+ this.toggle(false, reason, request.source);
398
+ if (reason === 'outsidePress')
399
+ this.parent?.closeAll(reason, request.source);
400
+ },
401
+ });
402
+ this.navigation = createArrowNavigation(this.surfaceNode, {
403
+ focus: reveal,
404
+ includeAriaDisabled: true,
405
+ itemSelector: MENU_ITEM_SELECTOR,
406
+ loop: () => this.resolvedLoop(),
407
+ orientation: () => 'vertical',
408
+ });
409
+ if (this.resolvedTypeahead()) {
410
+ this.typeaheadHandle = createTypeahead({
411
+ timeout: this.typeaheadTimeout() ?? this.defaults.typeaheadTimeout,
412
+ });
413
+ }
414
+ }
415
+ /** Focus enters the surface as it opens, and the pattern says which item. */
416
+ enter() {
417
+ const bar = this.onBar ? this.bar : null;
418
+ const entry = bar === null ? this.entry.current : bar.entry.current;
419
+ this.entry.current = 'first';
420
+ if (bar !== null)
421
+ bar.entry.current = 'first';
422
+ if (entry === 'trigger')
423
+ return;
424
+ const list = this.items();
425
+ const ordered = entry === 'first' ? list : [...list].reverse();
426
+ const item = ordered.find(enabled) ?? ordered[0];
427
+ if (item !== undefined)
428
+ reveal(item);
429
+ }
430
+ hide() {
431
+ this.unbind();
432
+ if (this.resolvedMount() === 'active')
433
+ this.teardown();
434
+ }
435
+ /** The listeners a closed surface has no use for. */
436
+ unbind() {
437
+ this.navigation?.destroy();
438
+ this.layer?.destroy();
439
+ this.positioner?.destroy();
440
+ this.typeaheadHandle?.destroy();
441
+ this.navigation = null;
442
+ this.layer = null;
443
+ this.positioner = null;
444
+ this.typeaheadHandle = null;
445
+ }
446
+ teardown() {
447
+ this.navigation?.destroy();
448
+ this.layer?.destroy();
449
+ this.positioner?.destroy();
450
+ this.presence?.destroy();
451
+ this.typeaheadHandle?.destroy();
452
+ this.portalRoot?.release();
453
+ this.layerNode?.remove();
454
+ this.view?.destroy();
455
+ this.navigation = null;
456
+ this.layer = null;
457
+ this.positioner = null;
458
+ this.presence = null;
459
+ this.typeaheadHandle = null;
460
+ this.portalRoot = null;
461
+ this.layerNode = null;
462
+ this.surfaceNode = null;
463
+ this.view = null;
464
+ }
465
+ onKeyDown(event) {
466
+ const direction = this.surfaceNode !== null && getComputedStyle(this.surfaceNode).direction === 'rtl'
467
+ ? 'rtl'
468
+ : 'ltr';
469
+ const inlineStart = direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft';
470
+ const inlineEnd = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
471
+ if (event.key === 'Tab') {
472
+ event.preventDefault();
473
+ const root = this.rootTrigger();
474
+ this.closeAll('dismiss', event);
475
+ this.moveOut(root, event.shiftKey ? -1 : 1);
476
+ return;
477
+ }
478
+ if (event.key === inlineStart) {
479
+ if (this.parent !== null) {
480
+ event.preventDefault();
481
+ this.toggle(false, 'keyboard', event);
482
+ return;
483
+ }
484
+ if (this.bar !== null) {
485
+ event.preventDefault();
486
+ this.bar.step(-1, { open: true });
487
+ return;
488
+ }
489
+ }
490
+ /* An item that opens a submenu answers the inline end itself and stops the
491
+ key there, so reaching this point means the item has none. */
492
+ if (event.key === inlineEnd && this.bar !== null) {
493
+ event.preventDefault();
494
+ this.closeAll('keyboard', event);
495
+ this.bar.step(1, { open: true });
496
+ return;
497
+ }
498
+ const handle = this.typeaheadHandle;
499
+ if (handle === null)
500
+ return;
501
+ if (event.ctrlKey || event.metaKey || event.altKey)
502
+ return;
503
+ if (!isPrintable(event.key, handle.query.length > 0))
504
+ return;
505
+ event.preventDefault();
506
+ const list = this.items();
507
+ const from = list.findIndex((item) => item === event.target);
508
+ const index = handle.match(event.key, list.map(textOf), from);
509
+ if (index !== -1)
510
+ this.focusItem(index);
511
+ }
512
+ /** The control that opened the outermost surface of this stack. */
513
+ rootTrigger() {
514
+ return this.parent === null ? this.trigger() : this.parent.rootTriggerOf();
515
+ }
516
+ rootTriggerOf() {
517
+ return this.rootTrigger();
518
+ }
519
+ /**
520
+ * Where `Tab` goes once every menu has closed: on down the page from the
521
+ * control that opened the outermost surface. The pattern binds the key and
522
+ * says no more, and a layer portalled to the end of the document has no next
523
+ * element a reader would recognise.
524
+ */
525
+ moveOut(trigger, step) {
526
+ if (trigger === null)
527
+ return;
528
+ const order = tabbables(trigger.ownerDocument.body);
529
+ const index = order.indexOf(trigger);
530
+ if (index === -1) {
531
+ trigger.focus({ preventScroll: true });
532
+ return;
533
+ }
534
+ (order[index + step] ?? trigger).focus({ preventScroll: true });
535
+ }
536
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenu, deps: [], target: i0.ɵɵFactoryTarget.Component });
537
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.7", type: SlMenu, isStandalone: true, selector: "sl-menu", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedBy: { classPropertyName: "ariaDescribedBy", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, mount: { classPropertyName: "mount", publicName: "mount", isSignal: true, isRequired: false, transformFunction: null }, strategy: { classPropertyName: "strategy", publicName: "strategy", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, collisionPadding: { classPropertyName: "collisionPadding", publicName: "collisionPadding", isSignal: true, isRequired: false, transformFunction: null }, submenuOpenDelay: { classPropertyName: "submenuOpenDelay", publicName: "submenuOpenDelay", isSignal: true, isRequired: false, transformFunction: null }, submenuCloseDelay: { classPropertyName: "submenuCloseDelay", publicName: "submenuCloseDelay", isSignal: true, isRequired: false, transformFunction: null }, typeaheadTimeout: { classPropertyName: "typeaheadTimeout", publicName: "typeaheadTimeout", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, typeahead: { classPropertyName: "typeahead", publicName: "typeahead", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: "openOnHover", publicName: "openOnHover", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, closeOnEscape: { classPropertyName: "closeOnEscape", publicName: "closeOnEscape", isSignal: true, isRequired: false, transformFunction: null }, closeOnOutsidePress: { classPropertyName: "closeOnOutsidePress", publicName: "closeOnOutsidePress", isSignal: true, isRequired: false, transformFunction: null }, flip: { classPropertyName: "flip", publicName: "flip", isSignal: true, isRequired: false, transformFunction: null }, shift: { classPropertyName: "shift", publicName: "shift", isSignal: true, isRequired: false, transformFunction: null }, hideWhenDetached: { classPropertyName: "hideWhenDetached", publicName: "hideWhenDetached", isSignal: true, isRequired: false, transformFunction: null }, portal: { classPropertyName: "portal", publicName: "portal", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", openChangeRequest: "openChangeRequest" }, host: { styleAttribute: "display: none" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["layer"], descendants: true, isSignal: true }], exportAs: ["slMenu"], ngImport: i0, template: `
538
+ <ng-template #layer>
539
+ <div
540
+ data-ui="menu"
541
+ data-part="root"
542
+ [attr.data-align]="resolvedAlign()"
543
+ [attr.data-size]="resolvedSize()"
544
+ [attr.data-open]="isOpen() ? '' : null"
545
+ [attr.inert]="isOpen() ? null : ''"
546
+ >
547
+ <div
548
+ #surface
549
+ data-part="content"
550
+ role="menu"
551
+ tabindex="-1"
552
+ [id]="contentId"
553
+ [attr.aria-labelledby]="ariaLabel() === undefined ? triggerId : null"
554
+ [attr.aria-label]="ariaLabel() ?? null"
555
+ [attr.aria-describedby]="describedBy()"
556
+ [attr.aria-busy]="loading() ? true : null"
557
+ [attr.data-loading]="loading() ? '' : null"
558
+ (keydown)="onKeyDown($event)"
559
+ >
560
+ <ng-content />
561
+ </div>
562
+ </div>
563
+ </ng-template>
564
+ `, isInline: true, styles: ["@layer slotted.components{[data-ui=menu]{--_gap: var(--slotted-menu-gap, var(--slotted-space-2, .25rem));--_surface: var(--slotted-menu-surface, var(--slotted-surface-raised, #ffffff));--_text: var(--slotted-menu-text, var(--slotted-text, #0f172a));--_muted: var(--slotted-menu-text-muted, var(--slotted-text-muted, #5b6b7f));--_border-color: var(--slotted-menu-border-color, var(--slotted-border-subtle, #e2e8f0));--_border-width: var(--slotted-border-width-thin, 1px);--_radius: var(--slotted-menu-radius, var(--slotted-radius-lg, 8px));--_shadow: var(--slotted-menu-shadow, var(--slotted-shadow-md));--_highlight: var(--slotted-menu-highlight, var(--slotted-tone-secondary-subtle-hover));--_highlight-active: var( --slotted-menu-highlight-active, var(--slotted-tone-secondary-subtle-active) );--_accent: var(--_text);--_inset-block: var(--slotted-menu-padding-block, var(--slotted-space-2, .25rem));--_inset-inline: var(--slotted-menu-padding-inline, var(--slotted-space-2, .25rem));--_item-padding: var(--slotted-control-padding-inline-md, .8125rem);--_item-inset: calc(var(--_item-padding) - var(--_inset-inline));--_item-height: var(--slotted-control-height-md, 34px);--_item-radius: var(--slotted-menu-item-radius, var(--slotted-control-radius));--_font-size: var(--slotted-control-font-size-md, 13px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_column-gap: var(--slotted-control-gap-md, .5rem);--_leading: round(up, calc(var(--_font-size) * var(--slotted-line-height-md, 1.5)), 1px);--_secondary-leading: round( up, calc(var(--_secondary-font-size) * var(--slotted-line-height-sm, 1.45)), 1px );--_measure: var(--slotted-menu-measure, 16rem);--_min-measure: min( var(--slotted-menu-min-measure, 12rem), var(--slotted-positioner-available-width, 100vw) );position:absolute;inset-block-start:0;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));isolation:isolate;box-sizing:border-box;inline-size:max-content;max-inline-size:min(var(--_measure),var(--slotted-positioner-available-width, 100vw));min-inline-size:var(--_min-measure);padding-block:var(--_gap);padding-inline:0;pointer-events:none;opacity:0;--_enter-distance: var(--slotted-space-2, .25rem);translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=menu][data-side=right]{translate:calc(-1 * var(--_enter-distance)) 0}[data-ui=menu][data-side=left]{translate:var(--_enter-distance) 0}[data-ui=menu]:is([data-side=left],[data-side=right]){padding-block:0;padding-inline:var(--_gap)}[data-ui=menu][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=menu][data-open][data-positioned]{animation:slotted-menu-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=menu][data-open][data-positioned][data-side=top]{animation-name:slotted-menu-enter-up}[data-ui=menu][data-open][data-positioned][data-side=right]{animation-name:slotted-menu-enter-from-start}[data-ui=menu][data-open][data-positioned][data-side=left]{animation-name:slotted-menu-enter-from-end}@keyframes slotted-menu-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-menu-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-menu-enter-from-start{0%{opacity:0;translate:calc(-1 * var(--_enter-distance)) 0}}@keyframes slotted-menu-enter-from-end{0%{opacity:0;translate:var(--_enter-distance) 0}}@keyframes slotted-menu-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=menu],[data-ui=menu][data-side=top],[data-ui=menu][data-side=left],[data-ui=menu][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu][data-open][data-positioned],[data-ui=menu][data-open][data-positioned][data-side=top],[data-ui=menu][data-open][data-positioned][data-side=left],[data-ui=menu][data-open][data-positioned][data-side=right]{animation-name:slotted-menu-fade}}[data-ui=menu][data-detached]{visibility:hidden}[data-ui=menu][data-size=sm]{--_item-padding: var(--slotted-control-padding-inline-sm, .625rem);--_item-height: var(--slotted-control-height-sm, 30px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_secondary-font-size: var(--slotted-font-size-xs, .75rem);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_column-gap: var(--slotted-control-gap-sm, .375rem);--_measure: var(--slotted-menu-measure-sm, 14rem)}[data-ui=menu][data-size=lg]{--_item-padding: var(--slotted-control-padding-inline-lg, 1rem);--_item-height: var(--slotted-control-height-lg, 38px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_column-gap: var(--slotted-control-gap-lg, .5rem);--_measure: var(--slotted-menu-measure-lg, 20rem)}[data-ui=menu]>[data-part=content]{background:var(--_surface);border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);box-shadow:var(--_shadow);box-sizing:border-box;color:var(--_text);display:grid;font-family:var(--slotted-font-family-sans);font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr) auto auto;max-block-size:calc(var(--slotted-positioner-available-height, 100vh) - 2 * var(--_gap));outline:none;overflow-y:auto;overscroll-behavior:contain;padding-block:var(--_inset-block);padding-inline:var(--_inset-inline);pointer-events:auto}[data-ui=menu]>[data-part=content]:focus-visible{outline:none}[data-ui=menu] [data-part=group]{display:grid;grid-column:1 / -1;grid-template-columns:subgrid}[data-ui=menu] [data-part=group-label]{color:var(--_muted);font-size:var(--_secondary-font-size);font-weight:var(--slotted-font-weight-semibold, 600);grid-column:1 / -1;line-height:var(--_secondary-leading);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset)}[data-ui=menu] [data-part=header]{align-items:center;column-gap:var(--slotted-space-5, .75rem);display:grid;grid-column:1 / -1;grid-template-columns:auto minmax(0,1fr);line-height:var(--_leading);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset)}[data-ui=menu] [data-part=header]>:not([data-part=label],[data-part=description]){grid-column:1;grid-row:1 / span 2}[data-ui=menu] [data-part=header]>[data-part=label]{font-weight:var(--slotted-font-weight-semibold, 600)}[data-ui=menu] [data-part=item]{appearance:none;background:transparent;border:0;border-radius:var(--_item-radius);box-sizing:border-box;color:inherit;cursor:pointer;display:grid;font:inherit;grid-column:1 / -1;grid-template-columns:subgrid;align-content:center;line-height:var(--_leading);min-block-size:var(--_item-height);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset);row-gap:var(--slotted-space-1, .125rem);text-align:start;text-decoration:none;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=menu] [data-part=item]:focus{background-color:var(--_highlight);color:var(--_accent)}[data-ui=menu] [data-part=item]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, currentColor);outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=menu] [data-part=item]:not([data-disabled]):active{background-color:var(--_highlight-active)}[data-ui=menu] [data-part=item][data-open]{background-color:var(--_highlight)}[data-ui=menu] [data-part=item][data-disabled]{color:var(--slotted-disabled-foreground, #64748b);cursor:not-allowed}[data-ui=menu] [data-part=item][data-disabled]:focus{background-color:var(--_highlight);color:var(--slotted-disabled-foreground, #64748b)}[data-ui=menu] :is([data-part=indicator],[data-part=icon]),[data-ui=menu] [data-part=item][aria-haspopup=menu]>[data-ui=icon]{block-size:1lh}[data-ui=menu] [data-part=indicator]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-content:center;justify-self:center;margin-inline-end:var(--_column-gap);opacity:0;scale:.8;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),scale var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu] [data-part=item][data-checked]>[data-part=indicator]{opacity:1;scale:1;transition:opacity var(--slotted-duration-short) var(--slotted-easing-enter),scale var(--slotted-duration-short) var(--slotted-easing-enter)}[data-ui=menu] [data-part=item][role=menuitemradio]>[data-part=indicator]{--slotted-icon-size: calc(var(--_icon-size) * .7)}[data-ui=menu] [data-part=icon]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-content:center;justify-self:center;margin-inline-end:var(--_column-gap)}[data-ui=menu] [data-part=icon]>*{font-size:var(--_icon-size)}[data-ui=menu] [data-part=label]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=menu] [data-part=description]{color:var(--_muted);font-size:var(--_secondary-font-size);grid-column:2;grid-row:2;line-height:var(--_secondary-leading);min-inline-size:0;overflow-wrap:anywhere}[data-ui=menu] [data-part=item][data-disabled]>[data-part=description]{color:inherit}[data-ui=menu] [data-part=meta]{align-items:center;color:var(--_muted);column-gap:var(--slotted-space-2, .25rem);display:flex;font-variant-numeric:tabular-nums;grid-column:3;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=menu] [data-part=shortcut]{color:var(--_muted);grid-column:4;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=menu] [data-part=item][data-disabled]>:is([data-part=shortcut],[data-part=meta]),[data-ui=menu] [data-part=item][data-disabled][aria-haspopup=menu]>[data-ui=icon]{color:inherit}[data-ui=menu] [data-part=item][aria-haspopup=menu]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);grid-column:4;grid-row:1;justify-self:end;line-height:inherit;margin-inline-start:var(--_column-gap);color:var(--_muted)}[data-ui=menu] [data-part=separator]{background-color:var(--slotted-menu-separator-color, var(--_border-color));block-size:var(--_border-width);border:0;grid-column:1 / -1;margin-block:var(--slotted-space-2, .25rem);margin-inline:0}[data-ui=menu] [data-part=empty]{color:var(--_muted);grid-column:1 / -1;padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--_item-inset);text-align:center}[data-ui=menu]>[data-part=content][data-loading]{cursor:progress}[data-ui=menu] [data-part=item][data-tone=accent]{--_accent: var(--slotted-tone-accent-text);--_highlight: var(--slotted-tone-accent-surface);--_highlight-active: var(--slotted-tone-accent-subtle-active);color:var(--slotted-tone-accent-text)}[data-ui=menu] [data-part=item][data-tone=secondary]{--_accent: var(--slotted-tone-secondary-text);--_highlight: var(--slotted-tone-secondary-surface);--_highlight-active: var(--slotted-tone-secondary-subtle-active);color:var(--slotted-tone-secondary-text)}[data-ui=menu] [data-part=item][data-tone=success]{--_accent: var(--slotted-tone-success-text);--_highlight: var(--slotted-tone-success-surface);--_highlight-active: var(--slotted-tone-success-subtle-active);color:var(--slotted-tone-success-text)}[data-ui=menu] [data-part=item][data-tone=warning]{--_accent: var(--slotted-tone-warning-text);--_highlight: var(--slotted-tone-warning-surface);--_highlight-active: var(--slotted-tone-warning-subtle-active);color:var(--slotted-tone-warning-text)}[data-ui=menu] [data-part=item][data-tone=danger]{--_accent: var(--slotted-tone-danger-text);--_highlight: var(--slotted-tone-danger-surface);--_highlight-active: var(--slotted-tone-danger-subtle-active);color:var(--slotted-tone-danger-text)}[data-ui=menu] [data-part=item][data-tone][data-disabled]{--_accent: var(--slotted-disabled-foreground, #64748b);--_highlight: var(--slotted-menu-highlight, var(--slotted-tone-secondary-subtle-hover));color:var(--slotted-disabled-foreground, #64748b)}@media(forced-colors:active){[data-ui=menu] [data-part=item]:focus{background-color:Highlight;color:HighlightText;forced-color-adjust:none}[data-ui=menu] [data-part=item][data-disabled]:focus{background-color:Highlight;color:GrayText}}}\n", "@layer slotted.components{[data-ui=highlight] [data-part=match]{background-color:var( --slotted-highlight-background, color-mix( in oklab, var(--slotted-tone-accent-text) calc(var(--slotted-highlight-tint-opacity, .075) * 100%), transparent ) );-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:var(--slotted-radius-none, 0px);color:var(--slotted-highlight-color, var(--slotted-tone-accent-text));font-weight:inherit;letter-spacing:inherit;padding:0;text-decoration-color:var(--slotted-highlight-rule-color, var(--slotted-tone-accent-border));text-decoration-line:underline;text-decoration-thickness:var(--slotted-border-width-thin, 1px);text-underline-offset:var(--slotted-space-1, .125rem)}[data-ui=highlight] [data-part=match][data-current]{background-color:var(--slotted-highlight-current-background, var(--slotted-tone-accent-solid));color:var(--slotted-highlight-current-color, var(--slotted-tone-accent-on-solid));text-decoration-line:none}[data-ui=highlight]:is([data-disabled],[data-disabled] *) [data-part=match]{background-color:var(--slotted-highlight-disabled-background, transparent);color:inherit;text-decoration-line:underline}@media(forced-colors:active){[data-ui=highlight] [data-part=match],[data-ui=highlight]:is([data-disabled],[data-disabled] *) [data-part=match]{background-color:Mark;color:MarkText;forced-color-adjust:none}[data-ui=highlight] [data-part=match][data-current]{background-color:Highlight;color:HighlightText}}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
565
+ }
566
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenu, decorators: [{
567
+ type: Component,
568
+ args: [{ selector: 'sl-menu', standalone: true, exportAs: 'slMenu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { style: 'display: none' }, template: `
569
+ <ng-template #layer>
570
+ <div
571
+ data-ui="menu"
572
+ data-part="root"
573
+ [attr.data-align]="resolvedAlign()"
574
+ [attr.data-size]="resolvedSize()"
575
+ [attr.data-open]="isOpen() ? '' : null"
576
+ [attr.inert]="isOpen() ? null : ''"
577
+ >
578
+ <div
579
+ #surface
580
+ data-part="content"
581
+ role="menu"
582
+ tabindex="-1"
583
+ [id]="contentId"
584
+ [attr.aria-labelledby]="ariaLabel() === undefined ? triggerId : null"
585
+ [attr.aria-label]="ariaLabel() ?? null"
586
+ [attr.aria-describedby]="describedBy()"
587
+ [attr.aria-busy]="loading() ? true : null"
588
+ [attr.data-loading]="loading() ? '' : null"
589
+ (keydown)="onKeyDown($event)"
590
+ >
591
+ <ng-content />
592
+ </div>
593
+ </div>
594
+ </ng-template>
595
+ `, styles: ["@layer slotted.components{[data-ui=menu]{--_gap: var(--slotted-menu-gap, var(--slotted-space-2, .25rem));--_surface: var(--slotted-menu-surface, var(--slotted-surface-raised, #ffffff));--_text: var(--slotted-menu-text, var(--slotted-text, #0f172a));--_muted: var(--slotted-menu-text-muted, var(--slotted-text-muted, #5b6b7f));--_border-color: var(--slotted-menu-border-color, var(--slotted-border-subtle, #e2e8f0));--_border-width: var(--slotted-border-width-thin, 1px);--_radius: var(--slotted-menu-radius, var(--slotted-radius-lg, 8px));--_shadow: var(--slotted-menu-shadow, var(--slotted-shadow-md));--_highlight: var(--slotted-menu-highlight, var(--slotted-tone-secondary-subtle-hover));--_highlight-active: var( --slotted-menu-highlight-active, var(--slotted-tone-secondary-subtle-active) );--_accent: var(--_text);--_inset-block: var(--slotted-menu-padding-block, var(--slotted-space-2, .25rem));--_inset-inline: var(--slotted-menu-padding-inline, var(--slotted-space-2, .25rem));--_item-padding: var(--slotted-control-padding-inline-md, .8125rem);--_item-inset: calc(var(--_item-padding) - var(--_inset-inline));--_item-height: var(--slotted-control-height-md, 34px);--_item-radius: var(--slotted-menu-item-radius, var(--slotted-control-radius));--_font-size: var(--slotted-control-font-size-md, 13px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_column-gap: var(--slotted-control-gap-md, .5rem);--_leading: round(up, calc(var(--_font-size) * var(--slotted-line-height-md, 1.5)), 1px);--_secondary-leading: round( up, calc(var(--_secondary-font-size) * var(--slotted-line-height-sm, 1.45)), 1px );--_measure: var(--slotted-menu-measure, 16rem);--_min-measure: min( var(--slotted-menu-min-measure, 12rem), var(--slotted-positioner-available-width, 100vw) );position:absolute;inset-block-start:0;z-index:calc(var(--slotted-z-index-popover, 1100) + var(--slotted-layer-depth, 0));isolation:isolate;box-sizing:border-box;inline-size:max-content;max-inline-size:min(var(--_measure),var(--slotted-positioner-available-width, 100vw));min-inline-size:var(--_min-measure);padding-block:var(--_gap);padding-inline:0;pointer-events:none;opacity:0;--_enter-distance: var(--slotted-space-2, .25rem);translate:0 calc(-1 * var(--_enter-distance));transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),translate var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu][data-side=top]{translate:0 var(--_enter-distance)}[data-ui=menu][data-side=right]{translate:calc(-1 * var(--_enter-distance)) 0}[data-ui=menu][data-side=left]{translate:var(--_enter-distance) 0}[data-ui=menu]:is([data-side=left],[data-side=right]){padding-block:0;padding-inline:var(--_gap)}[data-ui=menu][data-open]{opacity:1;translate:0 0;transition:none}[data-ui=menu][data-open][data-positioned]{animation:slotted-menu-enter-down var(--slotted-duration-medium) var(--slotted-easing-enter)}[data-ui=menu][data-open][data-positioned][data-side=top]{animation-name:slotted-menu-enter-up}[data-ui=menu][data-open][data-positioned][data-side=right]{animation-name:slotted-menu-enter-from-start}[data-ui=menu][data-open][data-positioned][data-side=left]{animation-name:slotted-menu-enter-from-end}@keyframes slotted-menu-enter-down{0%{opacity:0;translate:0 calc(-1 * var(--_enter-distance))}}@keyframes slotted-menu-enter-up{0%{opacity:0;translate:0 var(--_enter-distance)}}@keyframes slotted-menu-enter-from-start{0%{opacity:0;translate:calc(-1 * var(--_enter-distance)) 0}}@keyframes slotted-menu-enter-from-end{0%{opacity:0;translate:var(--_enter-distance) 0}}@keyframes slotted-menu-fade{0%{opacity:0}}@media(prefers-reduced-motion:reduce){[data-ui=menu],[data-ui=menu][data-side=top],[data-ui=menu][data-side=left],[data-ui=menu][data-side=right]{translate:0 0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu][data-open][data-positioned],[data-ui=menu][data-open][data-positioned][data-side=top],[data-ui=menu][data-open][data-positioned][data-side=left],[data-ui=menu][data-open][data-positioned][data-side=right]{animation-name:slotted-menu-fade}}[data-ui=menu][data-detached]{visibility:hidden}[data-ui=menu][data-size=sm]{--_item-padding: var(--slotted-control-padding-inline-sm, .625rem);--_item-height: var(--slotted-control-height-sm, 30px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_secondary-font-size: var(--slotted-font-size-xs, .75rem);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_column-gap: var(--slotted-control-gap-sm, .375rem);--_measure: var(--slotted-menu-measure-sm, 14rem)}[data-ui=menu][data-size=lg]{--_item-padding: var(--slotted-control-padding-inline-lg, 1rem);--_item-height: var(--slotted-control-height-lg, 38px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_column-gap: var(--slotted-control-gap-lg, .5rem);--_measure: var(--slotted-menu-measure-lg, 20rem)}[data-ui=menu]>[data-part=content]{background:var(--_surface);border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);box-shadow:var(--_shadow);box-sizing:border-box;color:var(--_text);display:grid;font-family:var(--slotted-font-family-sans);font-size:var(--_font-size);grid-template-columns:auto minmax(0,1fr) auto auto;max-block-size:calc(var(--slotted-positioner-available-height, 100vh) - 2 * var(--_gap));outline:none;overflow-y:auto;overscroll-behavior:contain;padding-block:var(--_inset-block);padding-inline:var(--_inset-inline);pointer-events:auto}[data-ui=menu]>[data-part=content]:focus-visible{outline:none}[data-ui=menu] [data-part=group]{display:grid;grid-column:1 / -1;grid-template-columns:subgrid}[data-ui=menu] [data-part=group-label]{color:var(--_muted);font-size:var(--_secondary-font-size);font-weight:var(--slotted-font-weight-semibold, 600);grid-column:1 / -1;line-height:var(--_secondary-leading);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset)}[data-ui=menu] [data-part=header]{align-items:center;column-gap:var(--slotted-space-5, .75rem);display:grid;grid-column:1 / -1;grid-template-columns:auto minmax(0,1fr);line-height:var(--_leading);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset)}[data-ui=menu] [data-part=header]>:not([data-part=label],[data-part=description]){grid-column:1;grid-row:1 / span 2}[data-ui=menu] [data-part=header]>[data-part=label]{font-weight:var(--slotted-font-weight-semibold, 600)}[data-ui=menu] [data-part=item]{appearance:none;background:transparent;border:0;border-radius:var(--_item-radius);box-sizing:border-box;color:inherit;cursor:pointer;display:grid;font:inherit;grid-column:1 / -1;grid-template-columns:subgrid;align-content:center;line-height:var(--_leading);min-block-size:var(--_item-height);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_item-inset);row-gap:var(--slotted-space-1, .125rem);text-align:start;text-decoration:none;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=menu] [data-part=item]:focus{background-color:var(--_highlight);color:var(--_accent)}[data-ui=menu] [data-part=item]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, currentColor);outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=menu] [data-part=item]:not([data-disabled]):active{background-color:var(--_highlight-active)}[data-ui=menu] [data-part=item][data-open]{background-color:var(--_highlight)}[data-ui=menu] [data-part=item][data-disabled]{color:var(--slotted-disabled-foreground, #64748b);cursor:not-allowed}[data-ui=menu] [data-part=item][data-disabled]:focus{background-color:var(--_highlight);color:var(--slotted-disabled-foreground, #64748b)}[data-ui=menu] :is([data-part=indicator],[data-part=icon]),[data-ui=menu] [data-part=item][aria-haspopup=menu]>[data-ui=icon]{block-size:1lh}[data-ui=menu] [data-part=indicator]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-content:center;justify-self:center;margin-inline-end:var(--_column-gap);opacity:0;scale:.8;transition:opacity var(--slotted-duration-short) var(--slotted-easing-exit),scale var(--slotted-duration-short) var(--slotted-easing-exit)}[data-ui=menu] [data-part=item][data-checked]>[data-part=indicator]{opacity:1;scale:1;transition:opacity var(--slotted-duration-short) var(--slotted-easing-enter),scale var(--slotted-duration-short) var(--slotted-easing-enter)}[data-ui=menu] [data-part=item][role=menuitemradio]>[data-part=indicator]{--slotted-icon-size: calc(var(--_icon-size) * .7)}[data-ui=menu] [data-part=icon]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-content:center;justify-self:center;margin-inline-end:var(--_column-gap)}[data-ui=menu] [data-part=icon]>*{font-size:var(--_icon-size)}[data-ui=menu] [data-part=label]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=menu] [data-part=description]{color:var(--_muted);font-size:var(--_secondary-font-size);grid-column:2;grid-row:2;line-height:var(--_secondary-leading);min-inline-size:0;overflow-wrap:anywhere}[data-ui=menu] [data-part=item][data-disabled]>[data-part=description]{color:inherit}[data-ui=menu] [data-part=meta]{align-items:center;color:var(--_muted);column-gap:var(--slotted-space-2, .25rem);display:flex;font-variant-numeric:tabular-nums;grid-column:3;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=menu] [data-part=shortcut]{color:var(--_muted);grid-column:4;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=menu] [data-part=item][data-disabled]>:is([data-part=shortcut],[data-part=meta]),[data-ui=menu] [data-part=item][data-disabled][aria-haspopup=menu]>[data-ui=icon]{color:inherit}[data-ui=menu] [data-part=item][aria-haspopup=menu]>[data-ui=icon]{--slotted-icon-size: var(--_icon-size);grid-column:4;grid-row:1;justify-self:end;line-height:inherit;margin-inline-start:var(--_column-gap);color:var(--_muted)}[data-ui=menu] [data-part=separator]{background-color:var(--slotted-menu-separator-color, var(--_border-color));block-size:var(--_border-width);border:0;grid-column:1 / -1;margin-block:var(--slotted-space-2, .25rem);margin-inline:0}[data-ui=menu] [data-part=empty]{color:var(--_muted);grid-column:1 / -1;padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--_item-inset);text-align:center}[data-ui=menu]>[data-part=content][data-loading]{cursor:progress}[data-ui=menu] [data-part=item][data-tone=accent]{--_accent: var(--slotted-tone-accent-text);--_highlight: var(--slotted-tone-accent-surface);--_highlight-active: var(--slotted-tone-accent-subtle-active);color:var(--slotted-tone-accent-text)}[data-ui=menu] [data-part=item][data-tone=secondary]{--_accent: var(--slotted-tone-secondary-text);--_highlight: var(--slotted-tone-secondary-surface);--_highlight-active: var(--slotted-tone-secondary-subtle-active);color:var(--slotted-tone-secondary-text)}[data-ui=menu] [data-part=item][data-tone=success]{--_accent: var(--slotted-tone-success-text);--_highlight: var(--slotted-tone-success-surface);--_highlight-active: var(--slotted-tone-success-subtle-active);color:var(--slotted-tone-success-text)}[data-ui=menu] [data-part=item][data-tone=warning]{--_accent: var(--slotted-tone-warning-text);--_highlight: var(--slotted-tone-warning-surface);--_highlight-active: var(--slotted-tone-warning-subtle-active);color:var(--slotted-tone-warning-text)}[data-ui=menu] [data-part=item][data-tone=danger]{--_accent: var(--slotted-tone-danger-text);--_highlight: var(--slotted-tone-danger-surface);--_highlight-active: var(--slotted-tone-danger-subtle-active);color:var(--slotted-tone-danger-text)}[data-ui=menu] [data-part=item][data-tone][data-disabled]{--_accent: var(--slotted-disabled-foreground, #64748b);--_highlight: var(--slotted-menu-highlight, var(--slotted-tone-secondary-subtle-hover));color:var(--slotted-disabled-foreground, #64748b)}@media(forced-colors:active){[data-ui=menu] [data-part=item]:focus{background-color:Highlight;color:HighlightText;forced-color-adjust:none}[data-ui=menu] [data-part=item][data-disabled]:focus{background-color:Highlight;color:GrayText}}}\n", "@layer slotted.components{[data-ui=highlight] [data-part=match]{background-color:var( --slotted-highlight-background, color-mix( in oklab, var(--slotted-tone-accent-text) calc(var(--slotted-highlight-tint-opacity, .075) * 100%), transparent ) );-webkit-box-decoration-break:clone;box-decoration-break:clone;border-radius:var(--slotted-radius-none, 0px);color:var(--slotted-highlight-color, var(--slotted-tone-accent-text));font-weight:inherit;letter-spacing:inherit;padding:0;text-decoration-color:var(--slotted-highlight-rule-color, var(--slotted-tone-accent-border));text-decoration-line:underline;text-decoration-thickness:var(--slotted-border-width-thin, 1px);text-underline-offset:var(--slotted-space-1, .125rem)}[data-ui=highlight] [data-part=match][data-current]{background-color:var(--slotted-highlight-current-background, var(--slotted-tone-accent-solid));color:var(--slotted-highlight-current-color, var(--slotted-tone-accent-on-solid));text-decoration-line:none}[data-ui=highlight]:is([data-disabled],[data-disabled] *) [data-part=match]{background-color:var(--slotted-highlight-disabled-background, transparent);color:inherit;text-decoration-line:underline}@media(forced-colors:active){[data-ui=highlight] [data-part=match],[data-ui=highlight]:is([data-disabled],[data-disabled] *) [data-part=match]{background-color:Mark;color:MarkText;forced-color-adjust:none}[data-ui=highlight] [data-part=match][data-current]{background-color:Highlight;color:HighlightText}}}\n"] }]
596
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], openChangeRequest: [{ type: i0.Output, args: ["openChangeRequest"] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], mount: [{ type: i0.Input, args: [{ isSignal: true, alias: "mount", required: false }] }], strategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "strategy", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], alignOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignOffset", required: false }] }], collisionPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionPadding", required: false }] }], submenuOpenDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "submenuOpenDelay", required: false }] }], submenuCloseDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "submenuCloseDelay", required: false }] }], typeaheadTimeout: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeaheadTimeout", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], typeahead: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeahead", required: false }] }], openOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "openOnHover", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], closeOnEscape: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnEscape", required: false }] }], closeOnOutsidePress: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnOutsidePress", required: false }] }], flip: [{ type: i0.Input, args: [{ isSignal: true, alias: "flip", required: false }] }], shift: [{ type: i0.Input, args: [{ isSignal: true, alias: "shift", required: false }] }], hideWhenDetached: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideWhenDetached", required: false }] }], portal: [{ type: i0.Input, args: [{ isSignal: true, alias: "portal", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], template: [{ type: i0.ViewChild, args: ['layer', { isSignal: true }] }] } });
597
+
598
+ /** What ARIA calls each modifier, which is not what a reader sees. */
599
+ const ARIA_MODIFIERS = {
600
+ alt: 'Alt',
601
+ ctrl: 'Control',
602
+ meta: 'Meta',
603
+ shift: 'Shift',
604
+ };
605
+ /**
606
+ * The shortcut as `aria-keyshortcuts` states it, or nothing.
607
+ *
608
+ * A sequence has no syntax in the attribute, whose separator means *or* rather
609
+ * than *then*, so a sequence is printed and left unannounced instead of being
610
+ * announced as something it is not.
611
+ */
612
+ function announceShortcut(keys, platform) {
613
+ const steps = parseShortcut(keys);
614
+ if (steps.length !== 1)
615
+ return undefined;
616
+ return steps[0]
617
+ ?.map((token) => {
618
+ const canonical = canonicalKey(token);
619
+ if (canonical === 'mod')
620
+ return platform === 'mac' ? 'Meta' : 'Control';
621
+ if (canonical !== undefined && canonical in ARIA_MODIFIERS) {
622
+ return ARIA_MODIFIERS[canonical];
623
+ }
624
+ const word = canonical ?? token;
625
+ return word.length === 1 ? word.toUpperCase() : `${word[0]?.toUpperCase()}${word.slice(1)}`;
626
+ })
627
+ .join('+');
628
+ }
629
+ /** The legends a reader sees, in the order the platform writes them, in the language of `t`. */
630
+ function shortcutLegends(keys, platform, t) {
631
+ const shortcut = resolveShortcut(keys, { platform, t });
632
+ return shortcut.steps
633
+ .map((step) => step.map((key) => key.legend).join(shortcut.separator))
634
+ .join(` ${shortcut.thenLabel} `);
635
+ }
636
+ /**
637
+ * One command, one option, or one choice among others.
638
+ *
639
+ * A native `button` carrying `role="menuitem"`: the platform gives the press,
640
+ * the `Enter` and `Space` handling and the pointer semantics, and the role
641
+ * replaces `button` so a reader hears an item. Which of the three roles it
642
+ * takes is decided by the attribute the consumer wrote, read once through
643
+ * `HostAttributeToken`, because one element cannot carry two components.
644
+ *
645
+ * A disabled item keeps its place in the ring and takes `aria-disabled`: the
646
+ * pattern asks that disabled items stay focusable, and the native attribute
647
+ * would remove them.
648
+ */
649
+ class SlMenuItem {
650
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
651
+ /** What typeahead matches on, when the visible label is not the word. */
652
+ textValue = input(undefined, /* @ts-ignore */
653
+ ...(ngDevMode ? [{ debugName: "textValue" }] : /* istanbul ignore next */ []));
654
+ tone = input(undefined, /* @ts-ignore */
655
+ ...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
656
+ /**
657
+ * A shortcut in this library's own notation — `Mod+K`. It is printed with the
658
+ * platform's legends and announced with `aria-keyshortcuts`; the family does
659
+ * not listen for it, because a menu that bound keys would fire commands while
660
+ * it was closed.
661
+ */
662
+ shortcut = input(undefined, /* @ts-ignore */
663
+ ...(ngDevMode ? [{ debugName: "shortcut" }] : /* istanbul ignore next */ []));
664
+ closeOnSelect = input(undefined, { ...(ngDevMode ? { debugName: "closeOnSelect" } : /* istanbul ignore next */ {}), transform: (given) => given === undefined ? undefined : booleanAttribute(given) });
665
+ /** The value this item stands for inside a radio group. */
666
+ value = input(undefined, /* @ts-ignore */
667
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
668
+ checked = model(false, /* @ts-ignore */
669
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
670
+ checkedChangeRequest = output();
671
+ select = output();
672
+ /** The line under the label, which describes the item rather than naming it. */
673
+ describedBy = signal(null, /* @ts-ignore */
674
+ ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
675
+ menu = inject(SlMenu);
676
+ group = inject(SlMenuRadioGroup, { optional: true });
677
+ element = inject(ElementRef).nativeElement;
678
+ platform = resolvePlatform('auto');
679
+ /** The words a shortcut's keys are written in, from the `keys` catalog of the language in force. */
680
+ keysT = injectMessages(keysMessages);
681
+ isCheckbox = inject(new HostAttributeToken('slMenuCheckboxItem'), {
682
+ optional: true,
683
+ }) !== null;
684
+ isRadio = inject(new HostAttributeToken('slMenuRadioItem'), { optional: true }) !== null;
685
+ isLink = this.element.tagName === 'A';
686
+ /**
687
+ * Set by `slMenuTriggerFor` on the same element: an item that opens a
688
+ * submenu ends in a chevron that points along the reading direction.
689
+ */
690
+ opensSubmenu = signal(false, /* @ts-ignore */
691
+ ...(ngDevMode ? [{ debugName: "opensSubmenu" }] : /* istanbul ignore next */ []));
692
+ role = this.isCheckbox
693
+ ? 'menuitemcheckbox'
694
+ : this.isRadio
695
+ ? 'menuitemradio'
696
+ : 'menuitem';
697
+ isChecked = computed(() => this.isRadio ? this.group?.value() === this.value() : this.checked(), /* @ts-ignore */
698
+ ...(ngDevMode ? [{ debugName: "isChecked" }] : /* istanbul ignore next */ []));
699
+ legend = computed(() => {
700
+ const keys = this.shortcut();
701
+ return keys === undefined ? undefined : shortcutLegends(keys, this.platform, this.keysT);
702
+ }, /* @ts-ignore */
703
+ ...(ngDevMode ? [{ debugName: "legend" }] : /* istanbul ignore next */ []));
704
+ announced = computed(() => {
705
+ const keys = this.shortcut();
706
+ return keys === undefined ? null : (announceShortcut(keys, this.platform) ?? null);
707
+ }, /* @ts-ignore */
708
+ ...(ngDevMode ? [{ debugName: "announced" }] : /* istanbul ignore next */ []));
709
+ /**
710
+ * The host is a `button` or an `a`, so the template compiler types the event
711
+ * as the one thing both have in common and the narrowing happens here.
712
+ */
713
+ onClick(event) {
714
+ /* A click a keyboard produced carries no pointer coordinates, which is how
715
+ `Enter` on a button is told from a press without listening for both. */
716
+ const detail = event.detail;
717
+ this.run(detail === 0 ? 'keyboard' : 'pointer', event);
718
+ }
719
+ onKeyDown(source) {
720
+ const event = source;
721
+ /* The pattern's optional rule, taken: `Space` on a checkbox or radio item
722
+ changes the state without closing the menu. */
723
+ if (event.key !== ' ' || this.role === 'menuitem')
724
+ return;
725
+ event.preventDefault();
726
+ if (this.disabled())
727
+ return;
728
+ this.commit('keyboard', event);
729
+ }
730
+ /**
731
+ * The pointer moving over an item focuses it, which keeps exactly one item
732
+ * highlighted whichever device is driving — and is what lets the stylesheet
733
+ * paint the highlight on `:focus` rather than splitting it in two.
734
+ */
735
+ onPointerMove() {
736
+ if (this.element.ownerDocument.activeElement === this.element)
737
+ return;
738
+ this.element.focus({ preventScroll: true });
739
+ }
740
+ commit(reason, source) {
741
+ if (this.isRadio) {
742
+ const value = this.value();
743
+ if (value !== undefined)
744
+ this.group?.choose(value, reason, source);
745
+ return;
746
+ }
747
+ if (!this.isCheckbox)
748
+ return;
749
+ const next = !this.checked();
750
+ const state = createControllable({
751
+ initial: this.checked(),
752
+ onRequest: (request) => this.checkedChangeRequest.emit(request),
753
+ });
754
+ if (state.request(next, reason, source))
755
+ this.checked.set(next);
756
+ }
757
+ run(reason, source) {
758
+ if (this.disabled())
759
+ return;
760
+ this.commit(reason, source);
761
+ let prevented = false;
762
+ this.select.emit({
763
+ reason,
764
+ source,
765
+ get defaultPrevented() {
766
+ return prevented;
767
+ },
768
+ preventDefault: () => {
769
+ prevented = true;
770
+ },
771
+ });
772
+ if (prevented)
773
+ return;
774
+ /* A checkbox or a radio item keeps the menu open by default: a reader
775
+ turning three things on would otherwise open it three times. */
776
+ const closes = this.closeOnSelect() ?? (this.role === 'menuitem' && this.menu.resolvedCloseOnSelect());
777
+ if (closes)
778
+ this.menu.closeAll('select', source);
779
+ }
780
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
781
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlMenuItem, isStandalone: true, selector: "button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, textValue: { classPropertyName: "textValue", publicName: "textValue", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, shortcut: { classPropertyName: "shortcut", publicName: "shortcut", isSignal: true, isRequired: false, transformFunction: null }, closeOnSelect: { classPropertyName: "closeOnSelect", publicName: "closeOnSelect", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", checkedChangeRequest: "checkedChangeRequest", select: "select" }, host: { attributes: { "data-part": "item", "tabindex": "-1" }, listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)", "pointermove": "onPointerMove()" }, properties: { "attr.role": "role", "attr.type": "isLink ? null : \"button\"", "attr.aria-checked": "role === \"menuitem\" ? null : isChecked()", "attr.aria-disabled": "disabled() ? true : null", "attr.aria-describedby": "describedBy() ?? null", "attr.aria-keyshortcuts": "announced()", "attr.data-disabled": "disabled() ? \"\" : null", "attr.data-checked": "isChecked() ? \"\" : null", "attr.data-text-value": "textValue() ?? null", "attr.data-tone": "tone() ?? null" } }, exportAs: ["slMenuItem"], ngImport: i0, template: `
782
+ @if (role !== 'menuitem') {
783
+ <span data-part="indicator"
784
+ ><span slIcon><svg slGlyph [name]="role === 'menuitemradio' ? 'dot' : 'check'"></svg></span
785
+ ></span>
786
+ }
787
+ <ng-content select="[slMenuItemIcon]" />
788
+ <span data-part="label"><ng-content /></span>
789
+ <ng-content select="[slMenuItemDescription]" />
790
+ <ng-content select="[slMenuItemMeta]" />
791
+ @if (legend(); as printed) {
792
+ <span data-part="shortcut" aria-hidden="true">{{ printed }}</span>
793
+ }
794
+ @if (opensSubmenu()) {
795
+ <span slIcon directional><svg slGlyph name="chevron-right"></svg></span>
796
+ }
797
+ `, isInline: true, dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
798
+ }
799
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItem, decorators: [{
800
+ type: Component,
801
+ args: [{
802
+ selector: 'button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem]',
803
+ standalone: true,
804
+ exportAs: 'slMenuItem',
805
+ imports: [SlGlyph, SlIcon],
806
+ changeDetection: ChangeDetectionStrategy.OnPush,
807
+ encapsulation: ViewEncapsulation.None,
808
+ host: {
809
+ 'data-part': 'item',
810
+ tabindex: '-1',
811
+ '[attr.role]': 'role',
812
+ '[attr.type]': 'isLink ? null : "button"',
813
+ '[attr.aria-checked]': 'role === "menuitem" ? null : isChecked()',
814
+ '[attr.aria-disabled]': 'disabled() ? true : null',
815
+ '[attr.aria-describedby]': 'describedBy() ?? null',
816
+ '[attr.aria-keyshortcuts]': 'announced()',
817
+ '[attr.data-disabled]': 'disabled() ? "" : null',
818
+ '[attr.data-checked]': 'isChecked() ? "" : null',
819
+ '[attr.data-text-value]': 'textValue() ?? null',
820
+ '[attr.data-tone]': 'tone() ?? null',
821
+ '(click)': 'onClick($event)',
822
+ '(keydown)': 'onKeyDown($event)',
823
+ '(pointermove)': 'onPointerMove()',
824
+ },
825
+ template: `
826
+ @if (role !== 'menuitem') {
827
+ <span data-part="indicator"
828
+ ><span slIcon><svg slGlyph [name]="role === 'menuitemradio' ? 'dot' : 'check'"></svg></span
829
+ ></span>
830
+ }
831
+ <ng-content select="[slMenuItemIcon]" />
832
+ <span data-part="label"><ng-content /></span>
833
+ <ng-content select="[slMenuItemDescription]" />
834
+ <ng-content select="[slMenuItemMeta]" />
835
+ @if (legend(); as printed) {
836
+ <span data-part="shortcut" aria-hidden="true">{{ printed }}</span>
837
+ }
838
+ @if (opensSubmenu()) {
839
+ <span slIcon directional><svg slGlyph name="chevron-right"></svg></span>
840
+ }
841
+ `,
842
+ }]
843
+ }], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], textValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "textValue", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], shortcut: [{ type: i0.Input, args: [{ isSignal: true, alias: "shortcut", required: false }] }], closeOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnSelect", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], checkedChangeRequest: [{ type: i0.Output, args: ["checkedChangeRequest"] }], select: [{ type: i0.Output, args: ["select"] }] } });
844
+ /** The mark in the item's first column: the consumer's own element. */
845
+ class SlMenuItemIcon {
846
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
847
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuItemIcon, isStandalone: true, selector: "[slMenuItemIcon]", host: { attributes: { "data-part": "icon" } }, ngImport: i0 });
848
+ }
849
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemIcon, decorators: [{
850
+ type: Directive,
851
+ args: [{
852
+ selector: '[slMenuItemIcon]',
853
+ standalone: true,
854
+ host: { 'data-part': 'icon' },
855
+ }]
856
+ }] });
857
+ /**
858
+ * The second line, under the label.
859
+ *
860
+ * It describes the item rather than naming it: the item points at it with
861
+ * `aria-describedby`, so a reader hears "Delete document" and then the warning,
862
+ * instead of one name with a sentence stuck to it.
863
+ */
864
+ class SlMenuItemDescription {
865
+ id = `sl-menu-description-${Math.random().toString(36).slice(2, 8)}`;
866
+ item = inject(SlMenuItem, { optional: true });
867
+ constructor() {
868
+ this.item?.describedBy.set(this.id);
869
+ }
870
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
871
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuItemDescription, isStandalone: true, selector: "[slMenuItemDescription]", host: { attributes: { "data-part": "description" }, properties: { "attr.id": "id" } }, ngImport: i0 });
872
+ }
873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemDescription, decorators: [{
874
+ type: Directive,
875
+ args: [{
876
+ selector: '[slMenuItemDescription]',
877
+ standalone: true,
878
+ host: { 'data-part': 'description', '[attr.id]': 'id' },
879
+ }]
880
+ }], ctorParameters: () => [] });
881
+ /**
882
+ * What the item holds or counts — a number, a status, the value a submenu is
883
+ * set to — in a column of its own before the shortcut or the chevron. It reads
884
+ * as part of the item's name; typeahead matches the label alone.
885
+ */
886
+ class SlMenuItemMeta {
887
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemMeta, deps: [], target: i0.ɵɵFactoryTarget.Directive });
888
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuItemMeta, isStandalone: true, selector: "[slMenuItemMeta]", host: { attributes: { "data-part": "meta" } }, ngImport: i0 });
889
+ }
890
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuItemMeta, decorators: [{
891
+ type: Directive,
892
+ args: [{
893
+ selector: '[slMenuItemMeta]',
894
+ standalone: true,
895
+ host: { 'data-part': 'meta' },
896
+ }]
897
+ }] });
898
+ /**
899
+ * Who the menu belongs to: an avatar, a name, a line under it, above the
900
+ * commands. Not an item — the arrows and typeahead never reach it, because a
901
+ * `menu` owns only items, groups and separators — so the surface names it as
902
+ * its description and a reader hears it once, as the menu opens. The name is a
903
+ * `data-part="label"` element and the line under it `slMenuItemDescription`;
904
+ * any other child is the media, set beside both.
905
+ */
906
+ class SlMenuHeader {
907
+ id = `sl-menu-header-${Math.random().toString(36).slice(2, 8)}`;
908
+ menu = inject(SlMenu);
909
+ constructor() {
910
+ this.menu.headerId.set(this.id);
911
+ inject(DestroyRef).onDestroy(() => {
912
+ if (this.menu.headerId() === this.id)
913
+ this.menu.headerId.set(null);
914
+ });
915
+ }
916
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
917
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuHeader, isStandalone: true, selector: "[slMenuHeader]", host: { attributes: { "data-part": "header" }, properties: { "attr.id": "id" } }, ngImport: i0 });
918
+ }
919
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuHeader, decorators: [{
920
+ type: Directive,
921
+ args: [{
922
+ selector: '[slMenuHeader]',
923
+ standalone: true,
924
+ host: { 'data-part': 'header', '[attr.id]': 'id' },
925
+ }]
926
+ }], ctorParameters: () => [] });
927
+ /**
928
+ * A set of items with a name. The label is inside the group and named by it,
929
+ * because a heading outside one belongs to nothing a reader can hear.
930
+ */
931
+ class SlMenuGroup {
932
+ label = input(undefined, /* @ts-ignore */
933
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
934
+ labelId = `sl-menu-group-${Math.random().toString(36).slice(2, 8)}`;
935
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
936
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlMenuGroup, isStandalone: true, selector: "sl-menu-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "group", "role": "group" }, properties: { "attr.aria-labelledby": "label() === undefined ? null : labelId" } }, exportAs: ["slMenuGroup"], ngImport: i0, template: `
937
+ @if (label(); as words) {
938
+ <div data-part="group-label" [id]="labelId">{{ words }}</div>
939
+ }
940
+ <ng-content />
941
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
942
+ }
943
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuGroup, decorators: [{
944
+ type: Component,
945
+ args: [{
946
+ selector: 'sl-menu-group',
947
+ standalone: true,
948
+ exportAs: 'slMenuGroup',
949
+ changeDetection: ChangeDetectionStrategy.OnPush,
950
+ encapsulation: ViewEncapsulation.None,
951
+ host: {
952
+ 'data-part': 'group',
953
+ role: 'group',
954
+ '[attr.aria-labelledby]': 'label() === undefined ? null : labelId',
955
+ },
956
+ template: `
957
+ @if (label(); as words) {
958
+ <div data-part="group-label" [id]="labelId">{{ words }}</div>
959
+ }
960
+ <ng-content />
961
+ `,
962
+ }]
963
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
964
+ /** One value, chosen among the items inside it. */
965
+ class SlMenuRadioGroup {
966
+ value = model(undefined, /* @ts-ignore */
967
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
968
+ valueChangeRequest = output();
969
+ choose(next, reason, source) {
970
+ if (next === this.value())
971
+ return;
972
+ const state = createControllable({
973
+ initial: this.value() ?? '',
974
+ onRequest: (request) => this.valueChangeRequest.emit(request),
975
+ });
976
+ if (state.request(next, reason, source))
977
+ this.value.set(next);
978
+ }
979
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
980
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlMenuRadioGroup, isStandalone: true, selector: "sl-menu-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChangeRequest: "valueChangeRequest" }, host: { attributes: { "data-part": "group", "role": "group" } }, exportAs: ["slMenuRadioGroup"], ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
981
+ }
982
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuRadioGroup, decorators: [{
983
+ type: Component,
984
+ args: [{
985
+ selector: 'sl-menu-radio-group',
986
+ standalone: true,
987
+ exportAs: 'slMenuRadioGroup',
988
+ changeDetection: ChangeDetectionStrategy.OnPush,
989
+ encapsulation: ViewEncapsulation.None,
990
+ host: { 'data-part': 'group', role: 'group' },
991
+ template: '<ng-content />',
992
+ }]
993
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], valueChangeRequest: [{ type: i0.Output, args: ["valueChangeRequest"] }] } });
994
+ /** Not focusable and not interactive, which is what the pattern asks of it. */
995
+ class SlMenuSeparator {
996
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
997
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuSeparator, isStandalone: true, selector: "hr[slMenuSeparator]", host: { attributes: { "data-part": "separator", "role": "separator", "aria-orientation": "horizontal" } }, ngImport: i0 });
998
+ }
999
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuSeparator, decorators: [{
1000
+ type: Directive,
1001
+ args: [{
1002
+ selector: 'hr[slMenuSeparator]',
1003
+ standalone: true,
1004
+ host: { 'data-part': 'separator', role: 'separator', 'aria-orientation': 'horizontal' },
1005
+ }]
1006
+ }] });
1007
+ /** What a menu whose items were all filtered away says instead of nothing. */
1008
+ class SlMenuEmpty {
1009
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1010
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlMenuEmpty, isStandalone: true, selector: "[slMenuEmpty]", host: { attributes: { "data-part": "empty" } }, ngImport: i0 });
1011
+ }
1012
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuEmpty, decorators: [{
1013
+ type: Directive,
1014
+ args: [{
1015
+ selector: '[slMenuEmpty]',
1016
+ standalone: true,
1017
+ host: { 'data-part': 'empty' },
1018
+ }]
1019
+ }] });
1020
+
1021
+ /**
1022
+ * The control that opens a menu.
1023
+ *
1024
+ * It is put on the consumer's own control — `@slotted/angular` composes with a
1025
+ * directive where React composes with a `render` prop, because that is what
1026
+ * each ecosystem writes. The three places it can sit decide what it becomes: a
1027
+ * plain control on its own, one of a bar's `menuitem`s inside `sl-menubar`, and
1028
+ * an item of the surface above when the control also carries `slMenuItem`.
1029
+ */
1030
+ class SlMenuTrigger {
1031
+ /** The menu this control opens. */
1032
+ menu = input.required({ ...(ngDevMode ? { debugName: "menu" } : /* istanbul ignore next */ {}), alias: 'slMenuTriggerFor' });
1033
+ element = inject(ElementRef).nativeElement;
1034
+ bar = inject(MENUBAR_SURFACE, { optional: true });
1035
+ /** The surface above, when this control is an item of one. */
1036
+ item = inject(SlMenuItem, { optional: true, self: true });
1037
+ parent = inject(SlMenu, { optional: true });
1038
+ isButton = this.element.tagName === 'BUTTON';
1039
+ onBar = this.parent === null && this.bar !== null;
1040
+ timer;
1041
+ intent = null;
1042
+ isSubmenu = computed(() => this.parent !== null, /* @ts-ignore */
1043
+ ...(ngDevMode ? [{ debugName: "isSubmenu" }] : /* istanbul ignore next */ []));
1044
+ constructor() {
1045
+ const destroyRef = inject(DestroyRef);
1046
+ this.item?.opensSubmenu.set(true);
1047
+ /* The trigger binds no `data-part` and no `role`. Two directives binding one
1048
+ attribute on one element race, and the order they run in is the
1049
+ compiler's: a `null` erased the part `slMenuItem` writes on a submenu's
1050
+ trigger, and the attribute's first value overwrote the `menu-trigger` part
1051
+ the split button binds. On a plain control both stay the control's own, so
1052
+ `slButton` stays the root of its family; on a submenu's item they are
1053
+ `slMenuItem`'s; only a bar's trigger takes them from here, written once
1054
+ because a bar's trigger is the bar's own element. */
1055
+ if (this.onBar) {
1056
+ this.element.setAttribute('data-part', 'trigger');
1057
+ this.element.setAttribute('role', 'menuitem');
1058
+ }
1059
+ /* The menu is told which control anchors it, and a bar is told which
1060
+ trigger answers to which menu, both as soon as the input resolves. */
1061
+ effect(() => {
1062
+ const menu = this.menu();
1063
+ menu.trigger.set(this.element);
1064
+ if (!this.onBar || this.bar === null)
1065
+ return;
1066
+ this.bar.register(menu.name(), this.element);
1067
+ });
1068
+ destroyRef.onDestroy(() => {
1069
+ this.cancelPending();
1070
+ if (this.onBar && this.bar !== null)
1071
+ this.bar.register(this.menu().name(), null);
1072
+ });
1073
+ }
1074
+ cancelPending() {
1075
+ if (this.timer !== undefined)
1076
+ clearTimeout(this.timer);
1077
+ this.timer = undefined;
1078
+ this.intent?.destroy();
1079
+ this.intent = null;
1080
+ }
1081
+ openWith(entry, reason, source) {
1082
+ const menu = this.menu();
1083
+ menu.entry.current = entry;
1084
+ menu.toggle(true, reason, source);
1085
+ }
1086
+ onClick(event) {
1087
+ const menu = this.menu();
1088
+ if (menu.resolvedDisabled())
1089
+ return;
1090
+ /* A submenu already open stays open under a press: the press is how a
1091
+ reader on a touch screen reaches it, not how they close it. */
1092
+ if (menu.isOpen() && this.isSubmenu())
1093
+ return;
1094
+ menu.entry.current = 'first';
1095
+ menu.toggle(!menu.isOpen(), 'pointer', event);
1096
+ }
1097
+ onKeyDown(source) {
1098
+ const event = source;
1099
+ const menu = this.menu();
1100
+ if (menu.resolvedDisabled())
1101
+ return;
1102
+ const direction = getComputedStyle(this.element).direction === 'rtl' ? 'rtl' : 'ltr';
1103
+ const inlineEnd = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';
1104
+ const vertical = this.bar?.orientation() === 'vertical';
1105
+ /* On a bar the block axis opens the menu and the inline axis moves along
1106
+ the bar; on a vertical bar the two exchange places, which is the swap the
1107
+ pattern's fifth note describes. A submenu's item opens on the inline end
1108
+ in both, because that is where the submenu is. */
1109
+ const opensDown = !this.isSubmenu() && (!this.onBar || !vertical) && event.key === 'ArrowDown';
1110
+ const opensUp = !this.isSubmenu() && (!this.onBar || !vertical) && event.key === 'ArrowUp';
1111
+ const opensInline = event.key === inlineEnd && (this.isSubmenu() || (this.onBar && vertical));
1112
+ if (opensDown || opensInline) {
1113
+ event.preventDefault();
1114
+ event.stopPropagation();
1115
+ this.openWith('first', 'keyboard', event);
1116
+ return;
1117
+ }
1118
+ if (opensUp) {
1119
+ event.preventDefault();
1120
+ this.openWith('last', 'keyboard', event);
1121
+ return;
1122
+ }
1123
+ if (this.isSubmenu() && (event.key === 'Enter' || event.key === ' ')) {
1124
+ event.preventDefault();
1125
+ event.stopPropagation();
1126
+ this.openWith('first', 'keyboard', event);
1127
+ }
1128
+ }
1129
+ /**
1130
+ * Hover opens a submenu, and opens a bar's menu only once the bar already has
1131
+ * one open: moving the pointer along a closed bar opens nothing, and along an
1132
+ * open one switches menus.
1133
+ */
1134
+ onPointerEnter(event) {
1135
+ const menu = this.menu();
1136
+ if (menu.resolvedDisabled())
1137
+ return;
1138
+ this.cancelPending();
1139
+ if (this.isSubmenu()) {
1140
+ if (!menu.resolvedOpenOnHover() || menu.isOpen())
1141
+ return;
1142
+ this.timer = setTimeout(() => this.openWith('first', 'pointer', event), menu.resolvedSubmenuOpenDelay());
1143
+ return;
1144
+ }
1145
+ if (this.onBar && this.bar !== null && this.bar.value() !== undefined) {
1146
+ if (this.bar.value() === menu.name())
1147
+ return;
1148
+ this.element.focus({ preventScroll: true });
1149
+ this.openWith('first', 'pointer', event);
1150
+ }
1151
+ }
1152
+ /**
1153
+ * The grace area: the submenu stays open while the pointer's own path still
1154
+ * points into it, so the diagonal from this item to the surface may cross
1155
+ * three items it has no interest in.
1156
+ */
1157
+ onPointerLeave(event) {
1158
+ if (this.timer !== undefined) {
1159
+ clearTimeout(this.timer);
1160
+ this.timer = undefined;
1161
+ }
1162
+ const menu = this.menu();
1163
+ if (!this.isSubmenu() || !menu.isOpen())
1164
+ return;
1165
+ const surface = menu.surface();
1166
+ if (surface === null)
1167
+ return;
1168
+ this.intent?.destroy();
1169
+ this.intent = createPointerIntent({
1170
+ target: () => surface.getBoundingClientRect(),
1171
+ origin: () => this.element.getBoundingClientRect(),
1172
+ timeout: menu.resolvedSubmenuCloseDelay(),
1173
+ onSettled: () => {
1174
+ if (this.element.matches(':hover') || surface.matches(':hover'))
1175
+ return;
1176
+ menu.toggle(false, 'pointer', event);
1177
+ },
1178
+ });
1179
+ }
1180
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1181
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: SlMenuTrigger, isStandalone: true, selector: "[slMenuTriggerFor]", inputs: { menu: { classPropertyName: "menu", publicName: "slMenuTriggerFor", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)", "pointerenter": "onPointerEnter($event)", "pointerleave": "onPointerLeave($event)" }, properties: { "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "menu().isOpen()", "attr.aria-controls": "menu().isOpen() ? menu().contentId : null", "attr.id": "menu().triggerId", "attr.type": "isButton ? \"button\" : null", "attr.data-open": "menu().isOpen() ? \"\" : null", "attr.data-disabled": "menu().resolvedDisabled() ? \"\" : null", "attr.aria-disabled": "menu().resolvedDisabled() ? true : null" } }, exportAs: ["slMenuTrigger"], ngImport: i0 });
1182
+ }
1183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlMenuTrigger, decorators: [{
1184
+ type: Directive,
1185
+ args: [{
1186
+ selector: '[slMenuTriggerFor]',
1187
+ standalone: true,
1188
+ exportAs: 'slMenuTrigger',
1189
+ host: {
1190
+ '[attr.aria-haspopup]': '"menu"',
1191
+ '[attr.aria-expanded]': 'menu().isOpen()',
1192
+ '[attr.aria-controls]': 'menu().isOpen() ? menu().contentId : null',
1193
+ '[attr.id]': 'menu().triggerId',
1194
+ '[attr.type]': 'isButton ? "button" : null',
1195
+ '[attr.data-open]': 'menu().isOpen() ? "" : null',
1196
+ '[attr.data-disabled]': 'menu().resolvedDisabled() ? "" : null',
1197
+ '[attr.aria-disabled]': 'menu().resolvedDisabled() ? true : null',
1198
+ '(click)': 'onClick($event)',
1199
+ '(keydown)': 'onKeyDown($event)',
1200
+ '(pointerenter)': 'onPointerEnter($event)',
1201
+ '(pointerleave)': 'onPointerLeave($event)',
1202
+ },
1203
+ }]
1204
+ }], ctorParameters: () => [], propDecorators: { menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "slMenuTriggerFor", required: true }] }] } });
1205
+
1206
+ /**
1207
+ * Generated bundle index. Do not edit.
1208
+ */
1209
+
1210
+ export { MENUBAR_SURFACE, MENU_DEFAULTS, MENU_ITEM_SELECTOR, SlMenu, SlMenuEmpty, SlMenuGroup, SlMenuHeader, SlMenuItem, SlMenuItemDescription, SlMenuItemIcon, SlMenuItemMeta, SlMenuRadioGroup, SlMenuSeparator, SlMenuTrigger, announceShortcut, injectMenuDefaults, provideMenuDefaults, shortcutLegends };
1211
+ //# sourceMappingURL=slotted-angular-menu.mjs.map