@slotted/angular 0.0.0-stage → 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
package/docs/menu.json ADDED
@@ -0,0 +1,922 @@
1
+ {
2
+ "family": "menu",
3
+ "ui": "menu",
4
+ "binding": "angular",
5
+ "catalog": {
6
+ "group": "Overlays",
7
+ "summary": "List of actions opened from a trigger."
8
+ },
9
+ "axes": {
10
+ "size": [
11
+ "sm",
12
+ "md",
13
+ "lg"
14
+ ],
15
+ "side": [
16
+ "bottom",
17
+ "top",
18
+ "inline-start",
19
+ "inline-end",
20
+ "left",
21
+ "right"
22
+ ],
23
+ "align": [
24
+ "start",
25
+ "center",
26
+ "end"
27
+ ],
28
+ "mount": [
29
+ "active",
30
+ "lazy",
31
+ "eager"
32
+ ],
33
+ "strategy": [
34
+ "absolute",
35
+ "fixed"
36
+ ],
37
+ "closeOnSelect": [
38
+ true,
39
+ false
40
+ ],
41
+ "loop": [
42
+ true,
43
+ false
44
+ ],
45
+ "typeahead": [
46
+ true,
47
+ false
48
+ ],
49
+ "openOnHover": [
50
+ true,
51
+ false
52
+ ],
53
+ "closeOnEscape": [
54
+ true,
55
+ false
56
+ ],
57
+ "closeOnOutsidePress": [
58
+ true,
59
+ false
60
+ ],
61
+ "flip": [
62
+ true,
63
+ false
64
+ ],
65
+ "shift": [
66
+ true,
67
+ false
68
+ ],
69
+ "hideWhenDetached": [
70
+ true,
71
+ false
72
+ ],
73
+ "portal": [
74
+ true,
75
+ false
76
+ ],
77
+ "disabled": [
78
+ true,
79
+ false
80
+ ]
81
+ },
82
+ "members": {
83
+ "menu": {
84
+ "nativeElement": "div",
85
+ "defaults": {
86
+ "size": "md",
87
+ "side": "bottom",
88
+ "align": "start",
89
+ "mount": "active",
90
+ "strategy": "absolute",
91
+ "closeOnSelect": true,
92
+ "loop": true,
93
+ "typeahead": true,
94
+ "openOnHover": true,
95
+ "closeOnEscape": true,
96
+ "closeOnOutsidePress": true,
97
+ "flip": true,
98
+ "shift": true,
99
+ "hideWhenDetached": true,
100
+ "portal": true,
101
+ "disabled": false,
102
+ "loading": false,
103
+ "sideOffset": 0,
104
+ "alignOffset": 0,
105
+ "collisionPadding": 8,
106
+ "submenuOpenDelay": 150,
107
+ "submenuCloseDelay": 300,
108
+ "typeaheadTimeout": 500
109
+ },
110
+ "capabilities": [
111
+ "open",
112
+ "checked",
113
+ "selection",
114
+ "placement",
115
+ "size",
116
+ "appearance",
117
+ "disabled",
118
+ "loading",
119
+ "content",
120
+ "wiring"
121
+ ],
122
+ "states": [
123
+ "default",
124
+ "hover",
125
+ "active",
126
+ "focus-visible",
127
+ "open",
128
+ "disabled",
129
+ "checked",
130
+ "loading"
131
+ ],
132
+ "parts": [
133
+ "root",
134
+ "content",
135
+ "header",
136
+ "group",
137
+ "group-label",
138
+ "item",
139
+ "indicator",
140
+ "icon",
141
+ "label",
142
+ "description",
143
+ "meta",
144
+ "shortcut",
145
+ "separator",
146
+ "empty"
147
+ ]
148
+ }
149
+ },
150
+ "docs": {
151
+ "menu": {
152
+ "imports": {
153
+ "source": "import { SlMenu, SlMenuEmpty, SlMenuGroup, SlMenuHeader, SlMenuItem, SlMenuItemDescription, SlMenuItemIcon, SlMenuItemMeta, SlMenuRadioGroup, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';",
154
+ "selector": "sl-menu, [slMenuTriggerFor], button[slMenuItem], a[slMenuItem], button[slMenuCheckboxItem], button[slMenuRadioItem], sl-menu-group, sl-menu-radio-group, hr[slMenuSeparator], [slMenuHeader], [slMenuItemIcon], [slMenuItemDescription], [slMenuItemMeta], [slMenuEmpty]",
155
+ "exportAs": "slMenu, slMenuTrigger, slMenuItem, slMenuGroup, slMenuRadioGroup"
156
+ },
157
+ "anatomy": [
158
+ {
159
+ "part": "root",
160
+ "element": "div, built into the portal when the menu opens",
161
+ "required": true,
162
+ "purpose": "The layer the menu is positioned on. It carries data-ui=\"menu\", the resolved size, side and align, and data-open while the menu is open. A layer kept in the document by mount=\"lazy\" or \"eager\" carries inert while it is closed."
163
+ },
164
+ {
165
+ "part": "content",
166
+ "element": "div",
167
+ "required": true,
168
+ "purpose": "The painted surface, carrying role=\"menu\". It lays out the columns every item uses, is never taller than the room left in the window, and scrolls inside that height."
169
+ },
170
+ {
171
+ "part": "header",
172
+ "element": "div[slMenuHeader]",
173
+ "required": false,
174
+ "purpose": "Who the menu belongs to: an avatar or a mark, a name in an element with data-part=\"label\" and a line under it in slMenuItemDescription. It is not an item and never takes focus; the surface references it with aria-describedby, so a screen reader announces it once as the menu opens."
175
+ },
176
+ {
177
+ "part": "group",
178
+ "element": "sl-menu-group, or sl-menu-radio-group",
179
+ "required": false,
180
+ "purpose": "A run of items with role=\"group\", named by its label. Its items keep the menu's columns, so their labels line up with the items outside the group."
181
+ },
182
+ {
183
+ "part": "group-label",
184
+ "element": "div",
185
+ "required": false,
186
+ "purpose": "The name of a group, which the group references with aria-labelledby."
187
+ },
188
+ {
189
+ "part": "item",
190
+ "element": "button[slMenuItem], or a[slMenuItem] for a link",
191
+ "required": true,
192
+ "purpose": "One command, option or choice. slMenuItem gives role=\"menuitem\", slMenuCheckboxItem menuitemcheckbox and slMenuRadioItem menuitemradio. A disabled item keeps its place among the items the arrow keys reach and carries aria-disabled, because the WAI-ARIA pattern keeps disabled items focusable."
193
+ },
194
+ {
195
+ "part": "indicator",
196
+ "element": "span, drawn by the item",
197
+ "required": false,
198
+ "purpose": "The check of a checkbox item or the dot of a radio item. Its box is present whether or not the item is checked, so the labels do not move when an option changes."
199
+ },
200
+ {
201
+ "part": "icon",
202
+ "element": "span[slMenuItemIcon]",
203
+ "required": false,
204
+ "purpose": "The icon in the first column: an slGlyph inside an slIcon, or any element you pass. The column sizes it and does not paint it. It shares the column with the indicator."
205
+ },
206
+ {
207
+ "part": "label",
208
+ "element": "span, drawn by the item around its content",
209
+ "required": true,
210
+ "purpose": "The item's text, and the only column that wraps when the surface is narrow."
211
+ },
212
+ {
213
+ "part": "description",
214
+ "element": "span[slMenuItemDescription]",
215
+ "required": false,
216
+ "purpose": "The line under the label, which the item references with aria-describedby, so a screen reader announces the command as the name and this line as its description."
217
+ },
218
+ {
219
+ "part": "meta",
220
+ "element": "span[slMenuItemMeta]",
221
+ "required": false,
222
+ "purpose": "A count, a status or the value a submenu holds, end-aligned in its own column before the shortcut, so the values of every item line up. It is part of the accessible name; typeahead matches the label alone."
223
+ },
224
+ {
225
+ "part": "shortcut",
226
+ "element": "span, drawn by the item",
227
+ "required": false,
228
+ "purpose": "The shortcut printed for the platform: ⌘K on macOS, Ctrl+K elsewhere. It is aria-hidden, because the item announces the shortcut with aria-keyshortcuts."
229
+ },
230
+ {
231
+ "part": "separator",
232
+ "element": "hr[slMenuSeparator]",
233
+ "required": false,
234
+ "purpose": "A line between two runs of items. It is never focused and does nothing when pressed."
235
+ },
236
+ {
237
+ "part": "empty",
238
+ "element": "[slMenuEmpty]",
239
+ "required": false,
240
+ "purpose": "The message the surface shows while it is loading or when it holds no items. The surface keeps its width instead of collapsing around it."
241
+ }
242
+ ],
243
+ "api": [
244
+ {
245
+ "name": "open",
246
+ "type": "model<boolean>",
247
+ "defaultValue": "false",
248
+ "appliesTo": "sl-menu",
249
+ "description": "Whether the menu is open. Bind [(open)] to read and write it; on a menubar the bar holds it instead."
250
+ },
251
+ {
252
+ "name": "value",
253
+ "type": "string | undefined",
254
+ "defaultValue": "—",
255
+ "appliesTo": "sl-menu, sl-menu-radio-group, button[slMenuRadioItem]",
256
+ "description": "On an sl-menu inside sl-menubar, the name the bar knows it by; a menu on its own needs none. On sl-menu-radio-group, the chosen value, bound with [(value)]. On a radio item, the value the item stands for."
257
+ },
258
+ {
259
+ "name": "checked",
260
+ "type": "model<boolean>",
261
+ "defaultValue": "false",
262
+ "appliesTo": "button[slMenuCheckboxItem]",
263
+ "description": "Whether the option is on. Bind [(checked)] to read and write it."
264
+ },
265
+ {
266
+ "name": "size",
267
+ "type": "'sm' | 'md' | 'lg'",
268
+ "defaultValue": "md",
269
+ "appliesTo": "sl-menu",
270
+ "description": "The width of the surface and the height of its items."
271
+ },
272
+ {
273
+ "name": "side",
274
+ "type": "'top' | 'bottom' | 'inline-start' | 'inline-end' | 'left' | 'right'",
275
+ "defaultValue": "bottom",
276
+ "appliesTo": "sl-menu",
277
+ "description": "The edge of the trigger the surface opens from. inline-start and inline-end follow the reading direction."
278
+ },
279
+ {
280
+ "name": "align",
281
+ "type": "'start' | 'center' | 'end'",
282
+ "defaultValue": "start",
283
+ "appliesTo": "sl-menu",
284
+ "description": "Where the surface sits along that edge."
285
+ },
286
+ {
287
+ "name": "mount",
288
+ "type": "'active' | 'lazy' | 'eager'",
289
+ "defaultValue": "active",
290
+ "appliesTo": "sl-menu",
291
+ "description": "When the surface is in the document: only while open, from the first open on, or from the start. A surface kept while closed carries inert."
292
+ },
293
+ {
294
+ "name": "strategy",
295
+ "type": "'absolute' | 'fixed'",
296
+ "defaultValue": "absolute",
297
+ "appliesTo": "sl-menu",
298
+ "description": "The CSS position the layer is placed with."
299
+ },
300
+ {
301
+ "name": "closeOnSelect",
302
+ "type": "boolean",
303
+ "defaultValue": "true",
304
+ "appliesTo": "sl-menu, button[slMenuItem]",
305
+ "description": "Whether running an item closes the menu. Checkbox and radio items keep it open unless they set it themselves."
306
+ },
307
+ {
308
+ "name": "loop",
309
+ "type": "boolean",
310
+ "defaultValue": "true",
311
+ "appliesTo": "sl-menu",
312
+ "description": "Whether the arrow keys wrap from the last item to the first."
313
+ },
314
+ {
315
+ "name": "typeahead",
316
+ "type": "boolean",
317
+ "defaultValue": "true",
318
+ "appliesTo": "sl-menu",
319
+ "description": "Whether typing moves focus to the item whose label starts with the typed text."
320
+ },
321
+ {
322
+ "name": "openOnHover",
323
+ "type": "boolean",
324
+ "defaultValue": "true",
325
+ "appliesTo": "sl-menu",
326
+ "description": "Whether a submenu opens when the pointer rests on its item."
327
+ },
328
+ {
329
+ "name": "closeOnEscape",
330
+ "type": "boolean",
331
+ "defaultValue": "true",
332
+ "appliesTo": "sl-menu",
333
+ "description": "Whether Escape closes the menu that holds focus."
334
+ },
335
+ {
336
+ "name": "closeOnOutsidePress",
337
+ "type": "boolean",
338
+ "defaultValue": "true",
339
+ "appliesTo": "sl-menu",
340
+ "description": "Whether a press outside the menu closes every open menu."
341
+ },
342
+ {
343
+ "name": "flip",
344
+ "type": "boolean",
345
+ "defaultValue": "true",
346
+ "appliesTo": "sl-menu",
347
+ "description": "Whether the surface moves to the opposite side when it would leave the window."
348
+ },
349
+ {
350
+ "name": "shift",
351
+ "type": "boolean",
352
+ "defaultValue": "true",
353
+ "appliesTo": "sl-menu",
354
+ "description": "Whether the surface slides along its edge to stay in the window."
355
+ },
356
+ {
357
+ "name": "hideWhenDetached",
358
+ "type": "boolean",
359
+ "defaultValue": "true",
360
+ "appliesTo": "sl-menu",
361
+ "description": "Whether the surface hides once its trigger has scrolled out of view."
362
+ },
363
+ {
364
+ "name": "portal",
365
+ "type": "boolean",
366
+ "defaultValue": "true",
367
+ "appliesTo": "sl-menu",
368
+ "description": "Whether the layer is built at the end of the document."
369
+ },
370
+ {
371
+ "name": "disabled",
372
+ "type": "boolean",
373
+ "defaultValue": "false",
374
+ "appliesTo": "sl-menu, button[slMenuItem]",
375
+ "description": "A disabled menu never opens. A disabled item stays focusable and runs nothing."
376
+ },
377
+ {
378
+ "name": "loading",
379
+ "type": "boolean",
380
+ "defaultValue": "false",
381
+ "appliesTo": "sl-menu",
382
+ "description": "Whether the items are on their way. The surface keeps its width, sets aria-busy and shows the slMenuEmpty message."
383
+ },
384
+ {
385
+ "name": "sideOffset",
386
+ "type": "number",
387
+ "defaultValue": "0",
388
+ "appliesTo": "sl-menu",
389
+ "description": "Extra distance from the trigger, in pixels, beyond the layer's own gap."
390
+ },
391
+ {
392
+ "name": "alignOffset",
393
+ "type": "number",
394
+ "defaultValue": "0",
395
+ "appliesTo": "sl-menu",
396
+ "description": "Distance along the alignment edge, in pixels."
397
+ },
398
+ {
399
+ "name": "collisionPadding",
400
+ "type": "number",
401
+ "defaultValue": "8",
402
+ "appliesTo": "sl-menu",
403
+ "description": "The distance, in pixels, the surface keeps from the edge of the window."
404
+ },
405
+ {
406
+ "name": "submenuOpenDelay",
407
+ "type": "number",
408
+ "defaultValue": "150",
409
+ "appliesTo": "sl-menu",
410
+ "description": "How long, in milliseconds, the pointer rests on an item before its submenu opens."
411
+ },
412
+ {
413
+ "name": "submenuCloseDelay",
414
+ "type": "number",
415
+ "defaultValue": "300",
416
+ "appliesTo": "sl-menu",
417
+ "description": "How long, in milliseconds, a submenu stays open while the pointer travels toward it without reaching it."
418
+ },
419
+ {
420
+ "name": "typeaheadTimeout",
421
+ "type": "number",
422
+ "defaultValue": "500",
423
+ "appliesTo": "sl-menu",
424
+ "description": "How long, in milliseconds, typed letters keep adding to one search."
425
+ },
426
+ {
427
+ "name": "shortcut",
428
+ "type": "string",
429
+ "defaultValue": "—",
430
+ "appliesTo": "button[slMenuItem]",
431
+ "description": "A shortcut written as Mod+K, printed for the platform and announced with aria-keyshortcuts. The menu does not bind the key."
432
+ },
433
+ {
434
+ "name": "textValue",
435
+ "type": "string",
436
+ "defaultValue": "—",
437
+ "appliesTo": "button[slMenuItem]",
438
+ "description": "The text typeahead matches, when the label does not start with the word a reader would type."
439
+ },
440
+ {
441
+ "name": "tone",
442
+ "type": "'accent' | 'secondary' | 'success' | 'warning' | 'danger'",
443
+ "defaultValue": "—",
444
+ "appliesTo": "button[slMenuItem]",
445
+ "description": "The theme tone of the label, the icon and the highlight. A destructive command takes danger."
446
+ },
447
+ {
448
+ "name": "label",
449
+ "type": "string",
450
+ "defaultValue": "—",
451
+ "appliesTo": "sl-menu-group",
452
+ "description": "The name of the group, rendered as its group-label part."
453
+ },
454
+ {
455
+ "name": "slMenuTriggerFor",
456
+ "type": "SlMenu",
457
+ "defaultValue": "—",
458
+ "appliesTo": "[slMenuTriggerFor]",
459
+ "description": "The menu a control opens. It goes on your own button; on an slMenuItem it opens a submenu."
460
+ },
461
+ {
462
+ "name": "aria-label",
463
+ "type": "string",
464
+ "defaultValue": "—",
465
+ "appliesTo": "sl-menu",
466
+ "description": "Names the surface itself, instead of the name it takes from its trigger."
467
+ },
468
+ {
469
+ "name": "aria-describedby",
470
+ "type": "string",
471
+ "defaultValue": "—",
472
+ "appliesTo": "sl-menu",
473
+ "description": "The ids of the elements that describe the menu, written on the element with role=\"menu\"."
474
+ }
475
+ ],
476
+ "composition": [
477
+ {
478
+ "name": "provideMenuDefaults",
479
+ "type": "provider",
480
+ "defaultValue": "—",
481
+ "appliesTo": "Application",
482
+ "description": "Sets any axis once, in the application config or on a route. A value set on one menu still wins."
483
+ },
484
+ {
485
+ "name": "slMenuTriggerFor",
486
+ "type": "directive",
487
+ "defaultValue": "—",
488
+ "appliesTo": "Any control",
489
+ "description": "Goes on your own element instead of replacing it: the wiring, the state attributes and the keyboard arrive on the button you already have, which keeps its own part and styles."
490
+ },
491
+ {
492
+ "name": "slMenuHeader",
493
+ "type": "directive",
494
+ "defaultValue": "—",
495
+ "appliesTo": "sl-menu",
496
+ "description": "The block above the commands. Its children are the media, an element with data-part=\"label\" and an slMenuItemDescription, and the surface is described by it."
497
+ },
498
+ {
499
+ "name": "slMenuItemIcon, slMenuItemDescription, slMenuItemMeta",
500
+ "type": "directive",
501
+ "defaultValue": "—",
502
+ "appliesTo": "Item content",
503
+ "description": "Project an element into the icon, description or meta column of the item."
504
+ },
505
+ {
506
+ "name": "slMenuEmpty",
507
+ "type": "directive",
508
+ "defaultValue": "—",
509
+ "appliesTo": "sl-menu",
510
+ "description": "The message shown while loading is set or when the menu holds no items."
511
+ },
512
+ {
513
+ "name": "exportAs",
514
+ "type": "template reference",
515
+ "defaultValue": "—",
516
+ "appliesTo": "sl-menu, [slMenuTriggerFor]",
517
+ "description": "A template reference such as #menu=\"slMenu\" reaches the instance, for toggle(), closeAll() and the resolved axes."
518
+ },
519
+ {
520
+ "name": "ng-content",
521
+ "type": "projection",
522
+ "defaultValue": "—",
523
+ "appliesTo": "sl-menu, sl-menu-group",
524
+ "description": "The items are your own elements, projected into the surface the menu builds when it opens."
525
+ },
526
+ {
527
+ "name": "slMenuItem, slMenuCheckboxItem, slMenuRadioItem",
528
+ "type": "attribute",
529
+ "defaultValue": "—",
530
+ "appliesTo": "button, a",
531
+ "description": "The attribute you write decides the role of the item. slMenuItem also goes on an a for a link item."
532
+ }
533
+ ],
534
+ "events": [
535
+ {
536
+ "name": "openChange",
537
+ "payload": "boolean",
538
+ "when": "After the menu opens or closes, as the write-back of [(open)]."
539
+ },
540
+ {
541
+ "name": "openChangeRequest",
542
+ "payload": "ChangeRequest<boolean>",
543
+ "when": "Before the menu opens or closes. request.reason is pointer, keyboard, escape, outsidePress, select, dismiss or programmatic, request.source is the event, and request.cancel() refuses the change."
544
+ },
545
+ {
546
+ "name": "checkedChange, checkedChangeRequest",
547
+ "payload": "boolean, ChangeRequest<boolean>",
548
+ "when": "After and before a checkbox item changes. The request's reason is pointer or keyboard."
549
+ },
550
+ {
551
+ "name": "valueChange, valueChangeRequest",
552
+ "payload": "string, ChangeRequest<string>",
553
+ "when": "After and before a radio group changes its value. The request's reason is pointer or keyboard."
554
+ },
555
+ {
556
+ "name": "select",
557
+ "payload": "MenuSelectEvent",
558
+ "when": "When an item runs. event.reason is pointer or keyboard, and event.preventDefault() keeps the menu open for this press only."
559
+ }
560
+ ],
561
+ "accessibility": [
562
+ "An item is a native button, so Enter and Space run it and the pointer behaves as the browser's own. role=\"menuitem\" replaces role=\"button\", so a screen reader announces a menu item. A link item is an a that keeps its href and takes the same role.",
563
+ "Menu supplies the keyboard of the WAI-ARIA menu pattern: the arrow keys move and wrap, Home and End reach the ends, letters move by typeahead, the inline-end arrow opens a submenu and the inline-start arrow closes it, Escape closes the menu that holds focus, and Tab closes every menu and moves focus past the trigger.",
564
+ "A disabled item stays focusable and carries aria-disabled instead of the native disabled attribute, so a keyboard user can still find a command that is unavailable. A natively disabled button cannot take focus.",
565
+ "A header is not an item and never takes focus, because role=\"menu\" owns only items, groups and separators. The surface references it with aria-describedby, joined to any description you give, so a screen reader announces who the menu belongs to once, as it opens.",
566
+ "The surface is named by its trigger, or by its own aria-label. A checkbox or radio item announces its state through aria-checked, a group is named by its label, and a shortcut is announced through aria-keyshortcuts while the printed keys are hidden, so the item's name stays the command."
567
+ ]
568
+ }
569
+ },
570
+ "tokens": [
571
+ "--slotted-border-subtle",
572
+ "--slotted-border-width-thin",
573
+ "--slotted-control-font-size-lg",
574
+ "--slotted-control-font-size-md",
575
+ "--slotted-control-font-size-sm",
576
+ "--slotted-control-gap-lg",
577
+ "--slotted-control-gap-md",
578
+ "--slotted-control-gap-sm",
579
+ "--slotted-control-height-lg",
580
+ "--slotted-control-height-md",
581
+ "--slotted-control-height-sm",
582
+ "--slotted-control-icon-size-lg",
583
+ "--slotted-control-icon-size-md",
584
+ "--slotted-control-icon-size-sm",
585
+ "--slotted-control-padding-inline-lg",
586
+ "--slotted-control-padding-inline-md",
587
+ "--slotted-control-padding-inline-sm",
588
+ "--slotted-control-radius",
589
+ "--slotted-control-transition-duration",
590
+ "--slotted-control-transition-easing",
591
+ "--slotted-disabled-foreground",
592
+ "--slotted-duration-medium",
593
+ "--slotted-duration-short",
594
+ "--slotted-easing-enter",
595
+ "--slotted-easing-exit",
596
+ "--slotted-easing-standard",
597
+ "--slotted-focus-ring-color",
598
+ "--slotted-focus-ring-width",
599
+ "--slotted-font-family-sans",
600
+ "--slotted-font-size-xs",
601
+ "--slotted-font-weight-semibold",
602
+ "--slotted-line-height-md",
603
+ "--slotted-line-height-sm",
604
+ "--slotted-menu-border-color",
605
+ "--slotted-menu-gap",
606
+ "--slotted-menu-highlight",
607
+ "--slotted-menu-highlight-active",
608
+ "--slotted-menu-item-radius",
609
+ "--slotted-menu-measure",
610
+ "--slotted-menu-measure-lg",
611
+ "--slotted-menu-measure-sm",
612
+ "--slotted-menu-min-measure",
613
+ "--slotted-menu-padding-block",
614
+ "--slotted-menu-padding-inline",
615
+ "--slotted-menu-radius",
616
+ "--slotted-menu-separator-color",
617
+ "--slotted-menu-shadow",
618
+ "--slotted-menu-surface",
619
+ "--slotted-menu-text",
620
+ "--slotted-menu-text-muted",
621
+ "--slotted-radius-lg",
622
+ "--slotted-shadow-md",
623
+ "--slotted-space-1",
624
+ "--slotted-space-2",
625
+ "--slotted-space-5",
626
+ "--slotted-space-6",
627
+ "--slotted-surface-raised",
628
+ "--slotted-text",
629
+ "--slotted-text-muted",
630
+ "--slotted-tone-accent-subtle-active",
631
+ "--slotted-tone-accent-surface",
632
+ "--slotted-tone-accent-text",
633
+ "--slotted-tone-danger-subtle-active",
634
+ "--slotted-tone-danger-surface",
635
+ "--slotted-tone-danger-text",
636
+ "--slotted-tone-secondary-subtle-active",
637
+ "--slotted-tone-secondary-subtle-hover",
638
+ "--slotted-tone-secondary-surface",
639
+ "--slotted-tone-secondary-text",
640
+ "--slotted-tone-success-subtle-active",
641
+ "--slotted-tone-success-surface",
642
+ "--slotted-tone-success-text",
643
+ "--slotted-tone-warning-subtle-active",
644
+ "--slotted-tone-warning-surface",
645
+ "--slotted-tone-warning-text",
646
+ "--slotted-z-index-popover"
647
+ ],
648
+ "examples": [
649
+ {
650
+ "id": "playground",
651
+ "title": "Playground",
652
+ "note": "One menu with every input on it, driven by the controls under the canvas. Change side and align and watch the surface move around the control that opened it.",
653
+ "language": "html",
654
+ "source": "<button slButton variant=\"outline\" [slMenuTriggerFor]=\"document\">Document</button>\n<sl-menu #document>\n <button slMenuItem shortcut=\"Mod+D\">Duplicate</button>\n <button slMenuItem [disabled]=\"true\">Publish</button>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\">Delete…</button>\n</sl-menu>\n",
655
+ "verdict": "excerpt"
656
+ },
657
+ {
658
+ "id": "commands",
659
+ "title": "Commands",
660
+ "note": "The default: an item runs and the menu closes. The second asks to stay open, which is what a command a reader repeats needs.",
661
+ "language": "html",
662
+ "source": "<button slMenuItem (select)=\"duplicate($event.reason)\">Duplicate</button>\n<button slMenuItem [closeOnSelect]=\"false\" (select)=\"zoomIn()\">Zoom in</button>\n",
663
+ "verdict": "excerpt"
664
+ },
665
+ {
666
+ "id": "icons",
667
+ "title": "Icons",
668
+ "note": "Two items carry a mark and two do not, and every label still starts on the same line: the column exists for the menu rather than for the item.",
669
+ "language": "ts",
670
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemIcon,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-icons',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuItemIcon,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"invoice\">\n Invoice INV-2041\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #invoice>\n <button slMenuItem shortcut=\"Mod+D\">\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"copy\"></svg></span\n ></span>\n Duplicate\n </button>\n <button slMenuItem shortcut=\"Mod+Enter\">\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"external\"></svg></span\n ></span>\n Open in new tab\n </button>\n <button slMenuItem shortcut=\"Mod+P\">\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"file-text\"></svg></span\n ></span>\n Print\n </button>\n <button slMenuItem>\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"pin\"></svg></span\n ></span>\n Pin to dashboard\n </button>\n <button slMenuItem shortcut=\"Shift+Mod+R\">Rename…</button>\n <hr slMenuSeparator />\n <button slMenuItem shortcut=\"Mod+Backspace\" tone=\"danger\">\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"trash\"></svg></span\n ></span>\n Delete draft\n </button>\n </sl-menu>\n `,\n})\nexport class MenuIcons {}\n",
671
+ "verdict": "example"
672
+ },
673
+ {
674
+ "id": "shortcuts",
675
+ "title": "Shortcuts",
676
+ "note": "Written once as Mod+S and printed as ⌘S on a Mac and Ctrl+S elsewhere. The legend is hidden from a screen reader, which hears aria-keyshortcuts instead.",
677
+ "language": "html",
678
+ "source": "<button slMenuItem shortcut=\"Mod+S\">Save</button>\n<button slMenuItem shortcut=\"Shift+Mod+S\">Save as…</button>\n",
679
+ "verdict": "excerpt"
680
+ },
681
+ {
682
+ "id": "checkbox-items",
683
+ "title": "Checkbox items",
684
+ "note": "Each item holds a state of its own and the menu stays open, so a reader can turn three things on without opening it three times. Space toggles without closing.",
685
+ "language": "ts",
686
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlText } from '@slotted/angular/typography';\n\n@Component({\n selector: 'app-menu-checkbox-items',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlInline, SlMenu, SlMenuItem, SlMenuTrigger, SlText],\n template: `\n <div slInline align=\"center\" [gap]=\"3\">\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"show\">\n Show\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #show>\n <button slMenuCheckboxItem [(checked)]=\"archived\">Archived orders</button>\n <button slMenuCheckboxItem [(checked)]=\"test\">Test orders</button>\n <button slMenuCheckboxItem [(checked)]=\"cancelled\">Cancelled orders</button>\n </sl-menu>\n <span slText size=\"sm\" tone=\"muted\">{{ summary() }}</span>\n </div>\n `,\n})\nexport class MenuCheckboxItems {\n protected readonly archived = signal(false);\n protected readonly test = signal(false);\n protected readonly cancelled = signal(true);\n protected readonly summary = computed(() => {\n const shown = [\n this.archived() && 'archived',\n this.test() && 'test',\n this.cancelled() && 'cancelled',\n ].filter(Boolean);\n return shown.length === 0 ? 'Open orders only' : `Including ${shown.join(', ')}`;\n });\n}\n",
687
+ "verdict": "example"
688
+ },
689
+ {
690
+ "id": "radio-items",
691
+ "title": "Radio items",
692
+ "note": "One value across the group, chosen among the items inside it. The mark sits in the same column an icon would, so the labels stay in line.",
693
+ "language": "ts",
694
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuRadioGroup, SlMenuTrigger } from '@slotted/angular/menu';\n\nconst GROUPINGS = [\n { value: 'none', label: 'No grouping' },\n { value: 'status', label: 'Status' },\n { value: 'customer', label: 'Customer' },\n { value: 'warehouse', label: 'Warehouse' },\n];\n\n@Component({\n selector: 'app-menu-radio-items',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlMenu, SlMenuItem, SlMenuRadioGroup, SlMenuTrigger],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"group\">\n Group by: {{ current() }}\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #group>\n <sl-menu-radio-group aria-label=\"Group orders by\" [(value)]=\"grouping\">\n @for (option of groupings; track option.value) {\n <button slMenuRadioItem [value]=\"option.value\">{{ option.label }}</button>\n }\n </sl-menu-radio-group>\n </sl-menu>\n `,\n})\nexport class MenuRadioItems {\n protected readonly groupings = GROUPINGS;\n protected readonly grouping = signal<string | undefined>('status');\n protected readonly current = computed(\n () => GROUPINGS.find((option) => option.value === this.grouping())?.label,\n );\n}\n",
695
+ "verdict": "example"
696
+ },
697
+ {
698
+ "id": "groups",
699
+ "title": "Groups",
700
+ "note": "A label names the run under it and the group points at it, so a reader hears \"Sort by\" before the options rather than a heading belonging to nothing.",
701
+ "language": "ts",
702
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuGroup,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-groups',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuGroup,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"order\">\n SO-10482\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #order>\n <sl-menu-group label=\"Fulfilment\">\n <button slMenuItem>Mark as packed</button>\n <button slMenuItem>Mark as shipped</button>\n <button slMenuItem>Print packing slip</button>\n </sl-menu-group>\n <hr slMenuSeparator />\n <sl-menu-group label=\"Billing\">\n <button slMenuItem>Send invoice</button>\n <button slMenuItem>Record payment…</button>\n </sl-menu-group>\n <hr slMenuSeparator />\n <sl-menu-group label=\"Customer\">\n <button slMenuItem>Open Northwind Traders</button>\n <button slMenuItem>Email the buyer</button>\n </sl-menu-group>\n </sl-menu>\n `,\n})\nexport class MenuGroups {}\n",
703
+ "verdict": "example"
704
+ },
705
+ {
706
+ "id": "submenu",
707
+ "title": "Submenus",
708
+ "note": "A menu nested in a menu. Hover opens it after a pause, the inline-end arrow opens it from the keyboard, and the pointer may cut diagonally across the items between.",
709
+ "language": "html",
710
+ "source": "<sl-menu #share>\n <button slMenuItem>Copy link</button>\n <button slMenuItem [slMenuTriggerFor]=\"sendTo\">Send to</button>\n <sl-menu #sendTo>\n <button slMenuItem>Slack</button>\n </sl-menu>\n</sl-menu>\n",
711
+ "verdict": "excerpt"
712
+ },
713
+ {
714
+ "id": "submenu-open",
715
+ "title": "Submenu open",
716
+ "note": "The submenu as it lands: its panel one gap out from the parent surface, not against the item, and its first item level with the item that opened it. Every other scene keeps its submenu closed until it is hovered or the inline-end arrow asks for it.",
717
+ "language": "html",
718
+ "source": "<sl-menu #sendTo [open]=\"true\">\n <button slMenuItem>Slack</button>\n</sl-menu>\n",
719
+ "verdict": "excerpt"
720
+ },
721
+ {
722
+ "id": "header",
723
+ "title": "Header",
724
+ "note": "An account menu opens with who it belongs to. The avatar starts at the icons' edge, the arrows begin at the first command, and a reader hears the name and the address as the surface's description.",
725
+ "language": "html",
726
+ "source": "<sl-menu #account>\n <div slMenuHeader>\n <span slAvatar name=\"Ada Lovelace\" size=\"md\" decorative></span>\n <span data-part=\"label\">Ada Lovelace</span>\n <span slMenuItemDescription>ada@analytical.engine</span>\n </div>\n <hr slMenuSeparator />\n <button slMenuItem>Profile</button>\n <button slMenuItem tone=\"danger\">Sign out</button>\n</sl-menu>\n",
727
+ "verdict": "excerpt"
728
+ },
729
+ {
730
+ "id": "meta",
731
+ "title": "Meta",
732
+ "note": "Counts and the value a submenu holds, in a column of their own: the numbers end on one edge, the shortcuts keep theirs, and a submenu trigger shows its current value before the chevron.",
733
+ "language": "ts",
734
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemMeta,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\nconst VIEWS = [\n { label: 'Awaiting payment', count: '18' },\n { label: 'Ready to ship', count: '42' },\n { label: 'On hold', count: '3' },\n { label: 'Returns', count: '7' },\n];\n\n@Component({\n selector: 'app-menu-meta',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuItemMeta,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"viewMenu\">\n All orders\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #viewMenu>\n <button slMenuItem>All orders <span slMenuItemMeta>1,284</span></button>\n <hr slMenuSeparator />\n @for (view of views; track view.label) {\n <button slMenuItem>\n {{ view.label }} <span slMenuItemMeta>{{ view.count }}</span>\n </button>\n }\n </sl-menu>\n `,\n})\nexport class MenuMeta {\n protected readonly views = VIEWS;\n}\n",
735
+ "verdict": "example"
736
+ },
737
+ {
738
+ "id": "tone",
739
+ "title": "Tone",
740
+ "note": "A destructive command reads as destructive before it is read at all: the tone paints the label, the mark and the highlight together, in all three schemes.",
741
+ "language": "html",
742
+ "source": "<button slMenuItem tone=\"danger\" (select)=\"remove()\">\n Delete document\n <span slMenuItemDescription>This cannot be undone.</span>\n</button>\n",
743
+ "verdict": "excerpt"
744
+ },
745
+ {
746
+ "id": "placement",
747
+ "title": "Placement",
748
+ "note": "The surface hangs from the start edge of its control by default, and flips or slides rather than leaving the screen. Both inline values mirror in a right-to-left document.",
749
+ "language": "ts",
750
+ "source": "import { Component } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlInline } from '@slotted/angular/inline';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n type MenuAlign,\n type MenuSide,\n} from '@slotted/angular/menu';\n\nconst PLACEMENTS: { label: string; side: MenuSide; align: MenuAlign }[] = [\n { label: 'Bottom, start', side: 'bottom', align: 'start' },\n { label: 'Bottom, end', side: 'bottom', align: 'end' },\n { label: 'Top, start', side: 'top', align: 'start' },\n { label: 'Inline end', side: 'inline-end', align: 'start' },\n];\n\n@Component({\n selector: 'app-menu-placement',\n imports: [SlButton, SlInline, SlMenu, SlMenuItem, SlMenuTrigger],\n template: `\n <div slInline align=\"center\" wrap=\"wrap\" [gap]=\"3\">\n @for (placement of placements; track placement.label) {\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"menu\">{{ placement.label }}</button>\n <sl-menu #menu [align]=\"placement.align\" [side]=\"placement.side\">\n <button slMenuItem>Rename…</button>\n <button slMenuItem>Duplicate</button>\n <button slMenuItem>Archive</button>\n </sl-menu>\n }\n </div>\n `,\n})\nexport class MenuPlacement {\n protected readonly placements = PLACEMENTS;\n}\n",
751
+ "verdict": "example"
752
+ },
753
+ {
754
+ "id": "scrolling",
755
+ "title": "A menu taller than the screen",
756
+ "note": "The surface is bounded by the room the positioner reports and scrolls inside it, so thirty commands never run off the bottom of the window.",
757
+ "language": "html",
758
+ "source": "<sl-menu #moveTo aria-label=\"Move to\">\n @for (folder of folders; track folder) {\n <button slMenuItem>{{ folder }}</button>\n }\n</sl-menu>\n",
759
+ "verdict": "excerpt"
760
+ },
761
+ {
762
+ "id": "states",
763
+ "title": "States",
764
+ "note": "Disabled, checked, the parent item while its submenu is open, and the surface waiting for its items. A disabled item still takes focus and still runs nothing.",
765
+ "language": "html",
766
+ "source": "<sl-menu #labels [loading]=\"pending()\">\n <button slMenuItem [disabled]=\"true\">Publish</button>\n <button slMenuCheckboxItem [checked]=\"true\">Show comments</button>\n <div slMenuEmpty>Loading labels…</div>\n</sl-menu>\n",
767
+ "verdict": "excerpt"
768
+ },
769
+ {
770
+ "id": "keyboard",
771
+ "title": "Keyboard",
772
+ "note": "Arrows move and wrap, Home and End reach the ends, typing jumps to a command by name, Escape closes one surface and Tab closes them all and moves on down the page.",
773
+ "language": "ts",
774
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n type MenuSelectEvent,\n} from '@slotted/angular/menu';\nimport { SlText } from '@slotted/angular/typography';\n\nconst FORMATS = ['CSV', 'PDF', 'Excel'];\n\n@Component({\n selector: 'app-menu-keyboard',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlInline,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlText,\n ],\n template: `\n <div slInline align=\"center\" wrap=\"wrap\" [gap]=\"3\">\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"order\">\n Order\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #order>\n <button slMenuItem shortcut=\"Mod+E\" (select)=\"ran('Edit order', $event)\">Edit order</button>\n <button slMenuItem shortcut=\"Mod+D\" (select)=\"ran('Duplicate', $event)\">Duplicate</button>\n <button slMenuItem [slMenuTriggerFor]=\"exportAs\">Export as</button>\n <sl-menu #exportAs>\n @for (format of formats; track format) {\n <button slMenuItem (select)=\"ran('Export as ' + format, $event)\">{{ format }}</button>\n }\n </sl-menu>\n <hr slMenuSeparator />\n <button slMenuItem (select)=\"ran('Archive', $event)\">Archive</button>\n </sl-menu>\n <span slText size=\"sm\" tone=\"muted\">{{ last() }}</span>\n </div>\n `,\n})\nexport class MenuKeyboard {\n protected readonly formats = FORMATS;\n protected readonly last = signal('Focus Order, then press ArrowDown.');\n\n protected ran(command: string, event: MenuSelectEvent): void {\n this.last.set(`${command}, by ${event.reason}`);\n }\n}\n",
775
+ "verdict": "example"
776
+ },
777
+ {
778
+ "id": "composition",
779
+ "title": "In context",
780
+ "note": "A row of actions in a table: the trigger is the consumer's own icon button, the menu holds the row's commands, and provideMenuDefaults sets the side once.",
781
+ "language": "html",
782
+ "source": "<button slButton variant=\"ghost\" aria-label=\"Row actions\" [slMenuTriggerFor]=\"rowActions\">⋯</button>\n<sl-menu #rowActions>\n <button slMenuItem>Open</button>\n</sl-menu>\n",
783
+ "verdict": "excerpt"
784
+ },
785
+ {
786
+ "id": "account-menu",
787
+ "title": "account-menu.ts",
788
+ "note": null,
789
+ "language": "ts",
790
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlAvatar } from '@slotted/angular/avatar';\nimport { SlButton, SlButtonStart } from '@slotted/angular/button';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuHeader,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuItemIcon,\n SlMenuItemMeta,\n SlMenuRadioGroup,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\nconst WORKSPACES = ['Northwind Operations', 'Northwind Europe', 'Northwind Wholesale'];\n\n@Component({\n selector: 'app-menu-account-menu',\n imports: [\n SlAvatar,\n SlButton,\n SlButtonStart,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuHeader,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuItemIcon,\n SlMenuItemMeta,\n SlMenuRadioGroup,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"ghost\" [slMenuTriggerFor]=\"account\">\n <span slButtonStart><span slAvatar decorative name=\"Maria Chen\" size=\"sm\"></span></span>\n Maria Chen\n </button>\n <sl-menu #account align=\"end\">\n <div slMenuHeader>\n <span slAvatar decorative name=\"Maria Chen\" size=\"md\"></span>\n <span data-part=\"label\">Maria Chen</span>\n <span slMenuItemDescription>maria.chen&#64;northwind.example</span>\n </div>\n <hr slMenuSeparator />\n <button slMenuItem>\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"person\"></svg></span\n ></span>\n Profile\n </button>\n <button slMenuItem>\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"bell\"></svg></span\n ></span>\n Notifications\n </button>\n <button slMenuItem [slMenuTriggerFor]=\"workspaces\">\n Workspace <span slMenuItemMeta>{{ short() }}</span>\n </button>\n <sl-menu #workspaces>\n <sl-menu-radio-group [(value)]=\"workspace\">\n @for (name of names; track name) {\n <button slMenuRadioItem [value]=\"name\">{{ name }}</button>\n }\n </sl-menu-radio-group>\n </sl-menu>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\">\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"arrow-left\"></svg></span\n ></span>\n Sign out\n </button>\n </sl-menu>\n `,\n})\nexport class MenuAccountMenu {\n protected readonly names = WORKSPACES;\n protected readonly workspace = signal<string | undefined>('Northwind Operations');\n protected readonly short = computed(() => this.workspace()?.replace('Northwind ', ''));\n}\n",
791
+ "verdict": "example"
792
+ },
793
+ {
794
+ "id": "basic",
795
+ "title": "basic.ts",
796
+ "note": null,
797
+ "language": "ts",
798
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-basic',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"actions\">\n Order actions\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #actions>\n <button slMenuItem>View order</button>\n <button slMenuItem shortcut=\"Mod+E\">Edit order</button>\n <button slMenuItem shortcut=\"Mod+D\">Duplicate</button>\n <button slMenuItem shortcut=\"Mod+P\">Print packing slip</button>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\">Cancel order…</button>\n </sl-menu>\n `,\n})\nexport class MenuBasic {}\n",
799
+ "verdict": "example"
800
+ },
801
+ {
802
+ "id": "column-visibility",
803
+ "title": "column-visibility.ts",
804
+ "note": null,
805
+ "language": "ts",
806
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuGroup, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n} from '@slotted/angular/table';\n\ntype Column = 'customer' | 'status' | 'warehouse' | 'total';\n\nconst COLUMNS: { key: Column; label: string; numeric?: boolean }[] = [\n { key: 'customer', label: 'Customer' },\n { key: 'status', label: 'Status' },\n { key: 'warehouse', label: 'Warehouse' },\n { key: 'total', label: 'Total', numeric: true },\n];\n\nconst ORDERS: (Record<Column, string> & { id: string })[] = [\n {\n id: 'SO-10482',\n customer: 'Northwind Traders',\n status: 'Packed',\n warehouse: 'Rotterdam',\n total: '$1,240.00',\n },\n {\n id: 'SO-10483',\n customer: 'Contoso Foods',\n status: 'Awaiting payment',\n warehouse: 'Leipzig',\n total: '$860.50',\n },\n {\n id: 'SO-10484',\n customer: 'Fabrikam Supply',\n status: 'Shipped',\n warehouse: 'Lyon',\n total: '$2,315.75',\n },\n];\n\n@Component({\n selector: 'app-menu-column-visibility',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuGroup,\n SlMenuItem,\n SlMenuTrigger,\n SlStack,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n ],\n template: `\n <div slStack align=\"end\" [gap]=\"3\">\n <button slButton size=\"sm\" variant=\"outline\" [slMenuTriggerFor]=\"columnMenu\">\n Columns\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #columnMenu align=\"end\">\n <sl-menu-group label=\"Show columns\">\n @for (column of columns; track column.key) {\n <button\n slMenuCheckboxItem\n [checked]=\"visible()[column.key]\"\n (checkedChange)=\"toggle(column.key, $event)\"\n >\n {{ column.label }}\n </button>\n }\n </sl-menu-group>\n </sl-menu>\n <div slTable [columns]=\"shown().length + 1\">\n <div slTableContent>\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n @for (column of shown(); track column.key) {\n <th slTableColumnHeader [numeric]=\"column.numeric ?? false\">{{ column.label }}</th>\n }\n </tr>\n </thead>\n <tbody slTableBody>\n @for (order of orders; track order.id) {\n <tr slTableRow [value]=\"order.id\">\n <th slTableRowHeader>{{ order.id }}</th>\n @for (column of shown(); track column.key) {\n <td slTableCell [numeric]=\"column.numeric ?? false\">{{ order[column.key] }}</td>\n }\n </tr>\n }\n </tbody>\n </div>\n </div>\n </div>\n `,\n})\nexport class MenuColumnVisibility {\n protected readonly columns = COLUMNS;\n protected readonly orders = ORDERS;\n protected readonly visible = signal<Record<Column, boolean>>({\n customer: true,\n status: true,\n warehouse: false,\n total: true,\n });\n protected readonly shown = computed(() => COLUMNS.filter((column) => this.visible()[column.key]));\n\n protected toggle(key: Column, checked: boolean): void {\n this.visible.update((current) => ({ ...current, [key]: checked }));\n }\n}\n",
807
+ "verdict": "example"
808
+ },
809
+ {
810
+ "id": "controlled",
811
+ "title": "controlled.ts",
812
+ "note": null,
813
+ "language": "ts",
814
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { SlText } from '@slotted/angular/typography';\n\n@Component({\n selector: 'app-menu-controlled',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlInline, SlMenu, SlMenuItem, SlMenuTrigger, SlText],\n template: `\n <div slInline align=\"center\" wrap=\"wrap\" [gap]=\"3\">\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"bulk\">\n Bulk actions\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #bulk [(open)]=\"open\" (openChangeRequest)=\"record($event)\">\n <button slMenuItem>Mark 12 orders as packed</button>\n <button slMenuItem>Print 12 packing slips</button>\n <button slMenuItem>Export selection</button>\n </sl-menu>\n <button slButton variant=\"ghost\" (click)=\"open.set(true)\">Open from code</button>\n <span slText size=\"sm\" tone=\"muted\">{{ last() }}</span>\n </div>\n `,\n})\nexport class MenuControlled {\n protected readonly open = signal(false);\n protected readonly last = signal('Closed');\n\n protected record(request: ChangeRequest<boolean>): void {\n this.last.set(`${request.value ? 'Opened' : 'Closed'} by ${request.reason}`);\n }\n}\n",
815
+ "verdict": "example"
816
+ },
817
+ {
818
+ "id": "descriptions",
819
+ "title": "descriptions.ts",
820
+ "note": null,
821
+ "language": "ts",
822
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuItemDescription, SlMenuTrigger } from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-descriptions',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"refund\">\n Refund\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #refund>\n <button slMenuItem>\n Full refund\n <span slMenuItemDescription>Returns $1,240.00 to the card used at checkout.</span>\n </button>\n <button slMenuItem>\n Partial refund…\n <span slMenuItemDescription>Choose the lines and the amount to return.</span>\n </button>\n <button slMenuItem>\n Store credit\n <span slMenuItemDescription>Adds $1,240.00 to the customer's account balance.</span>\n </button>\n </sl-menu>\n `,\n})\nexport class MenuDescriptions {}\n",
823
+ "verdict": "example"
824
+ },
825
+ {
826
+ "id": "destructive",
827
+ "title": "destructive.ts",
828
+ "note": null,
829
+ "language": "ts",
830
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-destructive',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"supplier\">\n Supplier\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #supplier>\n <button slMenuItem>Edit details</button>\n <button slMenuItem tone=\"success\">Approve for purchasing</button>\n <button slMenuItem tone=\"warning\">Put payments on hold</button>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\">\n Delete supplier…\n <span slMenuItemDescription\n >Removes Northwind Traders and its 18 open purchase orders.</span\n >\n </button>\n </sl-menu>\n `,\n})\nexport class MenuDestructive {}\n",
831
+ "verdict": "example"
832
+ },
833
+ {
834
+ "id": "disabled",
835
+ "title": "disabled.ts",
836
+ "note": null,
837
+ "language": "ts",
838
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-disabled',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuItemDescription,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"shipped\">\n SO-10477 · Shipped\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #shipped>\n <button slMenuItem>Track shipment</button>\n <button slMenuItem>Create return…</button>\n <button slMenuItem [disabled]=\"true\">\n Edit order\n <span slMenuItemDescription>A shipped order can no longer be edited.</span>\n </button>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\" [disabled]=\"true\">\n Cancel order\n <span slMenuItemDescription>Create a return instead.</span>\n </button>\n </sl-menu>\n `,\n})\nexport class MenuDisabled {}\n",
839
+ "verdict": "example"
840
+ },
841
+ {
842
+ "id": "keep-open",
843
+ "title": "keep-open.ts",
844
+ "note": null,
845
+ "language": "ts",
846
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlText } from '@slotted/angular/typography';\n\n@Component({\n selector: 'app-menu-keep-open',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlInline,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlText,\n ],\n template: `\n <div slInline align=\"center\" [gap]=\"3\">\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"quantity\">\n Adjust quantity\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #quantity>\n <button slMenuItem [closeOnSelect]=\"false\" (select)=\"add(1)\">Add 1 carton</button>\n <button slMenuItem [closeOnSelect]=\"false\" (select)=\"add(10)\">Add 10 cartons</button>\n <button slMenuItem [closeOnSelect]=\"false\" (select)=\"add(-1)\">Remove 1 carton</button>\n <hr slMenuSeparator />\n <button slMenuItem (select)=\"cartons.set(24)\">Reset to ordered quantity</button>\n </sl-menu>\n <span slText size=\"sm\" tone=\"muted\">{{ cartons() }} cartons</span>\n </div>\n `,\n})\nexport class MenuKeepOpen {\n protected readonly cartons = signal(24);\n\n protected add(count: number): void {\n this.cartons.update((current) => Math.max(0, current + count));\n }\n}\n",
847
+ "verdict": "example"
848
+ },
849
+ {
850
+ "id": "links",
851
+ "title": "links.ts",
852
+ "note": null,
853
+ "language": "ts",
854
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemIcon,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\n@Component({\n selector: 'app-menu-links',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlIcon,\n SlMenu,\n SlMenuItem,\n SlMenuItemIcon,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"open\">\n Open\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #open>\n <a slMenuItem href=\"#order-SO-10482\">Order page</a>\n <a slMenuItem href=\"#customer-northwind\">Customer profile</a>\n <hr slMenuSeparator />\n <a\n slMenuItem\n href=\"https://example.com/carriers/track/1Z999AA10123456784\"\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n <span slMenuItemIcon\n ><span slIcon><svg slGlyph name=\"external\"></svg></span\n ></span>\n Carrier tracking\n </a>\n </sl-menu>\n `,\n})\nexport class MenuLinks {}\n",
855
+ "verdict": "example"
856
+ },
857
+ {
858
+ "id": "loading",
859
+ "title": "loading.ts",
860
+ "note": null,
861
+ "language": "ts",
862
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuEmpty, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\n\nconst LABELS = ['Fragile', 'Gift wrap', 'Priority', 'Wholesale'];\n\n@Component({\n selector: 'app-menu-loading',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlMenu, SlMenuEmpty, SlMenuItem, SlMenuTrigger],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"labelMenu\">\n Labels\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #labelMenu [loading]=\"labels() === null\" (openChange)=\"load($event)\">\n @if (labels(); as loaded) {\n @for (label of loaded; track label) {\n <button slMenuCheckboxItem>{{ label }}</button>\n }\n } @else {\n <div slMenuEmpty>Loading labels…</div>\n }\n </sl-menu>\n `,\n})\nexport class MenuLoading {\n protected readonly labels = signal<string[] | null>(null);\n private requested = false;\n\n protected load(open: boolean): void {\n if (!open || this.requested) return;\n this.requested = true;\n setTimeout(() => this.labels.set(LABELS), 1200);\n }\n}\n",
863
+ "verdict": "example"
864
+ },
865
+ {
866
+ "id": "long-list",
867
+ "title": "long-list.ts",
868
+ "note": null,
869
+ "language": "ts",
870
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\n\nconst LOCATIONS = [\n 'Amsterdam',\n 'Antwerp',\n 'Barcelona',\n 'Berlin',\n 'Bologna',\n 'Bordeaux',\n 'Bratislava',\n 'Brno',\n 'Brussels',\n 'Budapest',\n 'Copenhagen',\n 'Dublin',\n 'Gdańsk',\n 'Geneva',\n 'Hamburg',\n 'Helsinki',\n 'Kraków',\n 'Leipzig',\n 'Lisbon',\n 'Ljubljana',\n 'Lyon',\n 'Madrid',\n 'Milan',\n 'Munich',\n 'Oslo',\n 'Porto',\n 'Prague',\n 'Rotterdam',\n 'Stockholm',\n 'Tallinn',\n 'Valencia',\n 'Vienna',\n 'Vilnius',\n 'Warsaw',\n 'Zagreb',\n 'Zürich',\n];\n\n@Component({\n selector: 'app-menu-long-list',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlMenu, SlMenuItem, SlMenuTrigger],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"warehouses\">\n Move to warehouse\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #warehouses>\n @for (location of locations; track location) {\n <button slMenuItem>{{ location }}</button>\n }\n </sl-menu>\n `,\n})\nexport class MenuLongList {\n protected readonly locations = LOCATIONS;\n}\n",
871
+ "verdict": "example"
872
+ },
873
+ {
874
+ "id": "row-actions",
875
+ "title": "row-actions.ts",
876
+ "note": null,
877
+ "language": "ts",
878
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlIconButton } from '@slotted/angular/button';\nimport {\n SlAlertDialog,\n SlAlertDialogAction,\n SlAlertDialogCancel,\n SlAlertDialogIcon,\n SlDialogDescription,\n SlDialogFooter,\n SlDialogHeader,\n SlDialogTitle,\n} from '@slotted/angular/dialog';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuSeparator, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n} from '@slotted/angular/table';\n\ninterface Order {\n id: string;\n customer: string;\n total: string;\n}\n\nconst ORDERS: Order[] = [\n { id: 'SO-10482', customer: 'Northwind Traders', total: '$1,240.00' },\n { id: 'SO-10483', customer: 'Contoso Foods', total: '$860.50' },\n { id: 'SO-10484', customer: 'Fabrikam Supply', total: '$2,315.75' },\n];\n\n@Component({\n selector: 'app-menu-row-actions',\n imports: [\n SlAlertDialog,\n SlAlertDialogAction,\n SlAlertDialogCancel,\n SlAlertDialogIcon,\n SlButton,\n SlDialogDescription,\n SlDialogFooter,\n SlDialogHeader,\n SlDialogTitle,\n SlGlyph,\n SlIconButton,\n SlMenu,\n SlMenuItem,\n SlMenuSeparator,\n SlMenuTrigger,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n ],\n template: `\n <div slTable [columns]=\"4\">\n <div slTableContent>\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n <th slTableColumnHeader>Customer</th>\n <th slTableColumnHeader numeric>Total</th>\n <th slTableColumnHeader align=\"end\">Actions</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (order of orders(); track order.id) {\n <tr slTableRow [value]=\"order.id\">\n <th slTableRowHeader>{{ order.id }}</th>\n <td slTableCell>{{ order.customer }}</td>\n <td slTableCell numeric>{{ order.total }}</td>\n <td slTableCell align=\"end\">\n <button\n slIconButton\n size=\"sm\"\n [attr.aria-label]=\"'Actions for ' + order.id\"\n [slMenuTriggerFor]=\"actions\"\n >\n <svg slGlyph name=\"ellipsis\"></svg>\n </button>\n <sl-menu #actions align=\"end\">\n <button slMenuItem>View order</button>\n <button slMenuItem shortcut=\"Mod+D\">Duplicate</button>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\" (select)=\"confirm(order)\">Delete order…</button>\n </sl-menu>\n </td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n <sl-alert-dialog [(open)]=\"confirming\">\n <header slDialogHeader>\n <span slAlertDialogIcon></span>\n <h2 slDialogTitle>Delete {{ pending()?.id }}?</h2>\n <p slDialogDescription>\n The order for {{ pending()?.customer }} and its invoice are removed. This cannot be\n undone.\n </p>\n </header>\n <footer slDialogFooter>\n <button slButton slAlertDialogCancel tone=\"secondary\" variant=\"outline\">Keep order</button>\n <button slButton slAlertDialogAction tone=\"danger\" (click)=\"remove()\">Delete order</button>\n </footer>\n </sl-alert-dialog>\n `,\n})\nexport class MenuRowActions {\n protected readonly orders = signal(ORDERS);\n protected readonly pending = signal<Order | null>(null);\n protected readonly confirming = signal(false);\n\n protected confirm(order: Order): void {\n this.pending.set(order);\n this.confirming.set(true);\n }\n\n protected remove(): void {\n const id = this.pending()?.id;\n this.orders.update((rows) => rows.filter((row) => row.id !== id));\n }\n}\n",
879
+ "verdict": "example"
880
+ },
881
+ {
882
+ "id": "sizes",
883
+ "title": "sizes.ts",
884
+ "note": null,
885
+ "language": "ts",
886
+ "source": "import { Component } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlMenu, SlMenuItem, SlMenuTrigger, type MenuSize } from '@slotted/angular/menu';\n\nconst SIZES: MenuSize[] = ['sm', 'md', 'lg'];\n\n@Component({\n selector: 'app-menu-sizes',\n imports: [SlButton, SlInline, SlMenu, SlMenuItem, SlMenuTrigger],\n template: `\n <div slInline align=\"center\" [gap]=\"3\">\n @for (size of sizes; track size) {\n <button slButton variant=\"outline\" [size]=\"size\" [slMenuTriggerFor]=\"menu\">\n Actions, {{ size }}\n </button>\n <sl-menu #menu [size]=\"size\">\n <button slMenuItem shortcut=\"Mod+E\">Edit order</button>\n <button slMenuItem shortcut=\"Mod+D\">Duplicate</button>\n <button slMenuItem>Print packing slip</button>\n </sl-menu>\n }\n </div>\n `,\n})\nexport class MenuSizes {\n protected readonly sizes = SIZES;\n}\n",
887
+ "verdict": "example"
888
+ },
889
+ {
890
+ "id": "sort-menu",
891
+ "title": "sort-menu.ts",
892
+ "note": null,
893
+ "language": "ts",
894
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuRadioGroup, SlMenuTrigger } from '@slotted/angular/menu';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n} from '@slotted/angular/table';\n\ninterface Order {\n id: string;\n customer: string;\n placed: string;\n total: number;\n}\n\nconst ORDERS: Order[] = [\n { id: 'SO-10482', customer: 'Northwind Traders', placed: '2026-10-02', total: 1240 },\n { id: 'SO-10483', customer: 'Contoso Foods', placed: '2026-10-03', total: 860.5 },\n { id: 'SO-10484', customer: 'Fabrikam Supply', placed: '2026-10-01', total: 2315.75 },\n { id: 'SO-10485', customer: 'Adventure Works', placed: '2026-10-04', total: 412 },\n];\n\nconst SORTS: { value: string; label: string; compare: (a: Order, b: Order) => number }[] = [\n { value: 'newest', label: 'Newest first', compare: (a, b) => b.placed.localeCompare(a.placed) },\n { value: 'oldest', label: 'Oldest first', compare: (a, b) => a.placed.localeCompare(b.placed) },\n { value: 'total-desc', label: 'Highest total', compare: (a, b) => b.total - a.total },\n { value: 'total-asc', label: 'Lowest total', compare: (a, b) => a.total - b.total },\n {\n value: 'customer',\n label: 'Customer, A to Z',\n compare: (a, b) => a.customer.localeCompare(b.customer),\n },\n];\n\nconst money = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });\n\n@Component({\n selector: 'app-menu-sort-menu',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuRadioGroup,\n SlMenuTrigger,\n SlStack,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n ],\n template: `\n <div slStack align=\"end\" [gap]=\"3\">\n <button slButton size=\"sm\" variant=\"outline\" [slMenuTriggerFor]=\"sortMenu\">\n Sort: {{ current().label }}\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #sortMenu align=\"end\">\n <sl-menu-radio-group aria-label=\"Sort orders\" [(value)]=\"sort\">\n @for (option of sorts; track option.value) {\n <button slMenuRadioItem [value]=\"option.value\">{{ option.label }}</button>\n }\n </sl-menu-radio-group>\n </sl-menu>\n <div slTable [columns]=\"4\">\n <div slTableContent>\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n <th slTableColumnHeader>Customer</th>\n <th slTableColumnHeader>Placed</th>\n <th slTableColumnHeader numeric>Total</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (order of rows(); track order.id) {\n <tr slTableRow [value]=\"order.id\">\n <th slTableRowHeader>{{ order.id }}</th>\n <td slTableCell>{{ order.customer }}</td>\n <td slTableCell>{{ order.placed }}</td>\n <td slTableCell numeric>{{ format(order.total) }}</td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n </div>\n `,\n})\nexport class MenuSortMenu {\n protected readonly sorts = SORTS;\n protected readonly sort = signal<string | undefined>('newest');\n protected readonly current = computed(\n () => SORTS.find((option) => option.value === this.sort()) ?? SORTS[0]!,\n );\n protected readonly rows = computed(() => [...ORDERS].sort(this.current().compare));\n\n protected format(total: number): string {\n return money.format(total);\n }\n}\n",
895
+ "verdict": "example"
896
+ },
897
+ {
898
+ "id": "submenus",
899
+ "title": "submenus.ts",
900
+ "note": null,
901
+ "language": "ts",
902
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport {\n SlMenu,\n SlMenuItem,\n SlMenuItemMeta,\n SlMenuRadioGroup,\n SlMenuSeparator,\n SlMenuTrigger,\n} from '@slotted/angular/menu';\n\nconst PEOPLE = ['Maria Chen', 'Tomás Ortega', 'Aiko Tanaka', 'Unassigned'];\nconst WAREHOUSES = ['Rotterdam', 'Leipzig', 'Lyon', 'Gdańsk'];\n\n@Component({\n selector: 'app-menu-submenus',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlMenu,\n SlMenuItem,\n SlMenuItemMeta,\n SlMenuRadioGroup,\n SlMenuSeparator,\n SlMenuTrigger,\n ],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"order\">\n SO-10482\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #order>\n <button slMenuItem>View order</button>\n <button slMenuItem [slMenuTriggerFor]=\"assign\">\n Assign to <span slMenuItemMeta>{{ assignee() }}</span>\n </button>\n <sl-menu #assign>\n <sl-menu-radio-group [(value)]=\"assignee\">\n @for (person of people; track person) {\n <button slMenuRadioItem [value]=\"person\">{{ person }}</button>\n }\n </sl-menu-radio-group>\n </sl-menu>\n <button slMenuItem [slMenuTriggerFor]=\"move\">Move to warehouse</button>\n <sl-menu #move>\n @for (warehouse of warehouses; track warehouse) {\n <button slMenuItem>{{ warehouse }}</button>\n }\n </sl-menu>\n <hr slMenuSeparator />\n <button slMenuItem tone=\"danger\">Cancel order…</button>\n </sl-menu>\n `,\n})\nexport class MenuSubmenus {\n protected readonly people = PEOPLE;\n protected readonly warehouses = WAREHOUSES;\n protected readonly assignee = signal<string | undefined>('Maria Chen');\n}\n",
903
+ "verdict": "example"
904
+ },
905
+ {
906
+ "id": "triggers",
907
+ "title": "triggers.ts",
908
+ "note": null,
909
+ "language": "ts",
910
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd, SlIconButton } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlMenu, SlMenuItem, SlMenuTrigger } from '@slotted/angular/menu';\nimport {\n SlSplitButton,\n SlSplitButtonMenuTrigger,\n SlSplitButtonPrimary,\n} from '@slotted/angular/split-button';\n\n@Component({\n selector: 'app-menu-triggers',\n imports: [\n SlButton,\n SlButtonEnd,\n SlGlyph,\n SlIconButton,\n SlInline,\n SlMenu,\n SlMenuItem,\n SlMenuTrigger,\n SlSplitButton,\n SlSplitButtonMenuTrigger,\n SlSplitButtonPrimary,\n ],\n template: `\n <div slInline align=\"center\" [gap]=\"3\">\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"exportMenu\">\n Export\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #exportMenu>\n <button slMenuItem>CSV for spreadsheets</button>\n <button slMenuItem>PDF summary</button>\n <button slMenuItem>Accounting journal</button>\n </sl-menu>\n\n <button slIconButton aria-label=\"More actions for SO-10482\" [slMenuTriggerFor]=\"more\">\n <svg slGlyph name=\"ellipsis\"></svg>\n </button>\n <sl-menu #more align=\"end\">\n <button slMenuItem>Copy order number</button>\n <button slMenuItem>Add internal note</button>\n <button slMenuItem>Open customer</button>\n </sl-menu>\n\n <div slSplitButton>\n <button slSplitButtonPrimary>Ship order</button>\n <button\n slSplitButtonMenuTrigger\n aria-label=\"More ways to ship\"\n [slMenuTriggerFor]=\"ship\"\n ></button>\n <sl-menu #ship>\n <button slMenuItem>Ship and print label</button>\n <button slMenuItem>Ship part of the order…</button>\n <button slMenuItem>Schedule for tomorrow</button>\n </sl-menu>\n </div>\n </div>\n `,\n})\nexport class MenuTriggers {}\n",
911
+ "verdict": "example"
912
+ },
913
+ {
914
+ "id": "typeahead",
915
+ "title": "typeahead.ts",
916
+ "note": null,
917
+ "language": "ts",
918
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonEnd } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlMenu, SlMenuItem, SlMenuItemMeta, SlMenuTrigger } from '@slotted/angular/menu';\n\nconst CARRIERS = [\n { name: 'DHL Express', transit: '1 day' },\n { name: 'DPD', transit: '2 days' },\n { name: 'FedEx', transit: '1 day' },\n { name: 'GLS', transit: '3 days' },\n { name: 'PostNL', transit: '2 days' },\n { name: 'Royal Mail', transit: '3 days' },\n { name: 'UPS', transit: '2 days' },\n { name: 'USPS', transit: '5 days' },\n];\n\n@Component({\n selector: 'app-menu-typeahead',\n imports: [SlButton, SlButtonEnd, SlGlyph, SlMenu, SlMenuItem, SlMenuItemMeta, SlMenuTrigger],\n template: `\n <button slButton variant=\"outline\" [slMenuTriggerFor]=\"carrierMenu\">\n Ship with\n <span slButtonEnd><svg slGlyph name=\"chevron-down\"></svg></span>\n </button>\n <sl-menu #carrierMenu>\n @for (carrier of carriers; track carrier.name) {\n <button slMenuItem>\n {{ carrier.name }} <span slMenuItemMeta>{{ carrier.transit }}</span>\n </button>\n }\n </sl-menu>\n `,\n})\nexport class MenuTypeahead {\n protected readonly carriers = CARRIERS;\n}\n",
919
+ "verdict": "example"
920
+ }
921
+ ]
922
+ }