@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
@@ -0,0 +1,1147 @@
1
+ {
2
+ "family": "select",
3
+ "ui": "select",
4
+ "binding": "angular",
5
+ "catalog": {
6
+ "group": "Forms",
7
+ "summary": "Picks one option from a popup list."
8
+ },
9
+ "axes": {
10
+ "size": [
11
+ "sm",
12
+ "md",
13
+ "lg"
14
+ ],
15
+ "variant": [
16
+ "outline",
17
+ "subtle",
18
+ "plain"
19
+ ],
20
+ "side": [
21
+ "bottom",
22
+ "top",
23
+ "inline-start",
24
+ "inline-end",
25
+ "left",
26
+ "right"
27
+ ],
28
+ "align": [
29
+ "start",
30
+ "center",
31
+ "end"
32
+ ],
33
+ "width": [
34
+ "anchor",
35
+ "content"
36
+ ],
37
+ "mount": [
38
+ "active",
39
+ "lazy",
40
+ "eager"
41
+ ],
42
+ "strategy": [
43
+ "absolute",
44
+ "fixed"
45
+ ],
46
+ "multiple": [
47
+ true,
48
+ false
49
+ ],
50
+ "clearable": [
51
+ true,
52
+ false
53
+ ],
54
+ "loop": [
55
+ true,
56
+ false
57
+ ],
58
+ "search": [
59
+ true,
60
+ false
61
+ ],
62
+ "highlightMatch": [
63
+ true,
64
+ false
65
+ ],
66
+ "typeahead": [
67
+ true,
68
+ false
69
+ ],
70
+ "closeOnSelect": [
71
+ true,
72
+ false
73
+ ],
74
+ "closeOnEscape": [
75
+ true,
76
+ false
77
+ ],
78
+ "closeOnOutsidePress": [
79
+ true,
80
+ false
81
+ ],
82
+ "flip": [
83
+ true,
84
+ false
85
+ ],
86
+ "shift": [
87
+ true,
88
+ false
89
+ ],
90
+ "hideWhenDetached": [
91
+ true,
92
+ false
93
+ ],
94
+ "portal": [
95
+ true,
96
+ false
97
+ ],
98
+ "fullWidth": [
99
+ true,
100
+ false
101
+ ],
102
+ "disabled": [
103
+ true,
104
+ false
105
+ ],
106
+ "readOnly": [
107
+ true,
108
+ false
109
+ ],
110
+ "required": [
111
+ true,
112
+ false
113
+ ],
114
+ "invalid": [
115
+ true,
116
+ false
117
+ ],
118
+ "loading": [
119
+ true,
120
+ false
121
+ ]
122
+ },
123
+ "members": {
124
+ "select": {
125
+ "nativeElement": "div",
126
+ "defaults": {
127
+ "size": "md",
128
+ "variant": "outline",
129
+ "side": "bottom",
130
+ "align": "start",
131
+ "width": "content",
132
+ "mount": "active",
133
+ "strategy": "absolute",
134
+ "multiple": false,
135
+ "clearable": false,
136
+ "loop": false,
137
+ "search": false,
138
+ "highlightMatch": true,
139
+ "typeahead": true,
140
+ "closeOnSelect": true,
141
+ "closeOnEscape": true,
142
+ "closeOnOutsidePress": true,
143
+ "flip": true,
144
+ "shift": true,
145
+ "hideWhenDetached": true,
146
+ "portal": true,
147
+ "fullWidth": true,
148
+ "disabled": false,
149
+ "readOnly": false,
150
+ "required": false,
151
+ "invalid": false,
152
+ "loading": false,
153
+ "sideOffset": 4,
154
+ "alignOffset": 0,
155
+ "collisionPadding": 8,
156
+ "typeaheadTimeout": 500
157
+ },
158
+ "capabilities": [
159
+ "selection",
160
+ "value",
161
+ "open",
162
+ "current",
163
+ "size",
164
+ "appearance",
165
+ "placement",
166
+ "content",
167
+ "fullWidth",
168
+ "disabled",
169
+ "loading",
170
+ "readOnly",
171
+ "required",
172
+ "invalid",
173
+ "wiring"
174
+ ],
175
+ "states": [
176
+ "default",
177
+ "hover",
178
+ "active",
179
+ "focus-visible",
180
+ "open",
181
+ "disabled",
182
+ "readonly",
183
+ "invalid",
184
+ "required",
185
+ "loading",
186
+ "selected",
187
+ "current"
188
+ ],
189
+ "parts": [
190
+ "root",
191
+ "trigger",
192
+ "value",
193
+ "arrow",
194
+ "busy",
195
+ "tags",
196
+ "summary",
197
+ "clear",
198
+ "positioner",
199
+ "content",
200
+ "search",
201
+ "search-icon",
202
+ "search-input",
203
+ "list",
204
+ "chosen",
205
+ "group",
206
+ "group-label",
207
+ "item",
208
+ "indicator",
209
+ "icon",
210
+ "label",
211
+ "match",
212
+ "description",
213
+ "separator",
214
+ "empty",
215
+ "status",
216
+ "placeholder"
217
+ ]
218
+ }
219
+ },
220
+ "docs": {
221
+ "select": {
222
+ "imports": {
223
+ "source": "import { SlSelect, SlSelectGroup, SlSelectItem, SlSelectSeparator, SlSelectValue } from '@slotted/angular/select';",
224
+ "selector": "sl-select, sl-select-group, sl-select-item, sl-select-separator, [slSelectValue]",
225
+ "exportAs": "slSelect, slSelectGroup, slSelectItem, slSelectSeparator"
226
+ },
227
+ "anatomy": [
228
+ {
229
+ "part": "root",
230
+ "element": "sl-select, the host element itself",
231
+ "required": true,
232
+ "purpose": "The frame, carrying data-ui=\"select\". It draws the border, the shadow, the focus ring and every state, from the same tokens as the text field frame."
233
+ },
234
+ {
235
+ "part": "trigger",
236
+ "element": "button with role=\"combobox\"",
237
+ "required": true,
238
+ "purpose": "The button with role=\"combobox\". It fills the frame, keeps DOM focus for the whole interaction, and carries aria-expanded, aria-controls and aria-activedescendant. Inside a field it carries the field’s control id, so a press on the label focuses it."
239
+ },
240
+ {
241
+ "part": "value",
242
+ "element": "span",
243
+ "required": true,
244
+ "purpose": "What the control shows: the chosen label, a summary of several, or the placeholder. An ng-template with slSelectValue replaces the summary. It carries data-placeholder while nothing is chosen, and data-unmatched when a value has no known label."
245
+ },
246
+ {
247
+ "part": "arrow",
248
+ "element": "span",
249
+ "required": true,
250
+ "purpose": "The chevron, a Glyph inside an Icon box, turned over while the list is open. It sits against the end of the frame and takes no pointer events, so a press on it reaches the trigger."
251
+ },
252
+ {
253
+ "part": "busy",
254
+ "element": "span",
255
+ "required": false,
256
+ "purpose": "The spinner, drawn in place of the chevron while loading is set. It carries data-ui=\"spinner\", so its ring comes from the spinner stylesheet."
257
+ },
258
+ {
259
+ "part": "tags",
260
+ "element": "span",
261
+ "required": false,
262
+ "purpose": "The chosen values of a multiple select, one tag each, laid over the trigger rather than inside it: a remove button inside a button would be a control inside a control. Tags that do not fit collapse into one +N tag."
263
+ },
264
+ {
265
+ "part": "summary",
266
+ "element": "span",
267
+ "required": false,
268
+ "purpose": "The text a multiple select shows under 120 pixels instead of tags, such as ‘3 selected’. It sits inside the value, so it names the trigger whichever of the two is drawn, and it is visually hidden rather than removed while the tags are shown."
269
+ },
270
+ {
271
+ "part": "clear",
272
+ "element": "button",
273
+ "required": false,
274
+ "purpose": "The clear button. It is drawn while clearable is set and something is chosen, as a sibling of the trigger rather than a child: a focusable element inside a combobox would be a widget inside a widget."
275
+ },
276
+ {
277
+ "part": "positioner",
278
+ "element": "div, built into the portal when the popup opens",
279
+ "required": true,
280
+ "purpose": "The layer, portalled to the end of the document. It carries data-ui=\"select\" again, because a stylesheet cannot reach the portalled list through the root. Its content is an ng-template, so the options are not created until the list first opens."
281
+ },
282
+ {
283
+ "part": "content",
284
+ "element": "div with role=\"listbox\", or role=\"dialog\" under search",
285
+ "required": true,
286
+ "purpose": "The list surface. It defines the three columns every option uses, is bounded by the height the positioner reports, and scrolls inside it. With search it becomes a dialog that holds the search field and the list, because a listbox may hold only options and groups."
287
+ },
288
+ {
289
+ "part": "search",
290
+ "element": "div, drawn only under search",
291
+ "required": false,
292
+ "purpose": "The search row, fixed at the top of the list so it stays in view while the results scroll. The control itself never takes typed text; a value the reader types belongs in a combobox."
293
+ },
294
+ {
295
+ "part": "search-icon",
296
+ "element": "span, aria-hidden",
297
+ "required": false,
298
+ "purpose": "The magnifier, a Glyph inside an Icon box."
299
+ },
300
+ {
301
+ "part": "search-input",
302
+ "element": "input with role=\"combobox\"",
303
+ "required": false,
304
+ "purpose": "The search field. It carries aria-controls naming the list, aria-autocomplete=\"list\" and aria-activedescendant, and holds DOM focus while the list is open, because a dialog popup does not support aria-activedescendant on the trigger."
305
+ },
306
+ {
307
+ "part": "list",
308
+ "element": "div with role=\"listbox\", drawn only under search",
309
+ "required": false,
310
+ "purpose": "The listbox inside the dialog when search is set. It scrolls under the fixed search row and defines the option columns in place of the surface."
311
+ },
312
+ {
313
+ "part": "chosen",
314
+ "element": "div, aria-hidden, drawn while several values are chosen",
315
+ "required": false,
316
+ "purpose": "Every chosen value of a multiple select, as tags at the top of the list. The control holds one line, so it may show three tags and a count; this band shows them all, wraps, and scrolls after two rows. It is aria-hidden and holds no buttons: without search focus never reaches the list, and with search Tab leaves the control, so a remove button here would answer only the pointer. A value is removed from its option or from its tag in the control."
317
+ },
318
+ {
319
+ "part": "match",
320
+ "element": "mark, the match part of the highlight family, whose root sits inside label",
321
+ "required": false,
322
+ "purpose": "The span of a label that the query matched, found with the same comparison the filter used. It is drawn only for an option given the label input, because Angular cannot read projected content before it is created."
323
+ },
324
+ {
325
+ "part": "group",
326
+ "element": "sl-select-group with role=\"group\"",
327
+ "required": false,
328
+ "purpose": "A run of options under a heading. It spans every column and inherits them, so its options align with the options outside it."
329
+ },
330
+ {
331
+ "part": "group-label",
332
+ "element": "div",
333
+ "required": false,
334
+ "purpose": "The group’s heading. The group references it with aria-labelledby, as the listbox pattern requires of every option group."
335
+ },
336
+ {
337
+ "part": "item",
338
+ "element": "sl-select-item with role=\"option\"",
339
+ "required": true,
340
+ "purpose": "One option, not a button: an option is not separately focusable, and a button would add a tab stop. data-current marks the highlight and data-selected the chosen option."
341
+ },
342
+ {
343
+ "part": "indicator",
344
+ "element": "span",
345
+ "required": true,
346
+ "purpose": "The check mark in the last column. Its box is reserved whether or not the mark is drawn, so rows do not shift as the highlight moves."
347
+ },
348
+ {
349
+ "part": "icon",
350
+ "element": "span",
351
+ "required": false,
352
+ "purpose": "The glyph the icon input names, drawn as a Glyph inside an Icon box. It is separate from the check mark, which says whether the option is chosen."
353
+ },
354
+ {
355
+ "part": "label",
356
+ "element": "span",
357
+ "required": true,
358
+ "purpose": "The option’s text, and the only column that shrinks. It wraps to two lines and then truncates, with the whole text still in the DOM."
359
+ },
360
+ {
361
+ "part": "description",
362
+ "element": "span",
363
+ "required": false,
364
+ "purpose": "A second line under the label, for detail the label has no room for."
365
+ },
366
+ {
367
+ "part": "separator",
368
+ "element": "sl-select-separator with role=\"separator\"",
369
+ "required": false,
370
+ "purpose": "A line between two runs of options. It is not focusable and not interactive."
371
+ },
372
+ {
373
+ "part": "empty",
374
+ "element": "div",
375
+ "required": false,
376
+ "purpose": "The text the list shows when it holds no options: the empty message."
377
+ },
378
+ {
379
+ "part": "status",
380
+ "element": "div with role=\"status\"",
381
+ "required": false,
382
+ "purpose": "The live region that announces the loading message, and the number of results while searching. It keeps the width of the list, so nothing shifts when the options arrive."
383
+ },
384
+ {
385
+ "part": "placeholder",
386
+ "element": "div",
387
+ "required": false,
388
+ "purpose": "Three rows the height of an option, drawn with the skeleton stylesheet while loading is set. They are hidden from assistive technology, because the status row announces the wait."
389
+ }
390
+ ],
391
+ "api": [
392
+ {
393
+ "name": "search",
394
+ "type": "boolean",
395
+ "defaultValue": "false",
396
+ "appliesTo": "sl-select",
397
+ "description": "Puts a search field at the top of the list. The list becomes a dialog, DOM focus moves into the search field, and typeahead turns off."
398
+ },
399
+ {
400
+ "name": "searchValue",
401
+ "type": "model<string>",
402
+ "defaultValue": "''",
403
+ "appliesTo": "sl-select",
404
+ "description": "The search query. Two-way bindable. It is never the selection."
405
+ },
406
+ {
407
+ "name": "filter",
408
+ "type": "((label: string, query: string) => boolean) | null",
409
+ "defaultValue": "createFilter",
410
+ "appliesTo": "sl-select",
411
+ "description": "Decides whether an option matches the query. Unset uses a locale-sensitive contains that ignores case and accents. null turns filtering off, for a list a server has already filtered. A function replaces the comparison."
412
+ },
413
+ {
414
+ "name": "highlightMatch",
415
+ "type": "boolean",
416
+ "defaultValue": "true",
417
+ "appliesTo": "sl-select",
418
+ "description": "Whether the span of a label that matched the query is marked."
419
+ },
420
+ {
421
+ "name": "locale",
422
+ "type": "string",
423
+ "defaultValue": "—",
424
+ "appliesTo": "sl-select",
425
+ "description": "The BCP 47 language the default filter compares in. Defaults to the language in force."
426
+ },
427
+ {
428
+ "name": "label",
429
+ "type": "string",
430
+ "defaultValue": "—",
431
+ "appliesTo": "sl-select-item",
432
+ "description": "The label as text instead of projected content. The filter compares it and the match mark splits it. An option that projects its label is filtered on textValue or on its rendered text and is not marked, because Angular cannot read projected content before it is created."
433
+ },
434
+ {
435
+ "name": "value",
436
+ "type": "model<string | string[] | null>",
437
+ "defaultValue": "null",
438
+ "appliesTo": "sl-select",
439
+ "description": "The chosen value, or values when multiple is set. Two-way bindable; formControl, formControlName and ngModel bind it too."
440
+ },
441
+ {
442
+ "name": "open",
443
+ "type": "model<boolean>",
444
+ "defaultValue": "false",
445
+ "appliesTo": "sl-select",
446
+ "description": "Whether the list is open. Two-way bindable."
447
+ },
448
+ {
449
+ "name": "highlightedValue",
450
+ "type": "model<string | null>",
451
+ "defaultValue": "null",
452
+ "appliesTo": "sl-select",
453
+ "description": "The highlighted option. Two-way bindable. The highlight is where the keyboard is, not what is chosen."
454
+ },
455
+ {
456
+ "name": "placeholder",
457
+ "type": "string",
458
+ "defaultValue": "—",
459
+ "appliesTo": "sl-select",
460
+ "description": "What the control shows while nothing is chosen."
461
+ },
462
+ {
463
+ "name": "items",
464
+ "type": "SelectItems",
465
+ "defaultValue": "—",
466
+ "appliesTo": "sl-select",
467
+ "description": "Values with their labels, so the closed control can show the label of a value whose option has not been rendered. Options are rendered only while the list is open."
468
+ },
469
+ {
470
+ "name": "name",
471
+ "type": "string",
472
+ "defaultValue": "—",
473
+ "appliesTo": "sl-select",
474
+ "description": "The name the value is submitted under. It renders a hidden native select that a plain form submits."
475
+ },
476
+ {
477
+ "name": "form",
478
+ "type": "string",
479
+ "defaultValue": "—",
480
+ "appliesTo": "sl-select",
481
+ "description": "The id of the form the control belongs to, when it is not the enclosing form."
482
+ },
483
+ {
484
+ "name": "total",
485
+ "type": "number",
486
+ "defaultValue": "—",
487
+ "appliesTo": "sl-select",
488
+ "description": "The size of the whole collection when only part of it is rendered. Options with position then carry aria-setsize and aria-posinset."
489
+ },
490
+ {
491
+ "name": "size",
492
+ "type": "'sm' | 'md' | 'lg'",
493
+ "defaultValue": "md",
494
+ "appliesTo": "sl-select",
495
+ "description": "The step of the control scale. When unset, the select takes the size of its field."
496
+ },
497
+ {
498
+ "name": "variant",
499
+ "type": "'outline' | 'subtle' | 'plain'",
500
+ "defaultValue": "outline",
501
+ "appliesTo": "sl-select",
502
+ "description": "How much frame the control draws: an outline, a filled subtle frame, or plain, with no frame at rest."
503
+ },
504
+ {
505
+ "name": "side",
506
+ "type": "'bottom' | 'top' | 'inline-start' | 'inline-end' | 'left' | 'right'",
507
+ "defaultValue": "bottom",
508
+ "appliesTo": "sl-select",
509
+ "description": "The edge of the control the list opens from."
510
+ },
511
+ {
512
+ "name": "align",
513
+ "type": "'start' | 'center' | 'end'",
514
+ "defaultValue": "start",
515
+ "appliesTo": "sl-select",
516
+ "description": "Where the list aligns along that edge."
517
+ },
518
+ {
519
+ "name": "width",
520
+ "type": "'anchor' | 'content'",
521
+ "defaultValue": "content",
522
+ "appliesTo": "sl-select",
523
+ "description": "content keeps the list at least as wide as the control and widens it to its longest option; anchor pins it to the width of the control."
524
+ },
525
+ {
526
+ "name": "mount",
527
+ "type": "'active' | 'lazy' | 'eager'",
528
+ "defaultValue": "active",
529
+ "appliesTo": "sl-select",
530
+ "description": "When the list exists in the DOM: active while it is open, lazy from the first open on, eager from the start."
531
+ },
532
+ {
533
+ "name": "strategy",
534
+ "type": "'absolute' | 'fixed'",
535
+ "defaultValue": "absolute",
536
+ "appliesTo": "sl-select",
537
+ "description": "The CSS position the positioner gives the list."
538
+ },
539
+ {
540
+ "name": "multiple",
541
+ "type": "boolean",
542
+ "defaultValue": "false",
543
+ "appliesTo": "sl-select",
544
+ "description": "Allows several values. The value becomes an array, and the list stays open as options are chosen."
545
+ },
546
+ {
547
+ "name": "clearable",
548
+ "type": "boolean",
549
+ "defaultValue": "false",
550
+ "appliesTo": "sl-select",
551
+ "description": "Draws a clear button once something is chosen."
552
+ },
553
+ {
554
+ "name": "loop",
555
+ "type": "boolean",
556
+ "defaultValue": "false",
557
+ "appliesTo": "sl-select",
558
+ "description": "Whether the arrow keys wrap from the last option to the first."
559
+ },
560
+ {
561
+ "name": "typeahead",
562
+ "type": "boolean",
563
+ "defaultValue": "true",
564
+ "appliesTo": "sl-select",
565
+ "description": "Whether typing the first letters of a label highlights the matching option. Off while search is set."
566
+ },
567
+ {
568
+ "name": "typeaheadTimeout",
569
+ "type": "number",
570
+ "defaultValue": "500",
571
+ "appliesTo": "sl-select",
572
+ "description": "How long typed letters keep building one search, in milliseconds."
573
+ },
574
+ {
575
+ "name": "closeOnSelect",
576
+ "type": "boolean",
577
+ "defaultValue": "true",
578
+ "appliesTo": "sl-select",
579
+ "description": "Whether choosing an option closes the list. A multiple select stays open regardless."
580
+ },
581
+ {
582
+ "name": "closeOnEscape",
583
+ "type": "boolean",
584
+ "defaultValue": "true",
585
+ "appliesTo": "sl-select",
586
+ "description": "Whether Escape closes the list."
587
+ },
588
+ {
589
+ "name": "closeOnOutsidePress",
590
+ "type": "boolean",
591
+ "defaultValue": "true",
592
+ "appliesTo": "sl-select",
593
+ "description": "Whether a press outside the list closes it."
594
+ },
595
+ {
596
+ "name": "flip",
597
+ "type": "boolean",
598
+ "defaultValue": "true",
599
+ "appliesTo": "sl-select",
600
+ "description": "Whether the list may open on the opposite side when it does not fit."
601
+ },
602
+ {
603
+ "name": "shift",
604
+ "type": "boolean",
605
+ "defaultValue": "true",
606
+ "appliesTo": "sl-select",
607
+ "description": "Whether the list may slide along its edge to stay in view."
608
+ },
609
+ {
610
+ "name": "hideWhenDetached",
611
+ "type": "boolean",
612
+ "defaultValue": "true",
613
+ "appliesTo": "sl-select",
614
+ "description": "Whether the list hides while its control is scrolled out of view."
615
+ },
616
+ {
617
+ "name": "portal",
618
+ "type": "boolean",
619
+ "defaultValue": "true",
620
+ "appliesTo": "sl-select",
621
+ "description": "Whether the list renders at the end of the document instead of inside the control."
622
+ },
623
+ {
624
+ "name": "fullWidth",
625
+ "type": "boolean",
626
+ "defaultValue": "true",
627
+ "appliesTo": "sl-select",
628
+ "description": "Whether the control fills its container. false sizes it to its widest value."
629
+ },
630
+ {
631
+ "name": "disabled",
632
+ "type": "boolean",
633
+ "defaultValue": "false",
634
+ "appliesTo": "sl-select",
635
+ "description": "Disables the control and takes it out of the tab order. When unset, the select takes the state of its field or of its form control."
636
+ },
637
+ {
638
+ "name": "readOnly",
639
+ "type": "boolean",
640
+ "defaultValue": "false",
641
+ "appliesTo": "sl-select",
642
+ "description": "Keeps the value visible and focusable and never opens the list. When unset, the select takes the state of its field."
643
+ },
644
+ {
645
+ "name": "required",
646
+ "type": "boolean",
647
+ "defaultValue": "false",
648
+ "appliesTo": "sl-select",
649
+ "description": "Sets aria-required, and makes the select’s validator report a required error while nothing is chosen."
650
+ },
651
+ {
652
+ "name": "invalid",
653
+ "type": "boolean",
654
+ "defaultValue": "false",
655
+ "appliesTo": "sl-select",
656
+ "description": "Sets aria-invalid and draws the border and the focus ring in the danger tone. When unset, the select takes the state of its field."
657
+ },
658
+ {
659
+ "name": "loading",
660
+ "type": "boolean",
661
+ "defaultValue": "false",
662
+ "appliesTo": "sl-select",
663
+ "description": "Shows the spinner, three placeholder rows and the loading message, and sets aria-busy on the listbox."
664
+ },
665
+ {
666
+ "name": "sideOffset",
667
+ "type": "number",
668
+ "defaultValue": "4",
669
+ "appliesTo": "sl-select",
670
+ "description": "The gap between the control and the list, in pixels."
671
+ },
672
+ {
673
+ "name": "alignOffset",
674
+ "type": "number",
675
+ "defaultValue": "0",
676
+ "appliesTo": "sl-select",
677
+ "description": "How far the list shifts along its edge, in pixels."
678
+ },
679
+ {
680
+ "name": "collisionPadding",
681
+ "type": "number",
682
+ "defaultValue": "8",
683
+ "appliesTo": "sl-select",
684
+ "description": "The distance the list keeps from the edges of the viewport, in pixels."
685
+ },
686
+ {
687
+ "name": "messages",
688
+ "type": "Partial<SelectMessages>",
689
+ "defaultValue": "—",
690
+ "appliesTo": "sl-select",
691
+ "description": "Replaces any of the phrases the select writes: clear, remove ({label}), summary ({count}), search, searchPlaceholder, count ({count}), empty and loading. Phrases left out come from the language in force."
692
+ },
693
+ {
694
+ "name": "value",
695
+ "type": "string",
696
+ "defaultValue": "—",
697
+ "appliesTo": "sl-select-item",
698
+ "description": "The option’s value: what is submitted and what a change request carries."
699
+ },
700
+ {
701
+ "name": "disabled",
702
+ "type": "boolean",
703
+ "defaultValue": "false",
704
+ "appliesTo": "sl-select-item",
705
+ "description": "Announces the option as unavailable, keeps it in the list, and skips it with every movement key."
706
+ },
707
+ {
708
+ "name": "description",
709
+ "type": "string",
710
+ "defaultValue": "—",
711
+ "appliesTo": "sl-select-item",
712
+ "description": "A second line under the label."
713
+ },
714
+ {
715
+ "name": "icon",
716
+ "type": "GlyphName",
717
+ "defaultValue": "—",
718
+ "appliesTo": "sl-select-item",
719
+ "description": "The glyph drawn in the first column, inside an Icon box."
720
+ },
721
+ {
722
+ "name": "textValue",
723
+ "type": "string",
724
+ "defaultValue": "—",
725
+ "appliesTo": "sl-select-item",
726
+ "description": "The text typeahead and the filter match on, when the label is not plain text."
727
+ },
728
+ {
729
+ "name": "position",
730
+ "type": "number",
731
+ "defaultValue": "—",
732
+ "appliesTo": "sl-select-item",
733
+ "description": "The option’s one-based place in the whole collection, written as aria-posinset."
734
+ },
735
+ {
736
+ "name": "label",
737
+ "type": "string",
738
+ "defaultValue": "—",
739
+ "appliesTo": "sl-select-group",
740
+ "description": "The group’s heading, which names the group through aria-labelledby."
741
+ }
742
+ ],
743
+ "composition": [
744
+ {
745
+ "name": "provideSelectDefaults()",
746
+ "type": "Provider",
747
+ "defaultValue": "—",
748
+ "appliesTo": "Application",
749
+ "description": "Sets any axis once, in a bootstrap, a route or a component’s providers. The words come from the language in force, set by provideSlotted. An input set on one select still wins."
750
+ },
751
+ {
752
+ "name": "slSelectValue",
753
+ "type": "ng-template",
754
+ "defaultValue": "—",
755
+ "appliesTo": "sl-select",
756
+ "description": "Replaces the built-in summary. The template context holds the values as $implicit and their labels as labels."
757
+ },
758
+ {
759
+ "name": "exportAs",
760
+ "type": "slSelect",
761
+ "defaultValue": "—",
762
+ "appliesTo": "sl-select",
763
+ "description": "The SlSelect instance, for a template that calls focus(), focusSearch(), setOpen() or scrollToKey()."
764
+ },
765
+ {
766
+ "name": "ControlValueAccessor",
767
+ "type": "NG_VALUE_ACCESSOR",
768
+ "defaultValue": "—",
769
+ "appliesTo": "sl-select",
770
+ "description": "formControl, formControlName and ngModel bind the value, and the form’s disabled state reaches the control."
771
+ },
772
+ {
773
+ "name": "Validator",
774
+ "type": "NG_VALIDATORS",
775
+ "defaultValue": "—",
776
+ "appliesTo": "sl-select",
777
+ "description": "The select reports required itself: the hidden native select always holds an option, so the browser cannot."
778
+ }
779
+ ],
780
+ "events": [
781
+ {
782
+ "name": "valueChange",
783
+ "payload": "string | string[] | null",
784
+ "when": "After the selection changes. It is the output half of [(value)]."
785
+ },
786
+ {
787
+ "name": "valueChangeRequest",
788
+ "payload": "ChangeRequest<string | string[] | null>",
789
+ "when": "Before the selection changes. reason is pointer, keyboard, clear, select or programmatic, and cancel() refuses the change."
790
+ },
791
+ {
792
+ "name": "openChange",
793
+ "payload": "boolean",
794
+ "when": "After the list opens or closes. It is the output half of [(open)]."
795
+ },
796
+ {
797
+ "name": "openChangeRequest",
798
+ "payload": "ChangeRequest<boolean>",
799
+ "when": "Before the list opens or closes. reason tells a choice from a dismissal: select, escape, outsidePress, pointer, keyboard, dismiss, blur or programmatic."
800
+ },
801
+ {
802
+ "name": "searchValueChange",
803
+ "payload": "string",
804
+ "when": "After the query changes. It is the output half of [(searchValue)]."
805
+ },
806
+ {
807
+ "name": "searchValueChangeRequest",
808
+ "payload": "ChangeRequest<string>",
809
+ "when": "Before the query changes. reason is keyboard for typing, select when an option is chosen while the list stays open, and clear when Escape empties the field or the list empties it as it opens and closes."
810
+ },
811
+ {
812
+ "name": "highlightedValueChangeRequest",
813
+ "payload": "ChangeRequest<string | null>",
814
+ "when": "Before the highlight moves. reason is pointer, keyboard or programmatic."
815
+ }
816
+ ],
817
+ "accessibility": [
818
+ "The trigger is a button with role=\"combobox\", aria-haspopup=\"listbox\" and aria-expanded. The list is a listbox with an option for each row.",
819
+ "DOM focus stays on the trigger. aria-activedescendant names the highlighted option, which also carries data-current; chosen options carry aria-selected and data-selected. The highlight is where the keyboard is; the selection is what was chosen.",
820
+ "A disabled option carries aria-disabled, keeps its place in the list, and is skipped by every movement key, typeahead included.",
821
+ "Inside a field, the trigger carries the field’s control id, so a press on the label focuses it without opening the list. The trigger also takes the label through aria-labelledby, because the name a label gives a button does not reliably reach a button with role=\"combobox\". Outside a field, give sl-select an aria-label, which it forwards to the trigger.",
822
+ "With search, the list is a dialog that holds a search field and a listbox, the trigger sets aria-haspopup=\"dialog\", and focus moves into the search field while the list is open.",
823
+ "Tab chooses the highlighted option and moves focus on, as the APG select-only example specifies; a native select only closes. Escape closes without choosing."
824
+ ]
825
+ }
826
+ },
827
+ "tokens": [
828
+ "--slotted-border-subtle",
829
+ "--slotted-border-width-thin",
830
+ "--slotted-control-border-color",
831
+ "--slotted-control-border-width",
832
+ "--slotted-control-font-family",
833
+ "--slotted-control-font-size-lg",
834
+ "--slotted-control-font-size-md",
835
+ "--slotted-control-font-size-sm",
836
+ "--slotted-control-gap-lg",
837
+ "--slotted-control-gap-md",
838
+ "--slotted-control-gap-sm",
839
+ "--slotted-control-height-lg",
840
+ "--slotted-control-height-md",
841
+ "--slotted-control-height-sm",
842
+ "--slotted-control-icon-size-lg",
843
+ "--slotted-control-icon-size-md",
844
+ "--slotted-control-icon-size-sm",
845
+ "--slotted-control-inner-size-lg",
846
+ "--slotted-control-inner-size-md",
847
+ "--slotted-control-inner-size-sm",
848
+ "--slotted-control-invalid-edge-width",
849
+ "--slotted-control-padding-inline-lg",
850
+ "--slotted-control-padding-inline-md",
851
+ "--slotted-control-padding-inline-sm",
852
+ "--slotted-control-radius",
853
+ "--slotted-control-shadow",
854
+ "--slotted-control-shadow-focus-geometry",
855
+ "--slotted-control-surface",
856
+ "--slotted-control-transition-duration",
857
+ "--slotted-control-transition-easing",
858
+ "--slotted-disabled-background",
859
+ "--slotted-disabled-border",
860
+ "--slotted-disabled-foreground",
861
+ "--slotted-duration-medium",
862
+ "--slotted-duration-short",
863
+ "--slotted-easing-enter",
864
+ "--slotted-easing-exit",
865
+ "--slotted-easing-standard",
866
+ "--slotted-focus-ring-color",
867
+ "--slotted-focus-ring-color-invalid",
868
+ "--slotted-focus-ring-offset",
869
+ "--slotted-focus-ring-width",
870
+ "--slotted-font-family-sans",
871
+ "--slotted-font-size-xs",
872
+ "--slotted-font-weight-medium",
873
+ "--slotted-font-weight-semibold",
874
+ "--slotted-line-height-md",
875
+ "--slotted-line-height-sm",
876
+ "--slotted-radius-lg",
877
+ "--slotted-radius-none",
878
+ "--slotted-select-action-active-background",
879
+ "--slotted-select-action-color",
880
+ "--slotted-select-action-hover-background",
881
+ "--slotted-select-action-size",
882
+ "--slotted-select-arrow-color",
883
+ "--slotted-select-background",
884
+ "--slotted-select-border-color",
885
+ "--slotted-select-color",
886
+ "--slotted-select-content-border-color",
887
+ "--slotted-select-content-padding-block",
888
+ "--slotted-select-content-padding-inline",
889
+ "--slotted-select-content-radius",
890
+ "--slotted-select-content-shadow",
891
+ "--slotted-select-content-text",
892
+ "--slotted-select-content-text-muted",
893
+ "--slotted-select-disabled-background",
894
+ "--slotted-select-disabled-border-color",
895
+ "--slotted-select-disabled-color",
896
+ "--slotted-select-highlight",
897
+ "--slotted-select-highlight-active",
898
+ "--slotted-select-highlight-ring",
899
+ "--slotted-select-hover-border-color",
900
+ "--slotted-select-icon-size-min",
901
+ "--slotted-select-invalid-border-color",
902
+ "--slotted-select-invalid-edge-width",
903
+ "--slotted-select-invalid-focus-ring-color",
904
+ "--slotted-select-item-radius",
905
+ "--slotted-select-measure",
906
+ "--slotted-select-open-border-color",
907
+ "--slotted-select-placeholder-color",
908
+ "--slotted-select-plain-hover-background",
909
+ "--slotted-select-radius",
910
+ "--slotted-select-readonly-background",
911
+ "--slotted-select-search-icon-color",
912
+ "--slotted-select-selected-color",
913
+ "--slotted-select-separator-color",
914
+ "--slotted-select-shadow",
915
+ "--slotted-select-subtle-background",
916
+ "--slotted-select-subtle-border-color",
917
+ "--slotted-select-subtle-hover-background",
918
+ "--slotted-select-surface",
919
+ "--slotted-shadow-md",
920
+ "--slotted-space-1",
921
+ "--slotted-space-2",
922
+ "--slotted-space-5",
923
+ "--slotted-surface-raised",
924
+ "--slotted-surface-sunken",
925
+ "--slotted-target-comfortable",
926
+ "--slotted-target-min",
927
+ "--slotted-text",
928
+ "--slotted-text-muted",
929
+ "--slotted-tone-accent-border",
930
+ "--slotted-tone-accent-surface",
931
+ "--slotted-tone-accent-text",
932
+ "--slotted-tone-danger-border",
933
+ "--slotted-tone-secondary-subtle-active",
934
+ "--slotted-tone-secondary-subtle-hover",
935
+ "--slotted-z-index-popover"
936
+ ],
937
+ "examples": [
938
+ {
939
+ "id": "playground",
940
+ "title": "Playground",
941
+ "note": "One select with every axis on it, driven by the controls under the canvas. Change size, variant and width and watch the control and its popup answer together.",
942
+ "language": "html",
943
+ "source": "<sl-select aria-label=\"Fruit\" placeholder=\"Choose a fruit\">\n <sl-select-item value=\"apple\">Apple</sl-select-item>\n <sl-select-item value=\"blueberry\">Blueberry</sl-select-item>\n</sl-select>\n",
944
+ "verdict": "excerpt"
945
+ },
946
+ {
947
+ "id": "selection",
948
+ "title": "Two-way, and the request",
949
+ "note": "The model moves the value in both directions; the request output arrives first and carries the reason, so a page can tell a press from a key — or refuse the change.",
950
+ "language": "html",
951
+ "source": "<sl-select [(value)]=\"fruit\" (valueChangeRequest)=\"log($event.reason)\">…</sl-select>\n",
952
+ "verdict": "excerpt"
953
+ },
954
+ {
955
+ "id": "placeholder",
956
+ "title": "Placeholder and unresolved values",
957
+ "note": "Nothing chosen shows the placeholder in the muted step. A value the collection cannot name shows the value itself, which is what an async list holds for one render.",
958
+ "language": "ts",
959
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst REASONS: SelectOption[] = [\n { value: 'damaged', label: 'Arrived damaged' },\n { value: 'wrong-item', label: 'Wrong item shipped' },\n { value: 'not-needed', label: 'No longer needed' },\n];\n\nconst TERMS: SelectOption[] = [\n { value: 'prepaid', label: 'Prepaid' },\n { value: 'net-30', label: 'Net 30' },\n { value: 'net-45', label: 'Net 45' },\n];\n\n@Component({\n selector: 'app-select-placeholder',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n <div slField>\n <label slFieldLabel>Return reason</label>\n <sl-select placeholder=\"Choose a reason\">\n @for (reason of reasons; track reason.value) {\n <sl-select-item [value]=\"reason.value\">{{ reason.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slField>\n <label slFieldLabel>Payment terms</label>\n <sl-select placeholder=\"Choose terms\" value=\"net-30\" [items]=\"terms\">\n @for (term of terms; track term.value) {\n <sl-select-item [value]=\"term.value\">{{ term.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n </div>\n `,\n})\nexport class SelectPlaceholder {\n protected readonly reasons = REASONS;\n protected readonly terms = TERMS;\n}\n",
960
+ "verdict": "example"
961
+ },
962
+ {
963
+ "id": "groups",
964
+ "title": "Groups, icons and descriptions",
965
+ "note": "Two named groups with a line between them. Every label starts on the same line whether or not its option carries artwork, because the column belongs to the list.",
966
+ "language": "ts",
967
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport {\n SlSelect,\n SlSelectGroup,\n SlSelectItem,\n SlSelectSeparator,\n type SelectOptionGroup,\n} from '@slotted/angular/select';\n\nconst METHODS: SelectOptionGroup[] = [\n {\n label: 'Ground',\n options: [\n { value: 'ups-ground', label: 'UPS Ground' },\n { value: 'fedex-ground', label: 'FedEx Ground' },\n ],\n },\n {\n label: 'Express',\n options: [\n { value: 'ups-2day', label: 'UPS 2nd Day Air' },\n { value: 'fedex-overnight', label: 'FedEx Priority Overnight' },\n ],\n },\n {\n label: 'Freight',\n options: [{ value: 'ltl', label: 'LTL freight, palletised' }],\n },\n];\n\n@Component({\n selector: 'app-select-groups',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectGroup, SlSelectItem, SlSelectSeparator],\n template: `\n <div slField>\n <label slFieldLabel>Shipping method</label>\n <sl-select placeholder=\"Choose a method\">\n @for (group of methods; track group.label; let first = $first) {\n @if (!first) {\n <sl-select-separator />\n }\n <sl-select-group [label]=\"group.label\">\n @for (method of group.options; track method.value) {\n <sl-select-item [value]=\"method.value\">{{ method.label }}</sl-select-item>\n }\n </sl-select-group>\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectGroups {\n protected readonly methods = METHODS;\n}\n",
968
+ "verdict": "example"
969
+ },
970
+ {
971
+ "id": "multiple",
972
+ "title": "Multiple selection",
973
+ "note": "The popup stays open as options are taken, and the control shows the first label and how many more. Space toggles without closing, which is the listbox pattern’s own model.",
974
+ "language": "ts",
975
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport {\n SlSelect,\n SlSelectItem,\n type SelectOption,\n type SelectSelection,\n} from '@slotted/angular/select';\n\nconst TEAMS: SelectOption[] = [\n { value: 'fulfilment', label: 'Fulfilment' },\n { value: 'finance', label: 'Finance' },\n { value: 'customer-care', label: 'Customer care' },\n { value: 'purchasing', label: 'Purchasing' },\n { value: 'returns', label: 'Returns desk' },\n];\n\n@Component({\n selector: 'app-select-multiple',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Notify teams</label>\n <sl-select\n multiple\n clearable\n placeholder=\"No one is notified\"\n [items]=\"teams\"\n [(value)]=\"notified\"\n >\n @for (team of teams; track team.value) {\n <sl-select-item [value]=\"team.value\">{{ team.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>Each team gets an email when the order is delayed.</span>\n </div>\n `,\n})\nexport class SelectMultiple {\n protected readonly teams = TEAMS;\n protected readonly notified = signal<SelectSelection>(['fulfilment', 'finance']);\n}\n",
976
+ "verdict": "example"
977
+ },
978
+ {
979
+ "id": "clearable",
980
+ "title": "Clearable",
981
+ "note": "The clear button appears only once something is chosen, and focus goes back to the control it belonged to rather than to the document.",
982
+ "language": "ts",
983
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst OWNERS: SelectOption[] = [\n { value: 'avery', label: 'Avery Collins' },\n { value: 'kenji', label: 'Kenji Watanabe' },\n { value: 'lucia', label: 'Lucía Fernández' },\n { value: 'ruth', label: 'Ruth Adeyemi' },\n];\n\n@Component({\n selector: 'app-select-clearable',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Assignee</label>\n <sl-select clearable placeholder=\"Unassigned\" value=\"kenji\" [items]=\"owners\">\n @for (owner of owners; track owner.value) {\n <sl-select-item [value]=\"owner.value\">{{ owner.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>Clear the assignee to return the ticket to the queue.</span>\n </div>\n `,\n})\nexport class SelectClearable {\n protected readonly owners = OWNERS;\n}\n",
984
+ "verdict": "example"
985
+ },
986
+ {
987
+ "id": "sizes",
988
+ "title": "Sizes",
989
+ "note": "Three steps, and every one of them reads control geometry — so a select beside a text field of the same size is the same height to the pixel.",
990
+ "language": "ts",
991
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport {\n SlSelect,\n SlSelectItem,\n type SelectOption,\n type SelectSize,\n} from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst SIZES: { size: SelectSize; label: string }[] = [\n { size: 'sm', label: 'Small' },\n { size: 'md', label: 'Medium' },\n { size: 'lg', label: 'Large' },\n];\n\nconst WAREHOUSES: SelectOption[] = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-select-sizes',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n @for (step of sizes; track step.size) {\n <div slField>\n <label slFieldLabel>{{ step.label }}</label>\n <sl-select value=\"RNO\" [size]=\"step.size\" [items]=\"warehouses\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n }\n </div>\n `,\n})\nexport class SelectSizes {\n protected readonly sizes = SIZES;\n protected readonly warehouses = WAREHOUSES;\n}\n",
992
+ "verdict": "example"
993
+ },
994
+ {
995
+ "id": "variants",
996
+ "title": "Variants",
997
+ "note": "outline on the page, subtle where a form sinks into its card, and plain for a table cell that is only a control while it is being used.",
998
+ "language": "ts",
999
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectVariant } from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst VARIANTS: { variant: SelectVariant; label: string }[] = [\n { variant: 'outline', label: 'Outline' },\n { variant: 'subtle', label: 'Subtle' },\n { variant: 'plain', label: 'Plain' },\n];\n\nconst WAREHOUSES = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-select-variants',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n @for (step of variants; track step.variant) {\n <div slField>\n <label slFieldLabel>{{ step.label }}</label>\n <sl-select placeholder=\"Choose a warehouse\" [variant]=\"step.variant\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n }\n </div>\n `,\n})\nexport class SelectVariants {\n protected readonly variants = VARIANTS;\n protected readonly warehouses = WAREHOUSES;\n}\n",
1000
+ "verdict": "example"
1001
+ },
1002
+ {
1003
+ "id": "states",
1004
+ "title": "States",
1005
+ "note": "Required, invalid, read-only and disabled side by side. Read-only keeps its value legible and refuses to open; disabled answers nothing at all.",
1006
+ "language": "ts",
1007
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst WAREHOUSES: SelectOption[] = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-select-states',\n imports: [\n SlField,\n SlFieldDescription,\n SlFieldError,\n SlFieldLabel,\n SlSelect,\n SlSelectItem,\n SlStack,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField invalid required>\n <label slFieldLabel>Return warehouse</label>\n <sl-select value=\"SAV\" [items]=\"warehouses\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldError>Savannah does not accept returns. Choose Reno or Columbus.</span>\n </div>\n <div slField readOnly>\n <label slFieldLabel>Origin warehouse</label>\n <sl-select value=\"RNO\" [items]=\"warehouses\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>Set when the order was picked.</span>\n </div>\n <div slField disabled>\n <label slFieldLabel>Transfer warehouse</label>\n <sl-select value=\"CMH\" [items]=\"warehouses\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>Transfers open once the order is invoiced.</span>\n </div>\n </div>\n `,\n})\nexport class SelectStates {\n protected readonly warehouses = WAREHOUSES;\n}\n",
1008
+ "verdict": "example"
1009
+ },
1010
+ {
1011
+ "id": "loading-and-empty",
1012
+ "title": "Loading and empty",
1013
+ "note": "A popup with nothing in it opens onto a sentence rather than onto a two-pixel box, and a loading one keeps that measure so nothing jumps when the options land.",
1014
+ "language": "html",
1015
+ "source": "<sl-select loading [messages]=\"{ loading: 'Fetching teams…' }\">…</sl-select>\n<sl-select [messages]=\"{ empty: 'No teams yet' }\"></sl-select>\n",
1016
+ "verdict": "excerpt"
1017
+ },
1018
+ {
1019
+ "id": "long-content",
1020
+ "title": "Content the family did not choose",
1021
+ "note": "A translated label, an unbroken identifier and a hundred options. The label clamps at two lines with the whole string still in the DOM, and the token breaks inside the option.",
1022
+ "language": "html",
1023
+ "source": "<sl-select-item value=\"urn\">urn:acme:catalogue:9f2c41ab8de07c5511903fbe</sl-select-item>\n",
1024
+ "verdict": "excerpt"
1025
+ },
1026
+ {
1027
+ "id": "search",
1028
+ "title": "Searching a long list",
1029
+ "note": "search opens the popup onto a field. The query filters the options, the span it matched is marked, and the count is announced. It is transient: it never becomes a value, it is emptied when an option is taken, and the control goes on showing the chosen label. Escape clears the query before it closes the popup, and Tab commits and leaves the control.",
1030
+ "language": "ts",
1031
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst COUNTRIES: SelectOption[] = [\n { value: 'AR', label: 'Argentina' },\n { value: 'AU', label: 'Australia' },\n { value: 'AT', label: 'Austria' },\n { value: 'BE', label: 'Belgium' },\n { value: 'BR', label: 'Brazil' },\n { value: 'CA', label: 'Canada' },\n { value: 'CL', label: 'Chile' },\n { value: 'CO', label: 'Colombia' },\n { value: 'CI', label: 'Côte d’Ivoire' },\n { value: 'DK', label: 'Denmark' },\n { value: 'FI', label: 'Finland' },\n { value: 'FR', label: 'France' },\n { value: 'DE', label: 'Germany' },\n { value: 'IE', label: 'Ireland' },\n { value: 'IT', label: 'Italy' },\n { value: 'JP', label: 'Japan' },\n { value: 'MX', label: 'Mexico' },\n { value: 'NL', label: 'Netherlands' },\n { value: 'NZ', label: 'New Zealand' },\n { value: 'NO', label: 'Norway' },\n { value: 'PL', label: 'Poland' },\n { value: 'PT', label: 'Portugal' },\n { value: 'ES', label: 'Spain' },\n { value: 'SE', label: 'Sweden' },\n { value: 'CH', label: 'Switzerland' },\n { value: 'TR', label: 'Türkiye' },\n { value: 'GB', label: 'United Kingdom' },\n { value: 'US', label: 'United States' },\n { value: 'UY', label: 'Uruguay' },\n { value: 'VN', label: 'Vietnam' },\n];\n\n@Component({\n selector: 'app-select-search',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Ship-to country</label>\n <sl-select\n search\n placeholder=\"Choose a country\"\n value=\"US\"\n [items]=\"countries\"\n [messages]=\"{ searchPlaceholder: 'Filter countries' }\"\n >\n @for (country of countries; track country.value) {\n <sl-select-item [value]=\"country.value\" [label]=\"country.label\" />\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectSearch {\n protected readonly countries = COUNTRIES;\n}\n",
1032
+ "verdict": "example"
1033
+ },
1034
+ {
1035
+ "id": "placement",
1036
+ "title": "Placement and width",
1037
+ "note": "The popup hangs from the start edge of its control. It is never narrower than the control and grows when an option needs more room, so a narrow control does not wrap its labels. width=\"anchor\" pins it to the width of the control.",
1038
+ "language": "ts",
1039
+ "source": "import { Component } from '@angular/core';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst PAGE_SIZES: SelectOption[] = [\n { value: '25', label: '25 rows' },\n { value: '50', label: '50 rows' },\n { value: '100', label: '100 rows' },\n];\n\nconst SORTS: (SelectOption & { description: string })[] = [\n { value: 'newest', label: 'Newest', description: 'Most recent order date first.' },\n { value: 'total', label: 'Total', description: 'Largest order total first.' },\n { value: 'ship-date', label: 'Ship date', description: 'Earliest promised ship date first.' },\n];\n\n@Component({\n selector: 'app-select-placement',\n imports: [SlInline, SlSelect, SlSelectItem],\n template: `\n <div slInline [gap]=\"3\" justify=\"between\" align=\"center\">\n <sl-select\n aria-label=\"Rows per page\"\n side=\"top\"\n value=\"25\"\n [fullWidth]=\"false\"\n [items]=\"pageSizes\"\n >\n @for (size of pageSizes; track size.value) {\n <sl-select-item [value]=\"size.value\">{{ size.label }}</sl-select-item>\n }\n </sl-select>\n <sl-select\n aria-label=\"Sort orders\"\n align=\"end\"\n width=\"content\"\n value=\"newest\"\n [fullWidth]=\"false\"\n [items]=\"sorts\"\n >\n @for (sort of sorts; track sort.value) {\n <sl-select-item [value]=\"sort.value\" [description]=\"sort.description\">{{\n sort.label\n }}</sl-select-item>\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectPlacement {\n protected readonly pageSizes = PAGE_SIZES;\n protected readonly sorts = SORTS;\n}\n",
1040
+ "verdict": "example"
1041
+ },
1042
+ {
1043
+ "id": "keyboard",
1044
+ "title": "Keyboard",
1045
+ "note": "Focus never leaves the button: the arrows, Home, End and the page keys move aria-activedescendant, and typing jumps to the first option that begins with it.",
1046
+ "language": "html",
1047
+ "source": "<sl-select typeahead [typeaheadTimeout]=\"500\" [loop]=\"false\">…</sl-select>\n",
1048
+ "verdict": "excerpt"
1049
+ },
1050
+ {
1051
+ "id": "form",
1052
+ "title": "In a Reactive Form",
1053
+ "note": "The control is a ControlValueAccessor and a Validator, so formControl moves the value and required is reported by the family — the hidden native select always holds an option, so the browser cannot answer it.",
1054
+ "language": "ts",
1055
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlInline } from '@slotted/angular/inline';\nimport {\n SlSelect,\n SlSelectItem,\n type SelectOption,\n type SelectSelection,\n} from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlText } from '@slotted/angular/typography';\n\nconst WAREHOUSES: SelectOption[] = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\nconst CARRIERS: SelectOption[] = [\n { value: 'ups', label: 'UPS Ground' },\n { value: 'fedex', label: 'FedEx Ground' },\n { value: 'usps', label: 'USPS Priority Mail' },\n];\n\nconst labelOf = (options: SelectOption[], value: SelectSelection) =>\n options.find((option) => option.value === value)?.label;\n\n@Component({\n selector: 'app-select-form',\n imports: [\n ReactiveFormsModule,\n SlButton,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlInline,\n SlSelect,\n SlSelectItem,\n SlStack,\n SlText,\n ],\n template: `\n <form novalidate [formGroup]=\"form\" (ngSubmit)=\"submit()\" (reset)=\"clear()\">\n <div slStack [gap]=\"5\">\n <div slField required [invalid]=\"missing() ? true : undefined\">\n <label slFieldLabel>Fulfilment warehouse</label>\n <sl-select\n name=\"warehouse\"\n placeholder=\"Choose a warehouse\"\n formControlName=\"warehouse\"\n [items]=\"warehouses\"\n >\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldError live=\"polite\" reserve>{{\n missing() ? 'Choose the warehouse that ships this order.' : ''\n }}</span>\n </div>\n <div slField>\n <label slFieldLabel>Carrier</label>\n <sl-select name=\"carrier\" formControlName=\"carrier\" [items]=\"carriers\">\n @for (carrier of carriers; track carrier.value) {\n <sl-select-item [value]=\"carrier.value\">{{ carrier.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slInline [gap]=\"3\" align=\"center\">\n <button slButton type=\"submit\">Save</button>\n <button slButton type=\"reset\" tone=\"secondary\" variant=\"outline\">Reset</button>\n @if (saved(); as message) {\n <span slText size=\"sm\" tone=\"muted\">{{ message }}</span>\n }\n </div>\n </div>\n </form>\n `,\n})\nexport class SelectForm {\n protected readonly warehouses = WAREHOUSES;\n protected readonly carriers = CARRIERS;\n protected readonly form = new FormGroup({\n warehouse: new FormControl<SelectSelection>(null, Validators.required),\n carrier: new FormControl<SelectSelection>('ups', { nonNullable: true }),\n });\n private readonly warehouse = toSignal(this.form.controls.warehouse.valueChanges, {\n initialValue: this.form.controls.warehouse.value,\n });\n private readonly submitted = signal(false);\n protected readonly missing = computed(() => this.submitted() && this.warehouse() === null);\n protected readonly saved = signal<string | null>(null);\n\n protected submit(): void {\n this.submitted.set(true);\n const { warehouse, carrier } = this.form.getRawValue();\n this.saved.set(\n this.form.valid\n ? `Ships from ${labelOf(WAREHOUSES, warehouse)} by ${labelOf(CARRIERS, carrier)}.`\n : null,\n );\n }\n\n protected clear(): void {\n this.submitted.set(false);\n this.saved.set(null);\n }\n}\n",
1056
+ "verdict": "example"
1057
+ },
1058
+ {
1059
+ "id": "composition",
1060
+ "title": "Composition",
1061
+ "note": "Defaults provided once for a whole application, a summary the consumer writes as a template, and the instance reached from the template through exportAs.",
1062
+ "language": "ts",
1063
+ "source": "providers: [provideSelectDefaults({ size: 'sm', variant: 'subtle', width: 'anchor' })];\n",
1064
+ "verdict": "excerpt"
1065
+ },
1066
+ {
1067
+ "id": "basic",
1068
+ "title": "basic.ts",
1069
+ "note": null,
1070
+ "language": "ts",
1071
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem } from '@slotted/angular/select';\n\nconst WAREHOUSES = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-select-basic',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Fulfilment warehouse</label>\n <sl-select placeholder=\"Choose a warehouse\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>New orders ship from this warehouse.</span>\n </div>\n `,\n})\nexport class SelectBasic {\n protected readonly warehouses = WAREHOUSES;\n}\n",
1072
+ "verdict": "example"
1073
+ },
1074
+ {
1075
+ "id": "controlled",
1076
+ "title": "controlled.ts",
1077
+ "note": null,
1078
+ "language": "ts",
1079
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectSelection } from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst SPEEDS = [\n { value: 'ground', label: 'Ground', transit: '3–5 business days', price: '$8.40' },\n { value: 'two-day', label: 'Two-day', transit: '2 business days', price: '$18.90' },\n { value: 'overnight', label: 'Overnight', transit: 'Next business day', price: '$42.75' },\n];\n\n@Component({\n selector: 'app-select-controlled',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Delivery speed</label>\n <sl-select [items]=\"speeds\" [(value)]=\"speed\">\n @for (option of speeds; track option.value) {\n <sl-select-item [value]=\"option.value\">{{ option.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <span>Arrives in {{ chosen()?.transit }}. Shipping: {{ chosen()?.price }}</span>\n </div>\n `,\n})\nexport class SelectControlled {\n protected readonly speeds = SPEEDS;\n protected readonly speed = signal<SelectSelection>('ground');\n protected readonly chosen = computed(() =>\n SPEEDS.find((option) => option.value === this.speed()),\n );\n}\n",
1080
+ "verdict": "example"
1081
+ },
1082
+ {
1083
+ "id": "defaults",
1084
+ "title": "defaults.ts",
1085
+ "note": null,
1086
+ "language": "ts",
1087
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport {\n provideSelectDefaults,\n SlSelect,\n SlSelectItem,\n type SelectOption,\n} from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst OWNERS: SelectOption[] = [\n { value: 'avery', label: 'Avery Collins' },\n { value: 'kenji', label: 'Kenji Watanabe' },\n { value: 'lucia', label: 'Lucía Fernández' },\n];\n\nconst SEGMENTS: SelectOption[] = [\n { value: 'enterprise', label: 'Enterprise' },\n { value: 'wholesale', label: 'Wholesale' },\n { value: 'retail', label: 'Retail' },\n];\n\n@Component({\n selector: 'app-select-defaults',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n providers: [provideSelectDefaults({ size: 'sm', variant: 'subtle', clearable: true })],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Account owner</label>\n <sl-select placeholder=\"Any owner\" value=\"lucia\" [items]=\"owners\">\n @for (owner of owners; track owner.value) {\n <sl-select-item [value]=\"owner.value\">{{ owner.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slField>\n <label slFieldLabel>Segment</label>\n <sl-select placeholder=\"Any segment\" value=\"wholesale\" [items]=\"segments\">\n @for (segment of segments; track segment.value) {\n <sl-select-item [value]=\"segment.value\">{{ segment.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n </div>\n `,\n})\nexport class SelectDefaults {\n protected readonly owners = OWNERS;\n protected readonly segments = SEGMENTS;\n}\n",
1088
+ "verdict": "example"
1089
+ },
1090
+ {
1091
+ "id": "descriptions",
1092
+ "title": "descriptions.ts",
1093
+ "note": null,
1094
+ "language": "ts",
1095
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst FORMATS: (SelectOption & { icon: GlyphName; description: string })[] = [\n {\n value: 'csv',\n label: 'CSV',\n icon: 'file-spreadsheet',\n description: 'Opens in Excel and Google Sheets.',\n },\n {\n value: 'pdf',\n label: 'PDF',\n icon: 'file-text',\n description: 'Paginated, with the company letterhead.',\n },\n {\n value: 'json',\n label: 'JSON',\n icon: 'file',\n description: 'For an import into another system.',\n },\n];\n\n@Component({\n selector: 'app-select-descriptions',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Export format</label>\n <sl-select value=\"csv\" [items]=\"formats\">\n @for (format of formats; track format.value) {\n <sl-select-item\n [value]=\"format.value\"\n [description]=\"format.description\"\n [icon]=\"format.icon\"\n >{{ format.label }}</sl-select-item\n >\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectDescriptions {\n protected readonly formats = FORMATS;\n}\n",
1096
+ "verdict": "example"
1097
+ },
1098
+ {
1099
+ "id": "disabled-options",
1100
+ "title": "disabled-options.ts",
1101
+ "note": null,
1102
+ "language": "ts",
1103
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem } from '@slotted/angular/select';\n\nconst CARRIERS: { value: string; label: string; disabled?: boolean; description?: string }[] = [\n { value: 'ups', label: 'UPS Ground' },\n { value: 'fedex', label: 'FedEx Ground' },\n {\n value: 'dhl',\n label: 'DHL Express',\n disabled: true,\n description: 'Account on hold until invoice INV-21462 is paid.',\n },\n { value: 'usps', label: 'USPS Priority Mail' },\n];\n\n@Component({\n selector: 'app-select-disabled-options',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Carrier</label>\n <sl-select placeholder=\"Choose a carrier\">\n @for (carrier of carriers; track carrier.value) {\n <sl-select-item\n [value]=\"carrier.value\"\n [disabled]=\"carrier.disabled ?? false\"\n [description]=\"carrier.description\"\n >{{ carrier.label }}</sl-select-item\n >\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectDisabledOptions {\n protected readonly carriers = CARRIERS;\n}\n",
1104
+ "verdict": "example"
1105
+ },
1106
+ {
1107
+ "id": "empty",
1108
+ "title": "empty.ts",
1109
+ "note": null,
1110
+ "language": "ts",
1111
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect } from '@slotted/angular/select';\n\n@Component({\n selector: 'app-select-empty',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlSelect],\n template: `\n <div slField>\n <label slFieldLabel>Purchase order to receive</label>\n <sl-select\n placeholder=\"Choose a purchase order\"\n [messages]=\"{ empty: 'No open purchase orders for Kiln & Co.' }\"\n ></sl-select>\n <span slFieldDescription>Only orders awaiting receipt are listed.</span>\n </div>\n `,\n})\nexport class SelectEmpty {}\n",
1112
+ "verdict": "example"
1113
+ },
1114
+ {
1115
+ "id": "loading",
1116
+ "title": "loading.ts",
1117
+ "note": null,
1118
+ "language": "ts",
1119
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst SLOTS: SelectOption[] = [\n { value: 'thu-am', label: 'Thursday, 8:00–12:00' },\n { value: 'thu-pm', label: 'Thursday, 13:00–17:00' },\n { value: 'fri-am', label: 'Friday, 8:00–12:00' },\n];\n\n/** Stands in for a request to the carrier's pickup API. */\nconst fetchSlots = () =>\n new Promise<SelectOption[]>((resolve) => setTimeout(() => resolve(SLOTS), 1500));\n\n@Component({\n selector: 'app-select-loading',\n imports: [SlField, SlFieldDescription, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Pickup slot</label>\n <sl-select\n placeholder=\"Choose a slot\"\n [loading]=\"loading()\"\n [items]=\"slots()\"\n [messages]=\"{ loading: 'Fetching pickup slots…' }\"\n (openChange)=\"load($event)\"\n >\n @for (slot of slots(); track slot.value) {\n <sl-select-item [value]=\"slot.value\">{{ slot.label }}</sl-select-item>\n }\n </sl-select>\n <span slFieldDescription>Slots load from the carrier when the list opens.</span>\n </div>\n `,\n})\nexport class SelectLoading {\n protected readonly slots = signal<SelectOption[]>([]);\n protected readonly loading = signal(false);\n private loaded = false;\n\n protected async load(open: boolean): Promise<void> {\n if (!open || this.loaded || this.loading()) return;\n this.loading.set(true);\n this.slots.set(await fetchSlots());\n this.loading.set(false);\n this.loaded = true;\n }\n}\n",
1120
+ "verdict": "example"
1121
+ },
1122
+ {
1123
+ "id": "long-labels",
1124
+ "title": "long-labels.ts",
1125
+ "note": null,
1126
+ "language": "ts",
1127
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlSelect, SlSelectItem, type SelectOption } from '@slotted/angular/select';\n\nconst LISTINGS: SelectOption[] = [\n {\n value: 'mug-sage',\n label: 'Stoneware mug, 12 oz, sage glaze, case of 24, for the autumn wholesale catalogue',\n },\n { value: 'mug-sku', label: 'SKU-NW-STONEWARE-MUG-12OZ-SAGE-GLAZE-CASE24-WHOLESALE' },\n { value: 'tumbler', label: 'Glass tumbler, 8 oz' },\n];\n\n@Component({\n selector: 'app-select-long-labels',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem],\n template: `\n <div slField>\n <label slFieldLabel>Catalogue listing</label>\n <sl-select value=\"mug-sage\" [items]=\"listings\">\n @for (listing of listings; track listing.value) {\n <sl-select-item [value]=\"listing.value\">{{ listing.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n `,\n})\nexport class SelectLongLabels {\n protected readonly listings = LISTINGS;\n}\n",
1128
+ "verdict": "example"
1129
+ },
1130
+ {
1131
+ "id": "narrow",
1132
+ "title": "narrow.ts",
1133
+ "note": null,
1134
+ "language": "ts",
1135
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport {\n SlSelect,\n SlSelectItem,\n type SelectOption,\n type SelectSelection,\n} from '@slotted/angular/select';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst STATUSES: SelectOption[] = [\n { value: 'open', label: 'Open' },\n { value: 'on-hold', label: 'On hold' },\n { value: 'shipped', label: 'Shipped' },\n];\n\nconst CHANNELS: SelectOption[] = [\n { value: 'web', label: 'Web store' },\n { value: 'marketplace', label: 'Marketplace' },\n { value: 'wholesale', label: 'Wholesale' },\n { value: 'phone', label: 'Phone orders' },\n];\n\nconst WAREHOUSES: SelectOption[] = [\n { value: 'RNO', label: 'Reno, NV' },\n { value: 'CMH', label: 'Columbus, OH' },\n { value: 'SAV', label: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-select-narrow',\n imports: [SlField, SlFieldLabel, SlSelect, SlSelectItem, SlStack],\n template: `\n <div slStack [gap]=\"4\" style=\"inline-size: 7rem\">\n <div slField>\n <label slFieldLabel>Status</label>\n <sl-select size=\"sm\" value=\"on-hold\" [items]=\"statuses\">\n @for (status of statuses; track status.value) {\n <sl-select-item [value]=\"status.value\">{{ status.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slField>\n <label slFieldLabel>Channels</label>\n <sl-select size=\"sm\" multiple [items]=\"channels\" [(value)]=\"chosenChannels\">\n @for (channel of channels; track channel.value) {\n <sl-select-item [value]=\"channel.value\">{{ channel.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slField>\n <label slFieldLabel>Warehouse</label>\n <sl-select size=\"sm\" width=\"content\" value=\"CMH\" [items]=\"warehouses\">\n @for (warehouse of warehouses; track warehouse.value) {\n <sl-select-item [value]=\"warehouse.value\">{{ warehouse.label }}</sl-select-item>\n }\n </sl-select>\n </div>\n </div>\n `,\n})\nexport class SelectNarrow {\n protected readonly statuses = STATUSES;\n protected readonly channels = CHANNELS;\n protected readonly warehouses = WAREHOUSES;\n protected readonly chosenChannels = signal<SelectSelection>(['web', 'marketplace', 'wholesale']);\n}\n",
1136
+ "verdict": "example"
1137
+ },
1138
+ {
1139
+ "id": "status-filter",
1140
+ "title": "status-filter.ts",
1141
+ "note": null,
1142
+ "language": "ts",
1143
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport type { GlyphName } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport {\n SlSelect,\n SlSelectItem,\n SlSelectSeparator,\n type SelectOption,\n type SelectSelection,\n} from '@slotted/angular/select';\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';\nimport { SlText } from '@slotted/angular/typography';\n\nconst ORDERS = [\n { id: 'SO-10482', customer: 'Harbor & Pine', status: 'open', total: '$1,240.00' },\n { id: 'SO-10483', customer: 'Brightline Studio', status: 'on-hold', total: '$318.50' },\n { id: 'SO-10484', customer: 'Northgate Labs', status: 'shipped', total: '$2,906.10' },\n { id: 'SO-10485', customer: 'Verde Kitchen', status: 'delayed', total: '$86.00' },\n { id: 'SO-10486', customer: 'Quill & Co.', status: 'shipped', total: '$540.25' },\n { id: 'SO-10487', customer: 'Atlas Freight', status: 'open', total: '$1,912.00' },\n];\n\nconst STATUSES: (SelectOption & { icon: GlyphName })[] = [\n { value: 'open', label: 'Open', icon: 'circle' },\n { value: 'on-hold', label: 'On hold', icon: 'clock' },\n { value: 'delayed', label: 'Delayed', icon: 'triangle-alert' },\n { value: 'shipped', label: 'Shipped', icon: 'circle-check' },\n];\n\nconst ALL: SelectOption = { value: 'all', label: 'All statuses' };\n\n@Component({\n selector: 'app-select-status-filter',\n imports: [\n SlInline,\n SlSelect,\n SlSelectItem,\n SlSelectSeparator,\n SlStack,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n SlText,\n ],\n template: `\n <div slStack [gap]=\"3\">\n <div slInline [gap]=\"3\" justify=\"between\" align=\"center\">\n <span slText size=\"sm\" tone=\"muted\">{{ rows().length }} of {{ orders.length }} orders</span>\n <sl-select\n aria-label=\"Filter by status\"\n size=\"sm\"\n align=\"end\"\n [fullWidth]=\"false\"\n [items]=\"options\"\n [(value)]=\"status\"\n >\n <sl-select-item [value]=\"all.value\">{{ all.label }}</sl-select-item>\n <sl-select-separator />\n @for (option of statuses; track option.value) {\n <sl-select-item [value]=\"option.value\" [icon]=\"option.icon\">{{\n option.label\n }}</sl-select-item>\n }\n </sl-select>\n </div>\n <div slTable [columns]=\"4\">\n <div slTableContent aria-label=\"Orders\">\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n <th slTableColumnHeader>Customer</th>\n <th slTableColumnHeader>Status</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>{{ labelOf(order.status) }}</td>\n <td slTableCell numeric>{{ order.total }}</td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n </div>\n `,\n})\nexport class SelectStatusFilter {\n protected readonly orders = ORDERS;\n protected readonly statuses = STATUSES;\n protected readonly all = ALL;\n protected readonly options = [ALL, ...STATUSES];\n protected readonly status = signal<SelectSelection>('all');\n protected readonly rows = computed(() => {\n const status = this.status();\n return status === 'all' ? ORDERS : ORDERS.filter((order) => order.status === status);\n });\n\n protected labelOf(status: string): string | undefined {\n return STATUSES.find((option) => option.value === status)?.label;\n }\n}\n",
1144
+ "verdict": "example"
1145
+ }
1146
+ ]
1147
+ }