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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,1732 @@
1
+ <!-- index: ./index.md -->
2
+ # combobox
3
+
4
+ `data-ui="combobox"` · Text input that filters a list of options.
5
+
6
+ ## Examples
7
+
8
+ ### Playground
9
+
10
+ One combobox with every axis on it, driven by the controls under the canvas. Type into it and watch the list, the marks and the count answer together.
11
+
12
+ Excerpt — not a complete module
13
+
14
+ ```html
15
+ <sl-combobox aria-label="Fruit" placeholder="Search fruit">
16
+ <sl-combobox-item value="blueberry" label="Blueberry" />
17
+ <sl-combobox-item value="raspberry" label="Raspberry" />
18
+ </sl-combobox>
19
+ ```
20
+
21
+ ### Filtering, and the mark
22
+
23
+ The default comparison is locale-sensitive, so resume finds Resumé — and the mark shows the span the collator matched rather than a naive substring that would disagree with it.
24
+
25
+ Example
26
+
27
+ ```ts
28
+ import { Component } from '@angular/core';
29
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
30
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
31
+
32
+ const CITIES = [
33
+ 'São Paulo',
34
+ 'Zürich',
35
+ 'Montréal',
36
+ 'Kraków',
37
+ 'Malmö',
38
+ 'Querétaro',
39
+ 'Reykjavík',
40
+ 'Düsseldorf',
41
+ ];
42
+
43
+ @Component({
44
+ selector: 'app-combobox-filtering',
45
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
46
+ template: `
47
+ <div slField>
48
+ <label slFieldLabel>Destination city</label>
49
+ <sl-combobox placeholder="Try “sao” or “zurich”">
50
+ @for (city of cities; track city) {
51
+ <sl-combobox-item [value]="city" [label]="city" />
52
+ }
53
+ </sl-combobox>
54
+ <span slFieldDescription>Accents and case are ignored when matching.</span>
55
+ </div>
56
+ `,
57
+ })
58
+ export class ComboboxFiltering {
59
+ protected readonly cities = CITIES;
60
+ }
61
+ ```
62
+
63
+ ### Autocomplete
64
+
65
+ The pattern’s own three values. both writes the rest of the first match into the field as a selected range, so the next character replaces it and Backspace withdraws it.
66
+
67
+ Excerpt — not a complete module
68
+
69
+ ```html
70
+ <sl-combobox autocomplete="none">…</sl-combobox>
71
+ <sl-combobox autocomplete="list">…</sl-combobox>
72
+ <sl-combobox autocomplete="both">…</sl-combobox>
73
+ ```
74
+
75
+ ### A value that is not on the list
76
+
77
+ With allowsCustomValue the typed text commits as the value. Without it, Enter puts the text back to the committed option’s label — the pattern’s own "reverts".
78
+
79
+ Example
80
+
81
+ ```ts
82
+ import { Component, signal } from '@angular/core';
83
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
84
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
85
+
86
+ const BOXES = [
87
+ { id: 'small', label: 'Small · 20 × 15 × 10 cm' },
88
+ { id: 'medium', label: 'Medium · 35 × 25 × 15 cm' },
89
+ { id: 'large', label: 'Large · 50 × 40 × 30 cm' },
90
+ ];
91
+
92
+ @Component({
93
+ selector: 'app-combobox-custom-value',
94
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
95
+ template: `
96
+ <div slField>
97
+ <label slFieldLabel>Box size</label>
98
+ <sl-combobox allowsCustomValue placeholder="Pick a box or type dimensions" [(value)]="value">
99
+ @for (box of boxes; track box.id) {
100
+ <sl-combobox-item [value]="box.id" [label]="box.label" />
101
+ }
102
+ </sl-combobox>
103
+ <span slFieldDescription>Value: {{ value() ?? 'none' }}</span>
104
+ </div>
105
+ `,
106
+ })
107
+ export class ComboboxCustomValue {
108
+ protected readonly boxes = BOXES;
109
+ protected readonly value = signal<string | null>(null);
110
+ }
111
+ ```
112
+
113
+ ### Adding a value the list does not hold
114
+
115
+ With creatable, the last option offers to add what was typed once nothing matched. It is an option — ArrowDown reaches it, Enter takes it — and taking it emits create with the query and selects nothing: the collection is the consumer’s.
116
+
117
+ Excerpt — not a complete module
118
+
119
+ ```html
120
+ <sl-combobox creatable (create)="add($event.query)">…</sl-combobox>
121
+ ```
122
+
123
+ ### Asynchronous results
124
+
125
+ Debounce the fetch, not the combobox: a component that delayed its own request would delay a controlled consumer’s re-render and drop characters between them.
126
+
127
+ Excerpt — not a complete module
128
+
129
+ ```html
130
+ <sl-combobox
131
+ [filter]="null"
132
+ [loading]="pending()"
133
+ [(inputValue)]="query"
134
+ (loadMore)="fetchNextPage()"
135
+ >
136
+ …
137
+ </sl-combobox>
138
+ ```
139
+
140
+ ### Groups
141
+
142
+ Two named groups. A group whose every option was filtered away disappears with them, so a heading never claims a category matched when none did.
143
+
144
+ Example
145
+
146
+ ```ts
147
+ import { Component } from '@angular/core';
148
+ import { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';
149
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
150
+
151
+ const CATALOG = [
152
+ {
153
+ category: 'Kitchen',
154
+ products: [
155
+ { sku: 'KIT-1042', name: 'Cast-iron skillet' },
156
+ { sku: 'KIT-1043', name: 'Stoneware mug' },
157
+ { sku: 'KIT-1051', name: 'Pour-over kettle' },
158
+ ],
159
+ },
160
+ {
161
+ category: 'Bags',
162
+ products: [
163
+ { sku: 'BAG-2010', name: 'Canvas tote' },
164
+ { sku: 'BAG-2014', name: 'Trail daypack' },
165
+ { sku: 'BAG-2019', name: 'Weekender bag' },
166
+ ],
167
+ },
168
+ {
169
+ category: 'Stationery',
170
+ products: [
171
+ { sku: 'STA-3002', name: 'Field notebook' },
172
+ { sku: 'STA-3007', name: 'Fountain pen' },
173
+ { sku: 'STA-3011', name: 'Brass stapler' },
174
+ ],
175
+ },
176
+ ];
177
+
178
+ @Component({
179
+ selector: 'app-combobox-groups',
180
+ imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlField, SlFieldLabel],
181
+ template: `
182
+ <div slField>
183
+ <label slFieldLabel>Product</label>
184
+ <sl-combobox placeholder="Search the catalog">
185
+ @for (group of catalog; track group.category) {
186
+ <sl-combobox-group [label]="group.category">
187
+ @for (product of group.products; track product.sku) {
188
+ <sl-combobox-item [value]="product.sku" [label]="product.name" />
189
+ }
190
+ </sl-combobox-group>
191
+ }
192
+ </sl-combobox>
193
+ </div>
194
+ `,
195
+ })
196
+ export class ComboboxGroups {
197
+ protected readonly catalog = CATALOG;
198
+ }
199
+ ```
200
+
201
+ ### Clearable
202
+
203
+ One press takes both contracts back — the text and the chosen key — and focus returns to the field rather than to the document.
204
+
205
+ Example
206
+
207
+ ```ts
208
+ import { Component } from '@angular/core';
209
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
210
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
211
+ import { SlStack } from '@slotted/angular/stack';
212
+
213
+ @Component({
214
+ selector: 'app-combobox-clearable',
215
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],
216
+ template: `
217
+ <div slStack [gap]="5">
218
+ <div slField>
219
+ <label slFieldLabel>Default warehouse</label>
220
+ <sl-combobox inputValue="Columbus, OH" defaultValue="CMH">
221
+ <sl-combobox-item value="RNO" label="Reno, NV" />
222
+ <sl-combobox-item value="CMH" label="Columbus, OH" />
223
+ <sl-combobox-item value="SAV" label="Savannah, GA" />
224
+ </sl-combobox>
225
+ <span slFieldDescription>Optional. Clearing it routes orders by distance.</span>
226
+ </div>
227
+ <div slField>
228
+ <label slFieldLabel>Payment terms</label>
229
+ <sl-combobox [clearable]="false" inputValue="Net 30" defaultValue="net-30">
230
+ <sl-combobox-item value="prepaid" label="Prepaid" />
231
+ <sl-combobox-item value="net-30" label="Net 30" />
232
+ <sl-combobox-item value="net-45" label="Net 45" />
233
+ </sl-combobox>
234
+ <span slFieldDescription>Every account has terms, so there is nothing to clear.</span>
235
+ </div>
236
+ </div>
237
+ `,
238
+ })
239
+ export class ComboboxClearable {}
240
+ ```
241
+
242
+ ### Sizes
243
+
244
+ Three steps, every one reading control geometry — so a combobox beside a text field of the same size is the same height to the pixel.
245
+
246
+ Example
247
+
248
+ ```ts
249
+ import { Component } from '@angular/core';
250
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
251
+ import type { ComboboxSize } from '@slotted/angular/combobox';
252
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
253
+ import { SlStack } from '@slotted/angular/stack';
254
+
255
+ const SIZES: { size: ComboboxSize; label: string }[] = [
256
+ { size: 'sm', label: 'Small' },
257
+ { size: 'md', label: 'Medium' },
258
+ { size: 'lg', label: 'Large' },
259
+ ];
260
+
261
+ const WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];
262
+
263
+ @Component({
264
+ selector: 'app-combobox-sizes',
265
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],
266
+ template: `
267
+ <div slStack [gap]="5">
268
+ @for (step of sizes; track step.size) {
269
+ <div slField>
270
+ <label slFieldLabel>{{ step.label }}</label>
271
+ <sl-combobox [size]="step.size" inputValue="Reno, NV" defaultValue="Reno, NV">
272
+ @for (warehouse of warehouses; track warehouse) {
273
+ <sl-combobox-item [value]="warehouse" [label]="warehouse" />
274
+ }
275
+ </sl-combobox>
276
+ </div>
277
+ }
278
+ </div>
279
+ `,
280
+ })
281
+ export class ComboboxSizes {
282
+ protected readonly sizes = SIZES;
283
+ protected readonly warehouses = WAREHOUSES;
284
+ }
285
+ ```
286
+
287
+ ### Variants
288
+
289
+ 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.
290
+
291
+ Example
292
+
293
+ ```ts
294
+ import { Component } from '@angular/core';
295
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
296
+ import type { ComboboxVariant } from '@slotted/angular/combobox';
297
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
298
+ import { SlStack } from '@slotted/angular/stack';
299
+
300
+ const VARIANTS: { variant: ComboboxVariant; label: string }[] = [
301
+ { variant: 'outline', label: 'Outline' },
302
+ { variant: 'subtle', label: 'Subtle' },
303
+ { variant: 'plain', label: 'Plain' },
304
+ ];
305
+
306
+ const WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];
307
+
308
+ @Component({
309
+ selector: 'app-combobox-variants',
310
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],
311
+ template: `
312
+ <div slStack [gap]="5">
313
+ @for (step of variants; track step.variant) {
314
+ <div slField>
315
+ <label slFieldLabel>{{ step.label }}</label>
316
+ <sl-combobox placeholder="Search warehouses" [variant]="step.variant">
317
+ @for (warehouse of warehouses; track warehouse) {
318
+ <sl-combobox-item [value]="warehouse" [label]="warehouse" />
319
+ }
320
+ </sl-combobox>
321
+ </div>
322
+ }
323
+ </div>
324
+ `,
325
+ })
326
+ export class ComboboxVariants {
327
+ protected readonly variants = VARIANTS;
328
+ protected readonly warehouses = WAREHOUSES;
329
+ }
330
+ ```
331
+
332
+ ### States
333
+
334
+ Required, invalid, read-only and disabled. Read-only keeps the caret, the selection and the copy, and withholds only the popup, which the combobox decides because the pattern has no read-only state.
335
+
336
+ Example
337
+
338
+ ```ts
339
+ import { Component } from '@angular/core';
340
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
341
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
342
+ import { SlStack } from '@slotted/angular/stack';
343
+
344
+ @Component({
345
+ selector: 'app-combobox-states',
346
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],
347
+ template: `
348
+ <div slStack [gap]="5">
349
+ <div slField disabled>
350
+ <label slFieldLabel>Warehouse</label>
351
+ <sl-combobox inputValue="Reno, NV" defaultValue="RNO">
352
+ <sl-combobox-item value="RNO" label="Reno, NV" />
353
+ <sl-combobox-item value="CMH" label="Columbus, OH" />
354
+ </sl-combobox>
355
+ <span slFieldDescription>Locked while the transfer is in transit.</span>
356
+ </div>
357
+ <div slField readOnly>
358
+ <label slFieldLabel>Billing entity</label>
359
+ <sl-combobox inputValue="Northwind Trading Co." defaultValue="northwind-us">
360
+ <sl-combobox-item value="northwind-us" label="Northwind Trading Co." />
361
+ <sl-combobox-item value="northwind-eu" label="Northwind Europe B.V." />
362
+ </sl-combobox>
363
+ <span slFieldDescription
364
+ >Set by the contract. The text can still be selected and copied.</span
365
+ >
366
+ </div>
367
+ </div>
368
+ `,
369
+ })
370
+ export class ComboboxStates {}
371
+ ```
372
+
373
+ ### Nothing matched, and still travelling
374
+
375
+ A query with no answers opens onto a sentence. A query whose answer is in flight keeps the same measure, so nothing jumps when the results land.
376
+
377
+ Excerpt — not a complete module
378
+
379
+ ```html
380
+ <sl-combobox [messages]="{ empty: 'Try a different spelling' }">…</sl-combobox>
381
+ ```
382
+
383
+ ### Long, translated and unbroken content
384
+
385
+ A translated label, an unbroken identifier and two hundred options. The label clamps at two lines with the whole string in the DOM, and the mark sits inside the token that broke.
386
+
387
+ Excerpt — not a complete module
388
+
389
+ ```html
390
+ <sl-combobox-item value="urn" label="urn:acme:catalogue:9f2c41ab8de07c5511903fbe" />
391
+ ```
392
+
393
+ ### Keyboard
394
+
395
+ The arrows and the page keys move the highlight without moving the caret; Home, End, Backspace and Delete are never intercepted, which the pattern asks for by name.
396
+
397
+ Excerpt — not a complete module
398
+
399
+ ```html
400
+ <sl-combobox openOn="input" [autoHighlight]="false" [loop]="false">…</sl-combobox>
401
+ ```
402
+
403
+ ### In a Reactive Form
404
+
405
+ A ControlValueAccessor and a Validator: required is reported, and so is a typed string that matches no option when a custom value is not allowed — a state no native input can describe.
406
+
407
+ Example
408
+
409
+ ```ts
410
+ import { Component, signal } from '@angular/core';
411
+ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
412
+ import { SlButton } from '@slotted/angular/button';
413
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
414
+ import { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
415
+ import { SlInline } from '@slotted/angular/inline';
416
+ import { SlStack } from '@slotted/angular/stack';
417
+ import { SlText } from '@slotted/angular/typography';
418
+
419
+ const WAREHOUSES = [
420
+ { code: 'RNO', city: 'Reno, NV' },
421
+ { code: 'CMH', city: 'Columbus, OH' },
422
+ { code: 'SAV', city: 'Savannah, GA' },
423
+ ];
424
+
425
+ @Component({
426
+ selector: 'app-combobox-form',
427
+ imports: [
428
+ ReactiveFormsModule,
429
+ SlButton,
430
+ SlCombobox,
431
+ SlComboboxItem,
432
+ SlField,
433
+ SlFieldError,
434
+ SlFieldLabel,
435
+ SlInline,
436
+ SlStack,
437
+ SlText,
438
+ ],
439
+ template: `
440
+ <form [formGroup]="form" (ngSubmit)="submit()">
441
+ <div slStack [gap]="4">
442
+ <div slField required [invalid]="missing()">
443
+ <label slFieldLabel>Fulfil from</label>
444
+ <sl-combobox
445
+ formControlName="warehouse"
446
+ placeholder="Search warehouses"
447
+ (valueChange)="$event && missing.set(false)"
448
+ >
449
+ @for (warehouse of warehouses; track warehouse.code) {
450
+ <sl-combobox-item [value]="warehouse.code" [label]="warehouse.city" />
451
+ }
452
+ </sl-combobox>
453
+ @if (missing()) {
454
+ <span slFieldError>Choose the warehouse that ships this order.</span>
455
+ }
456
+ </div>
457
+ <div slInline [gap]="3" align="center">
458
+ <button slButton type="submit">Create transfer</button>
459
+ @if (submitted(); as line) {
460
+ <span slText size="sm" tone="muted">Submitted {{ line }}</span>
461
+ }
462
+ </div>
463
+ </div>
464
+ </form>
465
+ `,
466
+ })
467
+ export class ComboboxForm {
468
+ protected readonly warehouses = WAREHOUSES;
469
+ protected readonly form = new FormGroup({
470
+ warehouse: new FormControl<string | null>(null, Validators.required),
471
+ });
472
+ protected readonly missing = signal(false);
473
+ protected readonly submitted = signal<string | null>(null);
474
+
475
+ protected submit() {
476
+ const warehouse = this.form.value.warehouse;
477
+ this.missing.set(this.form.invalid);
478
+ this.submitted.set(this.form.valid ? `warehouse=${warehouse}` : null);
479
+ }
480
+ }
481
+ ```
482
+
483
+ ### Composition
484
+
485
+ Defaults provided once for a whole application; the words come from the language in force (provideSlotted).
486
+
487
+ Excerpt — not a complete module
488
+
489
+ ```ts
490
+ providers: [provideComboboxDefaults({ size: 'sm' })];
491
+ ```
492
+
493
+ ### assignee-picker.ts
494
+
495
+ Example
496
+
497
+ ```ts
498
+ import { Component } from '@angular/core';
499
+ import { SlAvatar } from '@slotted/angular/avatar';
500
+ import { SlCombobox, SlComboboxItem, SlComboboxItemIcon } from '@slotted/angular/combobox';
501
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
502
+
503
+ const PEOPLE = [
504
+ { id: 'avery', name: 'Avery Collins', role: 'Fulfilment lead', away: false },
505
+ { id: 'kenji', name: 'Kenji Watanabe', role: 'Customer care', away: false },
506
+ { id: 'lucia', name: 'Lucía Fernández', role: 'Account manager', away: false },
507
+ { id: 'ruth', name: 'Ruth Adeyemi', role: 'On leave until 14 October', away: true },
508
+ { id: 'tomasz', name: 'Tomasz Nowak', role: 'Warehouse supervisor, Reno', away: false },
509
+ { id: 'omar', name: 'Omar Haddad', role: 'Finance', away: false },
510
+ ];
511
+
512
+ @Component({
513
+ selector: 'app-combobox-assignee-picker',
514
+ imports: [SlAvatar, SlCombobox, SlComboboxItem, SlComboboxItemIcon, SlField, SlFieldLabel],
515
+ template: `
516
+ <div slField>
517
+ <label slFieldLabel>Assignee</label>
518
+ <sl-combobox autoHighlight placeholder="Assign to…">
519
+ @for (person of people; track person.id) {
520
+ <sl-combobox-item
521
+ [value]="person.id"
522
+ [label]="person.name"
523
+ [description]="person.role"
524
+ [disabled]="person.away"
525
+ >
526
+ <span slComboboxItemIcon
527
+ ><span slAvatar [name]="person.name" size="xs" decorative></span
528
+ ></span>
529
+ </sl-combobox-item>
530
+ }
531
+ </sl-combobox>
532
+ </div>
533
+ `,
534
+ })
535
+ export class ComboboxAssigneePicker {
536
+ protected readonly people = PEOPLE;
537
+ }
538
+ ```
539
+
540
+ ### async-search.ts
541
+
542
+ Example
543
+
544
+ ```ts
545
+ import { Component, computed, DestroyRef, inject, signal } from '@angular/core';
546
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
547
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
548
+
549
+ interface Customer {
550
+ id: string;
551
+ name: string;
552
+ city: string;
553
+ }
554
+
555
+ const DIRECTORY: Customer[] = [
556
+ { id: 'brightline', name: 'Brightline Studio', city: 'Portland, OR' },
557
+ { id: 'harbor-pine', name: 'Harbor & Pine', city: 'Seattle, WA' },
558
+ { id: 'northgate', name: 'Northgate Labs', city: 'Austin, TX' },
559
+ { id: 'quill', name: 'Quill & Co.', city: 'Brooklyn, NY' },
560
+ { id: 'solstice', name: 'Solstice Outdoor', city: 'Boulder, CO' },
561
+ { id: 'verde', name: 'Verde Kitchen', city: 'Oakland, CA' },
562
+ { id: 'atlas', name: 'Atlas Freight', city: 'Memphis, TN' },
563
+ { id: 'juniper', name: 'Juniper Health', city: 'Minneapolis, MN' },
564
+ { id: 'kestrel', name: 'Kestrel Robotics', city: 'Pittsburgh, PA' },
565
+ { id: 'larkspur', name: 'Larkspur Books', city: 'Asheville, NC' },
566
+ { id: 'meridian', name: 'Meridian Hotels', city: 'Chicago, IL' },
567
+ { id: 'oakline', name: 'Oakline Furniture', city: 'Grand Rapids, MI' },
568
+ { id: 'pelican', name: 'Pelican Coffee', city: 'Tampa, FL' },
569
+ { id: 'saltmarsh', name: 'Saltmarsh Dairy', city: 'Burlington, VT' },
570
+ { id: 'tidewater', name: 'Tidewater Supply', city: 'Norfolk, VA' },
571
+ ];
572
+
573
+ /** Stands in for a request to the server, which answers after 600 ms. */
574
+ function searchCustomers(query: string): Promise<Customer[]> {
575
+ const needle = query.trim().toLowerCase();
576
+ const found = DIRECTORY.filter((customer) => customer.name.toLowerCase().includes(needle));
577
+ return new Promise((resolve) => setTimeout(() => resolve(found), 600));
578
+ }
579
+
580
+ @Component({
581
+ selector: 'app-combobox-async-search',
582
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
583
+ template: `
584
+ <div slField>
585
+ <label slFieldLabel>Customer</label>
586
+ <sl-combobox
587
+ placeholder="Search 15 customers"
588
+ [filter]="null"
589
+ [inputValue]="query()"
590
+ [loading]="loading()"
591
+ [messages]="{ empty: emptyMessage() }"
592
+ (inputValueChange)="type($event)"
593
+ >
594
+ @for (customer of results(); track customer.id) {
595
+ <sl-combobox-item
596
+ [value]="customer.id"
597
+ [label]="customer.name"
598
+ [description]="customer.city"
599
+ />
600
+ }
601
+ </sl-combobox>
602
+ </div>
603
+ `,
604
+ })
605
+ export class ComboboxAsyncSearch {
606
+ protected readonly query = signal('');
607
+ protected readonly results = signal<Customer[]>([]);
608
+ protected readonly loading = signal(false);
609
+ protected readonly emptyMessage = computed(() =>
610
+ this.query().trim() === '' ? 'Type a name to search.' : 'No customer by that name.',
611
+ );
612
+ private debounce: ReturnType<typeof setTimeout> | undefined;
613
+ private latest = 0;
614
+
615
+ constructor() {
616
+ inject(DestroyRef).onDestroy(() => clearTimeout(this.debounce));
617
+ }
618
+
619
+ protected type(text: string) {
620
+ this.query.set(text);
621
+ clearTimeout(this.debounce);
622
+ const request = ++this.latest;
623
+ if (text.trim() === '') {
624
+ this.results.set([]);
625
+ this.loading.set(false);
626
+ return;
627
+ }
628
+ this.loading.set(true);
629
+ this.debounce = setTimeout(() => {
630
+ void searchCustomers(text).then((found) => {
631
+ if (request !== this.latest) return;
632
+ this.results.set(found);
633
+ this.loading.set(false);
634
+ });
635
+ }, 250);
636
+ }
637
+ }
638
+ ```
639
+
640
+ ### auto-highlight.ts
641
+
642
+ Example
643
+
644
+ ```ts
645
+ import { Component } from '@angular/core';
646
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
647
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
648
+
649
+ const UNITS = ['Each', 'Case of 6', 'Case of 12', 'Pallet', 'Kilogram', 'Pound', 'Meter', 'Liter'];
650
+
651
+ @Component({
652
+ selector: 'app-combobox-auto-highlight',
653
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
654
+ template: `
655
+ <div slField>
656
+ <label slFieldLabel>Unit of measure</label>
657
+ <sl-combobox autoHighlight loop placeholder="Type “ca” and press Enter">
658
+ @for (unit of units; track unit) {
659
+ <sl-combobox-item [value]="unit" [label]="unit" />
660
+ }
661
+ </sl-combobox>
662
+ <span slFieldDescription>The first match is highlighted, so Enter takes it.</span>
663
+ </div>
664
+ `,
665
+ })
666
+ export class ComboboxAutoHighlight {
667
+ protected readonly units = UNITS;
668
+ }
669
+ ```
670
+
671
+ ### controlled.ts
672
+
673
+ Example
674
+
675
+ ```ts
676
+ import { Component, signal } from '@angular/core';
677
+ import { SlButton } from '@slotted/angular/button';
678
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
679
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
680
+ import { SlInline } from '@slotted/angular/inline';
681
+ import { SlStack } from '@slotted/angular/stack';
682
+ import { SlText } from '@slotted/angular/typography';
683
+
684
+ const PEOPLE = [
685
+ { id: 'avery', name: 'Avery Collins' },
686
+ { id: 'kenji', name: 'Kenji Watanabe' },
687
+ { id: 'lucia', name: 'Lucía Fernández' },
688
+ { id: 'ruth', name: 'Ruth Adeyemi' },
689
+ { id: 'tomasz', name: 'Tomasz Nowak' },
690
+ ];
691
+
692
+ @Component({
693
+ selector: 'app-combobox-controlled',
694
+ imports: [SlButton, SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlInline, SlStack, SlText],
695
+ template: `
696
+ <div slStack [gap]="4">
697
+ <div slField>
698
+ <label slFieldLabel>Reviewer</label>
699
+ <sl-combobox placeholder="Search people" [(inputValue)]="text" [(value)]="value">
700
+ @for (person of people; track person.id) {
701
+ <sl-combobox-item [value]="person.id" [label]="person.name" />
702
+ }
703
+ </sl-combobox>
704
+ </div>
705
+ <div slInline [gap]="3" align="center">
706
+ <button slButton size="sm" variant="outline" (click)="assignToMe()">Assign to me</button>
707
+ <span slText size="sm" tone="muted"
708
+ >Text “{{ text() }}” · Value {{ value() ?? 'none' }}</span
709
+ >
710
+ </div>
711
+ </div>
712
+ `,
713
+ })
714
+ export class ComboboxControlled {
715
+ protected readonly people = PEOPLE;
716
+ protected readonly text = signal('');
717
+ protected readonly value = signal<string | null>(null);
718
+
719
+ protected assignToMe() {
720
+ this.value.set('ruth');
721
+ this.text.set('Ruth Adeyemi');
722
+ }
723
+ }
724
+ ```
725
+
726
+ ### country-picker.ts
727
+
728
+ Example
729
+
730
+ ```ts
731
+ import { Component } from '@angular/core';
732
+ import { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';
733
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
734
+
735
+ const REGIONS = [
736
+ {
737
+ region: 'Americas',
738
+ countries: [
739
+ { code: 'BR', name: 'Brazil', detail: 'BRL · +55' },
740
+ { code: 'CA', name: 'Canada', detail: 'CAD · +1' },
741
+ { code: 'MX', name: 'Mexico', detail: 'MXN · +52' },
742
+ { code: 'US', name: 'United States', detail: 'USD · +1' },
743
+ ],
744
+ },
745
+ {
746
+ region: 'Europe',
747
+ countries: [
748
+ { code: 'FR', name: 'France', detail: 'EUR · +33' },
749
+ { code: 'DE', name: 'Germany', detail: 'EUR · +49' },
750
+ { code: 'PL', name: 'Poland', detail: 'PLN · +48' },
751
+ { code: 'CH', name: 'Switzerland', detail: 'CHF · +41' },
752
+ { code: 'TR', name: 'Türkiye', detail: 'TRY · +90' },
753
+ { code: 'GB', name: 'United Kingdom', detail: 'GBP · +44' },
754
+ ],
755
+ },
756
+ {
757
+ region: 'Asia Pacific',
758
+ countries: [
759
+ { code: 'AU', name: 'Australia', detail: 'AUD · +61' },
760
+ { code: 'JP', name: 'Japan', detail: 'JPY · +81' },
761
+ { code: 'SG', name: 'Singapore', detail: 'SGD · +65' },
762
+ { code: 'VN', name: 'Việt Nam', detail: 'VND · +84' },
763
+ ],
764
+ },
765
+ {
766
+ region: 'Middle East and Africa',
767
+ countries: [
768
+ { code: 'CI', name: 'Côte d’Ivoire', detail: 'XOF · +225' },
769
+ { code: 'EG', name: 'Egypt', detail: 'EGP · +20' },
770
+ { code: 'KE', name: 'Kenya', detail: 'KES · +254' },
771
+ { code: 'AE', name: 'United Arab Emirates', detail: 'AED · +971' },
772
+ ],
773
+ },
774
+ ];
775
+
776
+ @Component({
777
+ selector: 'app-combobox-country-picker',
778
+ imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
779
+ template: `
780
+ <div slField required>
781
+ <label slFieldLabel>Country or region</label>
782
+ <sl-combobox autoHighlight name="country" placeholder="Search countries">
783
+ @for (group of regions; track group.region) {
784
+ <sl-combobox-group [label]="group.region">
785
+ @for (country of group.countries; track country.code) {
786
+ <sl-combobox-item
787
+ [value]="country.code"
788
+ [label]="country.name"
789
+ [description]="country.detail"
790
+ />
791
+ }
792
+ </sl-combobox-group>
793
+ }
794
+ </sl-combobox>
795
+ <span slFieldDescription>Sets the currency and the phone prefix on the invoice.</span>
796
+ </div>
797
+ `,
798
+ })
799
+ export class ComboboxCountryPicker {
800
+ protected readonly regions = REGIONS;
801
+ }
802
+ ```
803
+
804
+ ### creatable.ts
805
+
806
+ Example
807
+
808
+ ```ts
809
+ import { Component, signal } from '@angular/core';
810
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
811
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
812
+
813
+ const CATEGORIES = ['Apparel', 'Bags', 'Home', 'Kitchen', 'Stationery', 'Outdoor'];
814
+
815
+ @Component({
816
+ selector: 'app-combobox-creatable',
817
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
818
+ template: `
819
+ <div slField>
820
+ <label slFieldLabel>Category</label>
821
+ <sl-combobox
822
+ creatable
823
+ placeholder="Type “Garden” to add it"
824
+ [(value)]="value"
825
+ (create)="create($event.query)"
826
+ >
827
+ @for (category of categories(); track category) {
828
+ <sl-combobox-item [value]="category" [label]="category" />
829
+ }
830
+ </sl-combobox>
831
+ <span slFieldDescription>{{ categories().length }} categories</span>
832
+ </div>
833
+ `,
834
+ })
835
+ export class ComboboxCreatable {
836
+ protected readonly categories = signal(CATEGORIES);
837
+ protected readonly value = signal<string | null>(null);
838
+
839
+ protected create(query: string) {
840
+ this.categories.update((held) => [...held, query]);
841
+ this.value.set(query);
842
+ }
843
+ }
844
+ ```
845
+
846
+ ### custom-filter.ts
847
+
848
+ Example
849
+
850
+ ```ts
851
+ import { Component } from '@angular/core';
852
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
853
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
854
+
855
+ const PRODUCTS = [
856
+ { sku: 'KIT-1042', name: 'Cast-iron skillet' },
857
+ { sku: 'KIT-1043', name: 'Stoneware mug' },
858
+ { sku: 'BAG-2010', name: 'Canvas tote' },
859
+ { sku: 'BAG-2014', name: 'Trail daypack' },
860
+ { sku: 'HOM-4010', name: 'Wool throw' },
861
+ { sku: 'HOM-4014', name: 'Brass desk lamp' },
862
+ { sku: 'STA-3010', name: 'Field notebook' },
863
+ ];
864
+
865
+ @Component({
866
+ selector: 'app-combobox-custom-filter',
867
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
868
+ template: `
869
+ <div slField>
870
+ <label slFieldLabel>SKU</label>
871
+ <sl-combobox placeholder="KIT-, BAG-, HOM-…" [filter]="startsWith">
872
+ @for (product of products; track product.sku) {
873
+ <sl-combobox-item
874
+ [value]="product.sku"
875
+ [label]="product.sku"
876
+ [description]="product.name"
877
+ />
878
+ }
879
+ </sl-combobox>
880
+ <span slFieldDescription>Codes match from the first character, so “10” finds nothing.</span>
881
+ </div>
882
+ `,
883
+ })
884
+ export class ComboboxCustomFilter {
885
+ protected readonly products = PRODUCTS;
886
+ protected readonly startsWith = (label: string, query: string) =>
887
+ label.toLowerCase().startsWith(query.toLowerCase());
888
+ }
889
+ ```
890
+
891
+ ### defaults.ts
892
+
893
+ Example
894
+
895
+ ```ts
896
+ import { Component } from '@angular/core';
897
+ import { provideComboboxDefaults, SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
898
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
899
+ import { SlStack } from '@slotted/angular/stack';
900
+
901
+ const WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];
902
+ const CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS'];
903
+
904
+ @Component({
905
+ selector: 'app-combobox-defaults',
906
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],
907
+ providers: [provideComboboxDefaults({ variant: 'subtle', autoHighlight: true })],
908
+ template: `
909
+ <div slStack [gap]="4">
910
+ <div slField>
911
+ <label slFieldLabel>Warehouse</label>
912
+ <sl-combobox placeholder="Any warehouse">
913
+ @for (warehouse of warehouses; track warehouse) {
914
+ <sl-combobox-item [value]="warehouse" [label]="warehouse" />
915
+ }
916
+ </sl-combobox>
917
+ </div>
918
+ <div slField>
919
+ <label slFieldLabel>Carrier</label>
920
+ <sl-combobox placeholder="Any carrier">
921
+ @for (carrier of carriers; track carrier) {
922
+ <sl-combobox-item [value]="carrier" [label]="carrier" />
923
+ }
924
+ </sl-combobox>
925
+ </div>
926
+ </div>
927
+ `,
928
+ })
929
+ export class ComboboxAppDefaults {
930
+ protected readonly warehouses = WAREHOUSES;
931
+ protected readonly carriers = CARRIERS;
932
+ }
933
+ ```
934
+
935
+ ### descriptions.ts
936
+
937
+ Example
938
+
939
+ ```ts
940
+ import { Component } from '@angular/core';
941
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
942
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
943
+
944
+ const WAREHOUSES = [
945
+ { code: 'RNO', city: 'Reno, NV', detail: 'West · same-day cutoff 2:00 pm PT' },
946
+ { code: 'CMH', city: 'Columbus, OH', detail: 'Midwest · same-day cutoff 3:00 pm ET' },
947
+ { code: 'SAV', city: 'Savannah, GA', detail: 'Southeast · port of entry for ocean freight' },
948
+ { code: 'DFW', city: 'Dallas, TX', detail: 'South · opens November 2026' },
949
+ ];
950
+
951
+ @Component({
952
+ selector: 'app-combobox-descriptions',
953
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
954
+ template: `
955
+ <div slField>
956
+ <label slFieldLabel>Ship from</label>
957
+ <sl-combobox placeholder="Search warehouses">
958
+ @for (warehouse of warehouses; track warehouse.code) {
959
+ <sl-combobox-item
960
+ [value]="warehouse.code"
961
+ [label]="warehouse.city"
962
+ [description]="warehouse.detail"
963
+ />
964
+ }
965
+ </sl-combobox>
966
+ </div>
967
+ `,
968
+ })
969
+ export class ComboboxDescriptions {
970
+ protected readonly warehouses = WAREHOUSES;
971
+ }
972
+ ```
973
+
974
+ ### disabled-options.ts
975
+
976
+ Example
977
+
978
+ ```ts
979
+ import { Component } from '@angular/core';
980
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
981
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
982
+
983
+ const SERVICES = [
984
+ { id: 'usps-priority', name: 'USPS Priority Mail', note: '1–3 business days', disabled: false },
985
+ { id: 'ups-ground', name: 'UPS Ground', note: '1–5 business days', disabled: false },
986
+ { id: 'fedex-2day', name: 'FedEx 2Day', note: '2 business days', disabled: false },
987
+ {
988
+ id: 'dhl-express',
989
+ name: 'DHL Express Worldwide',
990
+ note: 'International shipments only',
991
+ disabled: true,
992
+ },
993
+ { id: 'ups-next-day', name: 'UPS Next Day Air', note: 'Cutoff passed for today', disabled: true },
994
+ ];
995
+
996
+ @Component({
997
+ selector: 'app-combobox-disabled-options',
998
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
999
+ template: `
1000
+ <div slField>
1001
+ <label slFieldLabel>Shipping service</label>
1002
+ <sl-combobox placeholder="Search services">
1003
+ @for (service of services; track service.id) {
1004
+ <sl-combobox-item
1005
+ [value]="service.id"
1006
+ [label]="service.name"
1007
+ [description]="service.note"
1008
+ [disabled]="service.disabled"
1009
+ />
1010
+ }
1011
+ </sl-combobox>
1012
+ </div>
1013
+ `,
1014
+ })
1015
+ export class ComboboxDisabledOptions {
1016
+ protected readonly services = SERVICES;
1017
+ }
1018
+ ```
1019
+
1020
+ ### field.ts
1021
+
1022
+ Example
1023
+
1024
+ ```ts
1025
+ import { Component } from '@angular/core';
1026
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1027
+ import { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
1028
+ import { SlStack } from '@slotted/angular/stack';
1029
+
1030
+ const OWNERS = ['Avery Collins', 'Kenji Watanabe', 'Lucía Fernández', 'Omar Haddad'];
1031
+ const COST_CENTERS = ['4100 Fulfilment', '4200 Customer care', '4300 Marketing'];
1032
+
1033
+ @Component({
1034
+ selector: 'app-combobox-field',
1035
+ imports: [
1036
+ SlCombobox,
1037
+ SlComboboxItem,
1038
+ SlField,
1039
+ SlFieldDescription,
1040
+ SlFieldError,
1041
+ SlFieldLabel,
1042
+ SlStack,
1043
+ ],
1044
+ template: `
1045
+ <div slStack [gap]="5">
1046
+ <div slField required>
1047
+ <label slFieldLabel>Account manager</label>
1048
+ <sl-combobox placeholder="Search people">
1049
+ @for (owner of owners; track owner) {
1050
+ <sl-combobox-item [value]="owner" [label]="owner" />
1051
+ }
1052
+ </sl-combobox>
1053
+ <span slFieldDescription>Receives the renewal reminders for this account.</span>
1054
+ </div>
1055
+ <div slField invalid required>
1056
+ <label slFieldLabel>Cost center</label>
1057
+ <sl-combobox inputValue="4900">
1058
+ @for (center of costCenters; track center) {
1059
+ <sl-combobox-item [value]="center" [label]="center" />
1060
+ }
1061
+ </sl-combobox>
1062
+ <span slFieldError>4900 is closed. Choose an open cost center.</span>
1063
+ </div>
1064
+ </div>
1065
+ `,
1066
+ })
1067
+ export class ComboboxField {
1068
+ protected readonly owners = OWNERS;
1069
+ protected readonly costCenters = COST_CENTERS;
1070
+ }
1071
+ ```
1072
+
1073
+ ### filter-facets.ts
1074
+
1075
+ Example
1076
+
1077
+ ```ts
1078
+ import { Component, computed, signal } from '@angular/core';
1079
+ import { SlButton } from '@slotted/angular/button';
1080
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1081
+ import { SlInline } from '@slotted/angular/inline';
1082
+ import { SlText } from '@slotted/angular/typography';
1083
+
1084
+ type Facet = 'warehouse' | 'carrier' | 'owner';
1085
+
1086
+ const WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];
1087
+ const CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS'];
1088
+ const OWNERS = ['Avery Collins', 'Kenji Watanabe', 'Lucía Fernández', 'Omar Haddad'];
1089
+
1090
+ const FACETS: { id: Facet; label: string; options: string[] }[] = [
1091
+ { id: 'warehouse', label: 'Warehouse', options: WAREHOUSES },
1092
+ { id: 'carrier', label: 'Carrier', options: CARRIERS },
1093
+ { id: 'owner', label: 'Owner', options: OWNERS },
1094
+ ];
1095
+
1096
+ /** Open orders, counted per warehouse, carrier and owner. */
1097
+ const ORDERS = WAREHOUSES.flatMap((warehouse, w) =>
1098
+ CARRIERS.flatMap((carrier, c) =>
1099
+ OWNERS.map((owner, o) => ({ warehouse, carrier, owner, count: 1 + ((w + 2 * c + 3 * o) % 5) })),
1100
+ ),
1101
+ );
1102
+ const TOTAL = ORDERS.reduce((sum, row) => sum + row.count, 0);
1103
+
1104
+ const NONE: Record<Facet, string | null> = { warehouse: null, carrier: null, owner: null };
1105
+ const EMPTY: Record<Facet, string> = { warehouse: '', carrier: '', owner: '' };
1106
+
1107
+ @Component({
1108
+ selector: 'app-combobox-filter-facets',
1109
+ imports: [SlButton, SlCombobox, SlComboboxItem, SlInline, SlText],
1110
+ template: `
1111
+ <div slInline [gap]="2" align="center" wrap="wrap">
1112
+ @for (facet of facets; track facet.id) {
1113
+ <sl-combobox
1114
+ size="sm"
1115
+ width="content"
1116
+ [fullWidth]="false"
1117
+ [aria-label]="facet.label"
1118
+ [placeholder]="facet.label"
1119
+ [value]="chosen()[facet.id]"
1120
+ (valueChange)="choose(facet.id, $event)"
1121
+ [inputValue]="texts()[facet.id]"
1122
+ (inputValueChange)="type(facet.id, $event)"
1123
+ >
1124
+ @for (option of facet.options; track option) {
1125
+ <sl-combobox-item [value]="option" [label]="option" />
1126
+ }
1127
+ </sl-combobox>
1128
+ }
1129
+ <button slButton size="sm" variant="ghost" [disabled]="active() === 0" (click)="clear()">
1130
+ Clear filters
1131
+ </button>
1132
+ <span slText size="sm" tone="muted">{{ matching() }} of {{ total }} orders</span>
1133
+ </div>
1134
+ `,
1135
+ })
1136
+ export class ComboboxFilterFacets {
1137
+ protected readonly facets = FACETS;
1138
+ protected readonly total = TOTAL;
1139
+ protected readonly chosen = signal(NONE);
1140
+ protected readonly texts = signal(EMPTY);
1141
+
1142
+ protected readonly matching = computed(() =>
1143
+ ORDERS.filter((row) =>
1144
+ FACETS.every(
1145
+ (facet) => this.chosen()[facet.id] === null || row[facet.id] === this.chosen()[facet.id],
1146
+ ),
1147
+ ).reduce((sum, row) => sum + row.count, 0),
1148
+ );
1149
+ protected readonly active = computed(
1150
+ () => FACETS.filter((facet) => this.chosen()[facet.id] !== null).length,
1151
+ );
1152
+
1153
+ protected choose(facet: Facet, value: string | null) {
1154
+ this.chosen.update((held) => ({ ...held, [facet]: value }));
1155
+ }
1156
+
1157
+ protected type(facet: Facet, text: string) {
1158
+ this.texts.update((held) => ({ ...held, [facet]: text }));
1159
+ }
1160
+
1161
+ protected clear() {
1162
+ this.chosen.set(NONE);
1163
+ this.texts.set(EMPTY);
1164
+ }
1165
+ }
1166
+ ```
1167
+
1168
+ ### global-search.ts
1169
+
1170
+ Example
1171
+
1172
+ ```ts
1173
+ import { Component, signal } from '@angular/core';
1174
+ import { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';
1175
+ import { SlStack } from '@slotted/angular/stack';
1176
+ import { SlText } from '@slotted/angular/typography';
1177
+
1178
+ const CUSTOMERS = [
1179
+ { id: 'brightline', name: 'Brightline Studio', city: 'Portland, OR' },
1180
+ { id: 'harbor-pine', name: 'Harbor & Pine', city: 'Seattle, WA' },
1181
+ { id: 'northgate', name: 'Northgate Labs', city: 'Austin, TX' },
1182
+ ];
1183
+ const ORDERS = [
1184
+ { id: '10482', customer: 'Brightline Studio', total: '$1,284.00' },
1185
+ { id: '10479', customer: 'Atlas Freight', total: '$356.40' },
1186
+ { id: '10471', customer: 'Northgate Labs', total: '$2,910.15' },
1187
+ ];
1188
+ const LABELS = new Map<string, string>([
1189
+ ...CUSTOMERS.map((customer) => [`customer:${customer.id}`, customer.name] as const),
1190
+ ...ORDERS.map((order) => [`order:${order.id}`, `Order ${order.id}`] as const),
1191
+ ]);
1192
+
1193
+ @Component({
1194
+ selector: 'app-combobox-global-search',
1195
+ imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlStack, SlText],
1196
+ template: `
1197
+ <div slStack [gap]="3">
1198
+ <sl-combobox
1199
+ aria-label="Search Northwind"
1200
+ openOn="focus"
1201
+ placeholder="Search customers and orders"
1202
+ size="sm"
1203
+ (valueChange)="opened.set($event)"
1204
+ >
1205
+ <sl-combobox-group label="Customers">
1206
+ @for (customer of customers; track customer.id) {
1207
+ <sl-combobox-item
1208
+ icon="person"
1209
+ [value]="'customer:' + customer.id"
1210
+ [label]="customer.name"
1211
+ [description]="customer.city"
1212
+ />
1213
+ }
1214
+ </sl-combobox-group>
1215
+ <sl-combobox-group label="Orders">
1216
+ @for (order of orders; track order.id) {
1217
+ <sl-combobox-item
1218
+ icon="file-text"
1219
+ [value]="'order:' + order.id"
1220
+ [label]="'Order ' + order.id"
1221
+ [description]="order.customer + ' · ' + order.total"
1222
+ />
1223
+ }
1224
+ </sl-combobox-group>
1225
+ </sl-combobox>
1226
+ <span slText size="sm" tone="muted">
1227
+ @if (opened(); as key) {
1228
+ Opening {{ labels.get(key) }}
1229
+ } @else {
1230
+ Focus the field to see every result.
1231
+ }
1232
+ </span>
1233
+ </div>
1234
+ `,
1235
+ })
1236
+ export class ComboboxGlobalSearch {
1237
+ protected readonly customers = CUSTOMERS;
1238
+ protected readonly orders = ORDERS;
1239
+ protected readonly labels = LABELS;
1240
+ protected readonly opened = signal<string | null>(null);
1241
+ }
1242
+ ```
1243
+
1244
+ ### icons.ts
1245
+
1246
+ Example
1247
+
1248
+ ```ts
1249
+ import { Component } from '@angular/core';
1250
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1251
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1252
+ import type { GlyphName } from '@slotted/angular/icon';
1253
+
1254
+ const DOCUMENTS: { id: string; name: string; glyph: GlyphName }[] = [
1255
+ { id: 'price-list', name: 'Q4 wholesale price list.xlsx', glyph: 'file-spreadsheet' },
1256
+ { id: 'carrier-contract', name: 'Carrier contract 2026.pdf', glyph: 'file-text' },
1257
+ { id: 'floor-plan', name: 'Reno floor plan.png', glyph: 'file-image' },
1258
+ { id: 'returns-deck', name: 'Returns policy review.key', glyph: 'presentation' },
1259
+ { id: 'product-photos', name: 'Autumn product photos.zip', glyph: 'file-archive' },
1260
+ ];
1261
+
1262
+ @Component({
1263
+ selector: 'app-combobox-icons',
1264
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
1265
+ template: `
1266
+ <div slField>
1267
+ <label slFieldLabel>Attach a document</label>
1268
+ <sl-combobox placeholder="Search shared files">
1269
+ @for (document of documents; track document.id) {
1270
+ <sl-combobox-item [value]="document.id" [label]="document.name" [icon]="document.glyph" />
1271
+ }
1272
+ </sl-combobox>
1273
+ </div>
1274
+ `,
1275
+ })
1276
+ export class ComboboxIcons {
1277
+ protected readonly documents = DOCUMENTS;
1278
+ }
1279
+ ```
1280
+
1281
+ ### inline-completion.ts
1282
+
1283
+ Example
1284
+
1285
+ ```ts
1286
+ import { Component } from '@angular/core';
1287
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1288
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1289
+
1290
+ const TIME_ZONES = [
1291
+ 'America/New_York',
1292
+ 'America/Chicago',
1293
+ 'America/Denver',
1294
+ 'America/Los_Angeles',
1295
+ 'Europe/London',
1296
+ 'Europe/Berlin',
1297
+ 'Asia/Tokyo',
1298
+ 'Australia/Sydney',
1299
+ ];
1300
+
1301
+ @Component({
1302
+ selector: 'app-combobox-inline-completion',
1303
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
1304
+ template: `
1305
+ <div slField>
1306
+ <label slFieldLabel>Time zone</label>
1307
+ <sl-combobox autocomplete="both" placeholder="Type “eu” or “am”">
1308
+ @for (zone of zones; track zone) {
1309
+ <sl-combobox-item [value]="zone" [label]="zone" />
1310
+ }
1311
+ </sl-combobox>
1312
+ </div>
1313
+ `,
1314
+ })
1315
+ export class ComboboxInlineCompletion {
1316
+ protected readonly zones = TIME_ZONES;
1317
+ }
1318
+ ```
1319
+
1320
+ ### load-more.ts
1321
+
1322
+ Example
1323
+
1324
+ ```ts
1325
+ import { Component, computed, signal } from '@angular/core';
1326
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1327
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1328
+
1329
+ const PRODUCTS = [
1330
+ 'Canvas tote',
1331
+ 'Merino beanie',
1332
+ 'Stoneware mug',
1333
+ 'Linen apron',
1334
+ 'Trail daypack',
1335
+ 'Wool throw',
1336
+ 'Ceramic planter',
1337
+ 'Field notebook',
1338
+ 'Rain shell',
1339
+ 'Leather wallet',
1340
+ 'Weekender bag',
1341
+ 'Cotton crewneck',
1342
+ 'Camp mug',
1343
+ 'Insulated bottle',
1344
+ 'Chambray shirt',
1345
+ 'Waffle towel',
1346
+ 'Beeswax candle',
1347
+ 'Rattan basket',
1348
+ 'Hiking socks',
1349
+ 'Down vest',
1350
+ 'Sketchbook',
1351
+ 'Wool blanket',
1352
+ 'Market crossbody',
1353
+ 'Felt slippers',
1354
+ ];
1355
+ const COLORS = [
1356
+ 'Natural',
1357
+ 'Charcoal',
1358
+ 'Olive',
1359
+ 'Rust',
1360
+ 'Navy',
1361
+ 'Sand',
1362
+ 'Forest',
1363
+ 'Slate',
1364
+ 'Clay',
1365
+ 'Ink',
1366
+ ];
1367
+ const SKUS = PRODUCTS.flatMap((product, row) =>
1368
+ COLORS.map((color, column) => ({
1369
+ sku: `NW-${1001 + row * COLORS.length + column}`,
1370
+ label: `${product}, ${color}`,
1371
+ })),
1372
+ );
1373
+ const PAGE = 30;
1374
+
1375
+ @Component({
1376
+ selector: 'app-combobox-load-more',
1377
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
1378
+ template: `
1379
+ <div slField>
1380
+ <label slFieldLabel>Variant</label>
1381
+ <sl-combobox
1382
+ placeholder="Search 240 SKUs"
1383
+ [filter]="null"
1384
+ [inputValue]="query()"
1385
+ [loading]="loading()"
1386
+ [total]="matching().length"
1387
+ (inputValueChange)="type($event)"
1388
+ (loadMore)="loadMore()"
1389
+ >
1390
+ @for (item of visible(); track item.sku; let index = $index) {
1391
+ <sl-combobox-item
1392
+ [value]="item.sku"
1393
+ [label]="item.label"
1394
+ [description]="item.sku"
1395
+ [position]="index + 1"
1396
+ />
1397
+ }
1398
+ </sl-combobox>
1399
+ <span slFieldDescription>Thirty at a time; scrolling to the end fetches the next page.</span>
1400
+ </div>
1401
+ `,
1402
+ })
1403
+ export class ComboboxLoadMore {
1404
+ protected readonly query = signal('');
1405
+ protected readonly shown = signal(PAGE);
1406
+ protected readonly loading = signal(false);
1407
+ private request = 0;
1408
+
1409
+ /* The server's answer: every SKU whose label holds the query, a page at a time. */
1410
+ protected readonly matching = computed(() => {
1411
+ const needle = this.query().trim().toLowerCase();
1412
+ return SKUS.filter((item) => item.label.toLowerCase().includes(needle));
1413
+ });
1414
+ protected readonly visible = computed(() => this.matching().slice(0, this.shown()));
1415
+
1416
+ protected type(text: string) {
1417
+ this.request += 1;
1418
+ this.query.set(text);
1419
+ this.shown.set(PAGE);
1420
+ this.loading.set(false);
1421
+ }
1422
+
1423
+ protected loadMore() {
1424
+ if (this.loading() || this.shown() >= this.matching().length) return;
1425
+ const current = ++this.request;
1426
+ this.loading.set(true);
1427
+ setTimeout(() => {
1428
+ if (current !== this.request) return;
1429
+ this.shown.update((count) => count + PAGE);
1430
+ this.loading.set(false);
1431
+ }, 500);
1432
+ }
1433
+ }
1434
+ ```
1435
+
1436
+ ### long-labels.ts
1437
+
1438
+ Example
1439
+
1440
+ ```ts
1441
+ import { Component } from '@angular/core';
1442
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1443
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1444
+
1445
+ const ACCOUNTS: { id: string; label: string; description?: string }[] = [
1446
+ {
1447
+ id: '4010',
1448
+ label:
1449
+ '4010 · Revenue, wholesale channel, net of returns, allowances and early-payment discounts',
1450
+ },
1451
+ { id: '4020', label: '4020 · Revenue, online store' },
1452
+ {
1453
+ id: 'urn',
1454
+ label: 'urn:northwind:ledger:4030-9f2c41ab8de07c5511903fbe',
1455
+ description: 'Imported from the previous ledger',
1456
+ },
1457
+ {
1458
+ id: '5100',
1459
+ label: '5100 · Cost of goods sold, including inbound freight and duties',
1460
+ description: 'Posted when an order ships, at the weighted average cost of the warehouse',
1461
+ },
1462
+ ];
1463
+
1464
+ @Component({
1465
+ selector: 'app-combobox-long-labels',
1466
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
1467
+ template: `
1468
+ <div slField>
1469
+ <label slFieldLabel>Ledger account</label>
1470
+ <sl-combobox placeholder="Search accounts">
1471
+ @for (account of accounts; track account.id) {
1472
+ <sl-combobox-item
1473
+ [value]="account.id"
1474
+ [label]="account.label"
1475
+ [description]="account.description"
1476
+ />
1477
+ }
1478
+ </sl-combobox>
1479
+ </div>
1480
+ `,
1481
+ })
1482
+ export class ComboboxLongLabels {
1483
+ protected readonly accounts = ACCOUNTS;
1484
+ }
1485
+ ```
1486
+
1487
+ ### long-list.ts
1488
+
1489
+ Example
1490
+
1491
+ ```ts
1492
+ import { Component } from '@angular/core';
1493
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1494
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1495
+
1496
+ const BINS = Array.from({ length: 240 }, (_, index) => {
1497
+ const aisle = String(Math.floor(index / 20) + 1).padStart(2, '0');
1498
+ const bay = String((index % 20) + 1).padStart(2, '0');
1499
+ return { id: `A${aisle}-B${bay}`, detail: `Aisle ${Number(aisle)}, bay ${Number(bay)} · Reno` };
1500
+ });
1501
+
1502
+ @Component({
1503
+ selector: 'app-combobox-long-list',
1504
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],
1505
+ template: `
1506
+ <div slField>
1507
+ <label slFieldLabel>Put-away bin</label>
1508
+ <sl-combobox placeholder="Search 240 bins">
1509
+ @for (bin of bins; track bin.id) {
1510
+ <sl-combobox-item [value]="bin.id" [label]="bin.id" [description]="bin.detail" />
1511
+ }
1512
+ </sl-combobox>
1513
+ <span slFieldDescription>Page Down and Page Up move ten bins at a time.</span>
1514
+ </div>
1515
+ `,
1516
+ })
1517
+ export class ComboboxLongList {
1518
+ protected readonly bins = BINS;
1519
+ }
1520
+ ```
1521
+
1522
+ ### messages.ts
1523
+
1524
+ Example
1525
+
1526
+ ```ts
1527
+ import { Component } from '@angular/core';
1528
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1529
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1530
+
1531
+ const CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS', 'OnTrac'];
1532
+
1533
+ @Component({
1534
+ selector: 'app-combobox-messages',
1535
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
1536
+ template: `
1537
+ <div slField>
1538
+ <label slFieldLabel>Carrier</label>
1539
+ <sl-combobox placeholder="Type “royal mail”" [messages]="messages">
1540
+ @for (carrier of carriers; track carrier) {
1541
+ <sl-combobox-item [value]="carrier" [label]="carrier" />
1542
+ }
1543
+ </sl-combobox>
1544
+ </div>
1545
+ `,
1546
+ })
1547
+ export class ComboboxCustomMessages {
1548
+ protected readonly carriers = CARRIERS;
1549
+ protected readonly messages = {
1550
+ clear: 'Clear carrier',
1551
+ count: '{count, plural, one {# carrier} other {# carriers}}',
1552
+ empty: 'No carrier by that name. Check the spelling on the label.',
1553
+ };
1554
+ }
1555
+ ```
1556
+
1557
+ ### open-on.ts
1558
+
1559
+ Example
1560
+
1561
+ ```ts
1562
+ import { Component } from '@angular/core';
1563
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1564
+ import type { ComboboxOpenOn } from '@slotted/angular/combobox';
1565
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1566
+ import { SlStack } from '@slotted/angular/stack';
1567
+
1568
+ const MODES: { openOn: ComboboxOpenOn; label: string; hint: string }[] = [
1569
+ { openOn: 'input', label: 'Opens on typing', hint: 'Typing or a press on the field opens it.' },
1570
+ { openOn: 'focus', label: 'Opens on focus', hint: 'Every focus opens it, Tab included.' },
1571
+ {
1572
+ openOn: 'manual',
1573
+ label: 'Opens on request',
1574
+ hint: 'Only the button and the arrow keys open it.',
1575
+ },
1576
+ ];
1577
+
1578
+ const CHANNELS = ['Online store', 'Wholesale portal', 'Marketplace', 'Retail partners'];
1579
+
1580
+ @Component({
1581
+ selector: 'app-combobox-open-on',
1582
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],
1583
+ template: `
1584
+ <div slStack [gap]="5">
1585
+ @for (mode of modes; track mode.openOn) {
1586
+ <div slField>
1587
+ <label slFieldLabel>{{ mode.label }}</label>
1588
+ <sl-combobox placeholder="Sales channel" [openOn]="mode.openOn">
1589
+ @for (channel of channels; track channel) {
1590
+ <sl-combobox-item [value]="channel" [label]="channel" />
1591
+ }
1592
+ </sl-combobox>
1593
+ <span slFieldDescription>{{ mode.hint }}</span>
1594
+ </div>
1595
+ }
1596
+ </div>
1597
+ `,
1598
+ })
1599
+ export class ComboboxOpening {
1600
+ protected readonly modes = MODES;
1601
+ protected readonly channels = CHANNELS;
1602
+ }
1603
+ ```
1604
+
1605
+ ### search-error.ts
1606
+
1607
+ Example
1608
+
1609
+ ```ts
1610
+ import { Component, signal } from '@angular/core';
1611
+ import { SlButton } from '@slotted/angular/button';
1612
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1613
+ import { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
1614
+ import { SlStack } from '@slotted/angular/stack';
1615
+
1616
+ const CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS', 'OnTrac', 'LaserShip'];
1617
+
1618
+ /** Stands in for a rate service that fails its first request and answers after. */
1619
+ let outage = true;
1620
+ function searchCarriers(query: string): Promise<string[]> {
1621
+ const needle = query.trim().toLowerCase();
1622
+ return new Promise((resolve, reject) =>
1623
+ setTimeout(() => {
1624
+ if (outage) {
1625
+ outage = false;
1626
+ reject(new Error('The rate service did not answer.'));
1627
+ return;
1628
+ }
1629
+ resolve(CARRIERS.filter((carrier) => carrier.toLowerCase().includes(needle)));
1630
+ }, 500),
1631
+ );
1632
+ }
1633
+
1634
+ @Component({
1635
+ selector: 'app-combobox-search-error',
1636
+ imports: [SlButton, SlCombobox, SlComboboxItem, SlField, SlFieldError, SlFieldLabel, SlStack],
1637
+ template: `
1638
+ <div slStack [gap]="3">
1639
+ <div slField [invalid]="failed()">
1640
+ <label slFieldLabel>Carrier</label>
1641
+ <sl-combobox
1642
+ placeholder="Search carriers"
1643
+ [filter]="null"
1644
+ [inputValue]="query()"
1645
+ [loading]="loading()"
1646
+ [messages]="{ empty: failed() ? 'Rates are unavailable.' : 'No carrier by that name.' }"
1647
+ (inputValueChange)="type($event)"
1648
+ >
1649
+ @for (carrier of results(); track carrier) {
1650
+ <sl-combobox-item [value]="carrier" [label]="carrier" />
1651
+ }
1652
+ </sl-combobox>
1653
+ @if (failed()) {
1654
+ <span slFieldError>The rate service did not answer. Your text is kept.</span>
1655
+ }
1656
+ </div>
1657
+ @if (failed()) {
1658
+ <div>
1659
+ <button slButton size="sm" variant="outline" (click)="search(query())">Retry</button>
1660
+ </div>
1661
+ }
1662
+ </div>
1663
+ `,
1664
+ })
1665
+ export class ComboboxSearchError {
1666
+ protected readonly query = signal('');
1667
+ protected readonly results = signal<string[]>([]);
1668
+ protected readonly loading = signal(false);
1669
+ protected readonly failed = signal(false);
1670
+ private latest = 0;
1671
+
1672
+ protected search(text: string) {
1673
+ const request = ++this.latest;
1674
+ this.loading.set(true);
1675
+ this.failed.set(false);
1676
+ searchCarriers(text).then(
1677
+ (found) => {
1678
+ if (request !== this.latest) return;
1679
+ this.results.set(found);
1680
+ this.loading.set(false);
1681
+ },
1682
+ () => {
1683
+ if (request !== this.latest) return;
1684
+ this.results.set([]);
1685
+ this.failed.set(true);
1686
+ this.loading.set(false);
1687
+ },
1688
+ );
1689
+ }
1690
+
1691
+ protected type(text: string) {
1692
+ this.query.set(text);
1693
+ if (text.trim() !== '') this.search(text);
1694
+ }
1695
+ }
1696
+ ```
1697
+
1698
+ ### width.ts
1699
+
1700
+ Example
1701
+
1702
+ ```ts
1703
+ import { Component } from '@angular/core';
1704
+ import { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';
1705
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1706
+
1707
+ const ZONES = [
1708
+ { id: 'pacific', label: '(UTC−08:00) Pacific Time — Los Angeles, Vancouver' },
1709
+ { id: 'mountain', label: '(UTC−07:00) Mountain Time — Denver, Calgary' },
1710
+ { id: 'central', label: '(UTC−06:00) Central Time — Chicago, Mexico City' },
1711
+ { id: 'eastern', label: '(UTC−05:00) Eastern Time — New York, Toronto' },
1712
+ { id: 'london', label: '(UTC+00:00) Greenwich Mean Time — London, Lisbon' },
1713
+ ];
1714
+
1715
+ @Component({
1716
+ selector: 'app-combobox-width',
1717
+ imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],
1718
+ template: `
1719
+ <div slField>
1720
+ <label slFieldLabel>Report time zone</label>
1721
+ <sl-combobox placeholder="Search zones" [fullWidth]="false" width="content">
1722
+ @for (zone of zones; track zone.id) {
1723
+ <sl-combobox-item [value]="zone.id" [label]="zone.label" />
1724
+ }
1725
+ </sl-combobox>
1726
+ </div>
1727
+ `,
1728
+ })
1729
+ export class ComboboxPopupWidth {
1730
+ protected readonly zones = ZONES;
1731
+ }
1732
+ ```