@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,1250 @@
1
+ {
2
+ "family": "combobox",
3
+ "ui": "combobox",
4
+ "binding": "angular",
5
+ "catalog": {
6
+ "group": "Forms",
7
+ "summary": "Text input that filters a list of options."
8
+ },
9
+ "axes": {
10
+ "size": [
11
+ "sm",
12
+ "md",
13
+ "lg"
14
+ ],
15
+ "variant": [
16
+ "outline",
17
+ "subtle",
18
+ "plain"
19
+ ],
20
+ "side": [
21
+ "bottom",
22
+ "top",
23
+ "inline-start",
24
+ "inline-end",
25
+ "left",
26
+ "right"
27
+ ],
28
+ "align": [
29
+ "start",
30
+ "center",
31
+ "end"
32
+ ],
33
+ "width": [
34
+ "anchor",
35
+ "content"
36
+ ],
37
+ "mount": [
38
+ "active",
39
+ "lazy",
40
+ "eager"
41
+ ],
42
+ "strategy": [
43
+ "absolute",
44
+ "fixed"
45
+ ],
46
+ "autocomplete": [
47
+ "none",
48
+ "list",
49
+ "both"
50
+ ],
51
+ "openOn": [
52
+ "input",
53
+ "focus",
54
+ "manual"
55
+ ],
56
+ "allowsCustomValue": [
57
+ true,
58
+ false
59
+ ],
60
+ "autoHighlight": [
61
+ true,
62
+ false
63
+ ],
64
+ "highlightMatch": [
65
+ true,
66
+ false
67
+ ],
68
+ "clearable": [
69
+ true,
70
+ false
71
+ ],
72
+ "loop": [
73
+ true,
74
+ false
75
+ ],
76
+ "closeOnSelect": [
77
+ true,
78
+ false
79
+ ],
80
+ "closeOnEscape": [
81
+ true,
82
+ false
83
+ ],
84
+ "closeOnOutsidePress": [
85
+ true,
86
+ false
87
+ ],
88
+ "flip": [
89
+ true,
90
+ false
91
+ ],
92
+ "shift": [
93
+ true,
94
+ false
95
+ ],
96
+ "hideWhenDetached": [
97
+ true,
98
+ false
99
+ ],
100
+ "portal": [
101
+ true,
102
+ false
103
+ ],
104
+ "fullWidth": [
105
+ true,
106
+ false
107
+ ],
108
+ "disabled": [
109
+ true,
110
+ false
111
+ ],
112
+ "readOnly": [
113
+ true,
114
+ false
115
+ ],
116
+ "required": [
117
+ true,
118
+ false
119
+ ],
120
+ "invalid": [
121
+ true,
122
+ false
123
+ ],
124
+ "loading": [
125
+ true,
126
+ false
127
+ ]
128
+ },
129
+ "members": {
130
+ "combobox": {
131
+ "nativeElement": "div",
132
+ "defaults": {
133
+ "size": "md",
134
+ "variant": "outline",
135
+ "side": "bottom",
136
+ "align": "start",
137
+ "width": "content",
138
+ "mount": "active",
139
+ "strategy": "absolute",
140
+ "autocomplete": "list",
141
+ "openOn": "input",
142
+ "allowsCustomValue": false,
143
+ "autoHighlight": false,
144
+ "highlightMatch": true,
145
+ "clearable": true,
146
+ "loop": false,
147
+ "closeOnSelect": true,
148
+ "closeOnEscape": true,
149
+ "closeOnOutsidePress": true,
150
+ "flip": true,
151
+ "shift": true,
152
+ "hideWhenDetached": true,
153
+ "portal": true,
154
+ "fullWidth": true,
155
+ "disabled": false,
156
+ "readOnly": false,
157
+ "required": false,
158
+ "invalid": false,
159
+ "loading": false,
160
+ "sideOffset": 4,
161
+ "alignOffset": 0,
162
+ "collisionPadding": 8
163
+ },
164
+ "capabilities": [
165
+ "value",
166
+ "selection",
167
+ "open",
168
+ "current",
169
+ "size",
170
+ "appearance",
171
+ "placement",
172
+ "content",
173
+ "fullWidth",
174
+ "disabled",
175
+ "loading",
176
+ "readOnly",
177
+ "required",
178
+ "invalid",
179
+ "wiring"
180
+ ],
181
+ "states": [
182
+ "default",
183
+ "hover",
184
+ "active",
185
+ "focus-visible",
186
+ "open",
187
+ "disabled",
188
+ "readonly",
189
+ "invalid",
190
+ "required",
191
+ "loading",
192
+ "selected",
193
+ "current"
194
+ ],
195
+ "parts": [
196
+ "root",
197
+ "input",
198
+ "trigger",
199
+ "arrow",
200
+ "busy",
201
+ "clear",
202
+ "positioner",
203
+ "content",
204
+ "group",
205
+ "group-label",
206
+ "item",
207
+ "indicator",
208
+ "icon",
209
+ "label",
210
+ "match",
211
+ "description",
212
+ "separator",
213
+ "empty",
214
+ "status",
215
+ "placeholder"
216
+ ]
217
+ }
218
+ },
219
+ "docs": {
220
+ "combobox": {
221
+ "imports": {
222
+ "source": "import {\n SlCombobox,\n SlComboboxGroup,\n SlComboboxItem,\n SlComboboxItemIcon,\n SlComboboxSeparator,\n} from '@slotted/angular/combobox';",
223
+ "selector": "sl-combobox, sl-combobox-group, sl-combobox-item, [slComboboxItemIcon], sl-combobox-separator",
224
+ "exportAs": "slCombobox, slComboboxGroup, slComboboxItem, slComboboxSeparator"
225
+ },
226
+ "anatomy": [
227
+ {
228
+ "part": "root",
229
+ "element": "sl-combobox, the host element",
230
+ "required": true,
231
+ "purpose": "The visible frame, carrying data-ui=\"combobox\". It draws the border, the shadow, the focus ring and every state, from the same tokens as the text field and the select."
232
+ },
233
+ {
234
+ "part": "input",
235
+ "element": "input with role=\"combobox\"",
236
+ "required": true,
237
+ "purpose": "A native text input, so the caret, the selection, IME, autofill and every text-editing key behave as in any input. It keeps focus for the whole interaction."
238
+ },
239
+ {
240
+ "part": "trigger",
241
+ "element": "button",
242
+ "required": true,
243
+ "purpose": "Opens and closes the popup with the pointer. It has tabindex=\"-1\", as the ARIA combobox pattern requires, so Tab reaches the input once and skips the button."
244
+ },
245
+ {
246
+ "part": "arrow",
247
+ "element": "span",
248
+ "required": true,
249
+ "purpose": "The chevron inside the trigger, a Glyph inside an Icon, turned over while the popup is open."
250
+ },
251
+ {
252
+ "part": "busy",
253
+ "element": "span",
254
+ "required": false,
255
+ "purpose": "The spinner that replaces the chevron while loading is set, because the chevron promises a list that has not arrived. It carries data-ui=\"spinner\" beside this part, so the spinner stylesheet draws the ring and the combobox sets only its place and size."
256
+ },
257
+ {
258
+ "part": "clear",
259
+ "element": "button",
260
+ "required": false,
261
+ "purpose": "Resets both the text and the chosen value, and returns focus to the input. Present only while clearable is set and the input holds text."
262
+ },
263
+ {
264
+ "part": "positioner",
265
+ "element": "div, built at the end of the document when the popup opens",
266
+ "required": true,
267
+ "purpose": "The popup layer. It carries data-ui=\"combobox\" again, because a stylesheet scoped to the root cannot reach a subtree outside it."
268
+ },
269
+ {
270
+ "part": "content",
271
+ "element": "div with role=\"listbox\"",
272
+ "required": true,
273
+ "purpose": "The popup surface, holding the options that pass the filter. Its height is bounded by the space the positioner reports, and it scrolls inside that bound."
274
+ },
275
+ {
276
+ "part": "group",
277
+ "element": "sl-combobox-group with role=\"group\"",
278
+ "required": false,
279
+ "purpose": "A named set of options. A group whose options were all filtered away is hidden, so no heading appears without options under it."
280
+ },
281
+ {
282
+ "part": "group-label",
283
+ "element": "div",
284
+ "required": false,
285
+ "purpose": "The name of a group, which the group references through aria-labelledby."
286
+ },
287
+ {
288
+ "part": "item",
289
+ "element": "sl-combobox-item with role=\"option\"",
290
+ "required": true,
291
+ "purpose": "One option. It compares its own label against the query and hides itself when it does not match."
292
+ },
293
+ {
294
+ "part": "indicator",
295
+ "element": "span",
296
+ "required": true,
297
+ "purpose": "The check in the last column, shown on the chosen option."
298
+ },
299
+ {
300
+ "part": "icon",
301
+ "element": "span, or the element slComboboxItemIcon is on",
302
+ "required": false,
303
+ "purpose": "The first column: the glyph the icon input names, drawn as a Glyph inside an Icon, or an element of your own marked slComboboxItemIcon."
304
+ },
305
+ {
306
+ "part": "label",
307
+ "element": "span",
308
+ "required": true,
309
+ "purpose": "The option text. It wraps to two lines and then truncates, with the whole text still in the DOM."
310
+ },
311
+ {
312
+ "part": "match",
313
+ "element": "mark",
314
+ "required": false,
315
+ "purpose": "The part of the label the query matched, found with the same collator the filter used. It shows the reader why the option is in the results."
316
+ },
317
+ {
318
+ "part": "description",
319
+ "element": "span",
320
+ "required": false,
321
+ "purpose": "A second line under the label, for detail the label has no room for."
322
+ },
323
+ {
324
+ "part": "separator",
325
+ "element": "sl-combobox-separator with role=\"separator\"",
326
+ "required": false,
327
+ "purpose": "A line between two runs of options."
328
+ },
329
+ {
330
+ "part": "empty",
331
+ "element": "div",
332
+ "required": false,
333
+ "purpose": "The message the popup shows when nothing matched, instead of an empty box."
334
+ },
335
+ {
336
+ "part": "status",
337
+ "element": "div with role=\"status\" and aria-live=\"polite\"",
338
+ "required": true,
339
+ "purpose": "The loading message and the live region in one row, so a screen reader user hears how many options matched."
340
+ },
341
+ {
342
+ "part": "placeholder",
343
+ "element": "div",
344
+ "required": false,
345
+ "purpose": "Three rows the height of an option, drawn with the skeleton stylesheet while loading is set, so the popup already has the shape of the list. Hidden from assistive technology, because the status row announces the wait."
346
+ }
347
+ ],
348
+ "api": [
349
+ {
350
+ "name": "inputValue",
351
+ "type": "model<string>",
352
+ "defaultValue": "''",
353
+ "appliesTo": "sl-combobox",
354
+ "description": "The text in the input, separate from the chosen value. Two-way."
355
+ },
356
+ {
357
+ "name": "value",
358
+ "type": "model<string | null>",
359
+ "defaultValue": "null",
360
+ "appliesTo": "sl-combobox",
361
+ "description": "The key of the chosen option. Two-way, and the value a form control binds."
362
+ },
363
+ {
364
+ "name": "defaultValue",
365
+ "type": "string | null",
366
+ "defaultValue": "—",
367
+ "appliesTo": "sl-combobox",
368
+ "description": "The initial value when value is not bound, read once at init. It sets the key, not the text."
369
+ },
370
+ {
371
+ "name": "open",
372
+ "type": "model<boolean>",
373
+ "defaultValue": "false",
374
+ "appliesTo": "sl-combobox",
375
+ "description": "Whether the popup is open. Two-way."
376
+ },
377
+ {
378
+ "name": "highlightedValue",
379
+ "type": "model<string | null>",
380
+ "defaultValue": "null",
381
+ "appliesTo": "sl-combobox",
382
+ "description": "The key of the highlighted option, which is separate from the chosen one. Two-way."
383
+ },
384
+ {
385
+ "name": "aria-label",
386
+ "type": "string",
387
+ "defaultValue": "—",
388
+ "appliesTo": "sl-combobox",
389
+ "description": "Names the input and the listbox when no field label names them. The host element keeps no name."
390
+ },
391
+ {
392
+ "name": "placeholder",
393
+ "type": "string",
394
+ "defaultValue": "''",
395
+ "appliesTo": "sl-combobox",
396
+ "description": "The text the input shows while it is empty."
397
+ },
398
+ {
399
+ "name": "filter",
400
+ "type": "((label, query) => boolean) | null",
401
+ "defaultValue": "—",
402
+ "appliesTo": "sl-combobox",
403
+ "description": "The comparison between a label and the query. Unset uses a locale-sensitive contains; null turns filtering off for a list a server has already filtered."
404
+ },
405
+ {
406
+ "name": "locale",
407
+ "type": "string",
408
+ "defaultValue": "—",
409
+ "appliesTo": "sl-combobox",
410
+ "description": "The BCP 47 language of the default filter. The active locale when unset."
411
+ },
412
+ {
413
+ "name": "items",
414
+ "type": "ComboboxItems",
415
+ "defaultValue": "—",
416
+ "appliesTo": "sl-combobox",
417
+ "description": "Labels for values, so a closed combobox can show the label of an option it has not rendered."
418
+ },
419
+ {
420
+ "name": "name",
421
+ "type": "string",
422
+ "defaultValue": "—",
423
+ "appliesTo": "sl-combobox",
424
+ "description": "The name the value is submitted under. Renders a hidden input that carries the chosen key."
425
+ },
426
+ {
427
+ "name": "form",
428
+ "type": "string",
429
+ "defaultValue": "—",
430
+ "appliesTo": "sl-combobox",
431
+ "description": "The id of the form the value is submitted with, when it is not the enclosing one."
432
+ },
433
+ {
434
+ "name": "total",
435
+ "type": "number",
436
+ "defaultValue": "—",
437
+ "appliesTo": "sl-combobox",
438
+ "description": "The size of the whole collection, written to aria-setsize on each option."
439
+ },
440
+ {
441
+ "name": "autocomplete",
442
+ "type": "'none' | 'list' | 'both'",
443
+ "defaultValue": "list",
444
+ "appliesTo": "sl-combobox",
445
+ "description": "What typing does: none keeps every option, list filters the options, and both also completes the first match inline. Written to aria-autocomplete."
446
+ },
447
+ {
448
+ "name": "openOn",
449
+ "type": "'input' | 'focus' | 'manual'",
450
+ "defaultValue": "input",
451
+ "appliesTo": "sl-combobox",
452
+ "description": "When the popup opens without the trigger: on typing or a press on the input (input), on every focus and press (focus), or only from the trigger and the arrow keys (manual)."
453
+ },
454
+ {
455
+ "name": "allowsCustomValue",
456
+ "type": "boolean",
457
+ "defaultValue": "false",
458
+ "appliesTo": "sl-combobox",
459
+ "description": "Whether text that matches no option becomes the value on Enter or blur."
460
+ },
461
+ {
462
+ "name": "creatable",
463
+ "type": "boolean",
464
+ "defaultValue": "false",
465
+ "appliesTo": "sl-combobox",
466
+ "description": "Whether the popup offers to create what was typed when nothing matched. Taking the offer emits create."
467
+ },
468
+ {
469
+ "name": "autoHighlight",
470
+ "type": "boolean",
471
+ "defaultValue": "false",
472
+ "appliesTo": "sl-combobox",
473
+ "description": "Whether the first match is highlighted when the popup opens and after each query typed, so Enter takes it. A chosen option that is showing takes precedence."
474
+ },
475
+ {
476
+ "name": "highlightMatch",
477
+ "type": "boolean",
478
+ "defaultValue": "true",
479
+ "appliesTo": "sl-combobox",
480
+ "description": "Whether the part of each label the query matched is marked."
481
+ },
482
+ {
483
+ "name": "size",
484
+ "type": "'sm' | 'md' | 'lg'",
485
+ "defaultValue": "md",
486
+ "appliesTo": "sl-combobox",
487
+ "description": "The control size. Unset follows the enclosing field."
488
+ },
489
+ {
490
+ "name": "variant",
491
+ "type": "'outline' | 'subtle' | 'plain'",
492
+ "defaultValue": "outline",
493
+ "appliesTo": "sl-combobox",
494
+ "description": "How much frame the control draws."
495
+ },
496
+ {
497
+ "name": "side",
498
+ "type": "'bottom' | 'top' | 'inline-start' | 'inline-end' | 'left' | 'right'",
499
+ "defaultValue": "bottom",
500
+ "appliesTo": "sl-combobox",
501
+ "description": "The edge of the control the popup opens from."
502
+ },
503
+ {
504
+ "name": "align",
505
+ "type": "'start' | 'center' | 'end'",
506
+ "defaultValue": "start",
507
+ "appliesTo": "sl-combobox",
508
+ "description": "The alignment of the popup along that edge."
509
+ },
510
+ {
511
+ "name": "width",
512
+ "type": "'anchor' | 'content'",
513
+ "defaultValue": "content",
514
+ "appliesTo": "sl-combobox",
515
+ "description": "The popup width: content keeps it at least as wide as the control and widens it to its longest option; anchor pins it to the width of the control."
516
+ },
517
+ {
518
+ "name": "mount",
519
+ "type": "'active' | 'lazy' | 'eager'",
520
+ "defaultValue": "active",
521
+ "appliesTo": "sl-combobox",
522
+ "description": "When the popup is built: only while open, from the first open, or from the start."
523
+ },
524
+ {
525
+ "name": "strategy",
526
+ "type": "'absolute' | 'fixed'",
527
+ "defaultValue": "absolute",
528
+ "appliesTo": "sl-combobox",
529
+ "description": "The CSS positioning the popup uses."
530
+ },
531
+ {
532
+ "name": "clearable",
533
+ "type": "boolean",
534
+ "defaultValue": "true",
535
+ "appliesTo": "sl-combobox",
536
+ "description": "Whether a clear button appears once the input holds text."
537
+ },
538
+ {
539
+ "name": "loop",
540
+ "type": "boolean",
541
+ "defaultValue": "false",
542
+ "appliesTo": "sl-combobox",
543
+ "description": "Whether ArrowDown and ArrowUp wrap at the ends of the list."
544
+ },
545
+ {
546
+ "name": "closeOnSelect",
547
+ "type": "boolean",
548
+ "defaultValue": "true",
549
+ "appliesTo": "sl-combobox",
550
+ "description": "Whether choosing an option closes the popup."
551
+ },
552
+ {
553
+ "name": "closeOnEscape",
554
+ "type": "boolean",
555
+ "defaultValue": "true",
556
+ "appliesTo": "sl-combobox",
557
+ "description": "Whether Escape closes the popup."
558
+ },
559
+ {
560
+ "name": "closeOnOutsidePress",
561
+ "type": "boolean",
562
+ "defaultValue": "true",
563
+ "appliesTo": "sl-combobox",
564
+ "description": "Whether a press outside the combobox closes the popup."
565
+ },
566
+ {
567
+ "name": "flip",
568
+ "type": "boolean",
569
+ "defaultValue": "true",
570
+ "appliesTo": "sl-combobox",
571
+ "description": "Whether the popup moves to the opposite side when it does not fit."
572
+ },
573
+ {
574
+ "name": "shift",
575
+ "type": "boolean",
576
+ "defaultValue": "true",
577
+ "appliesTo": "sl-combobox",
578
+ "description": "Whether the popup slides along its side to stay in view."
579
+ },
580
+ {
581
+ "name": "hideWhenDetached",
582
+ "type": "boolean",
583
+ "defaultValue": "true",
584
+ "appliesTo": "sl-combobox",
585
+ "description": "Whether the popup hides once the control scrolls out of view."
586
+ },
587
+ {
588
+ "name": "portal",
589
+ "type": "boolean",
590
+ "defaultValue": "true",
591
+ "appliesTo": "sl-combobox",
592
+ "description": "Whether the popup is built at the end of the document instead of inside the combobox."
593
+ },
594
+ {
595
+ "name": "fullWidth",
596
+ "type": "boolean",
597
+ "defaultValue": "true",
598
+ "appliesTo": "sl-combobox",
599
+ "description": "Whether the control fills its container or keeps its own width."
600
+ },
601
+ {
602
+ "name": "disabled",
603
+ "type": "boolean",
604
+ "defaultValue": "false",
605
+ "appliesTo": "sl-combobox",
606
+ "description": "Turns off the input, the trigger and the popup. Unset follows the enclosing field and the disabled state of the form control."
607
+ },
608
+ {
609
+ "name": "readOnly",
610
+ "type": "boolean",
611
+ "defaultValue": "false",
612
+ "appliesTo": "sl-combobox",
613
+ "description": "Keeps the text selectable and copyable and never opens the popup. Unset follows the enclosing field."
614
+ },
615
+ {
616
+ "name": "required",
617
+ "type": "boolean",
618
+ "defaultValue": "false",
619
+ "appliesTo": "sl-combobox",
620
+ "description": "Sets the native required attribute on the input, and the validator reports an empty value. Unset follows the enclosing field."
621
+ },
622
+ {
623
+ "name": "invalid",
624
+ "type": "boolean",
625
+ "defaultValue": "false",
626
+ "appliesTo": "sl-combobox",
627
+ "description": "Draws the border and the focus ring in the invalid tone and sets aria-invalid. Unset follows the enclosing field."
628
+ },
629
+ {
630
+ "name": "loading",
631
+ "type": "boolean",
632
+ "defaultValue": "false",
633
+ "appliesTo": "sl-combobox",
634
+ "description": "Shows the spinner, the placeholder rows and the loading message, and sets aria-busy on the listbox."
635
+ },
636
+ {
637
+ "name": "sideOffset",
638
+ "type": "number",
639
+ "defaultValue": "4",
640
+ "appliesTo": "sl-combobox",
641
+ "description": "The gap between the control and the popup, in pixels."
642
+ },
643
+ {
644
+ "name": "alignOffset",
645
+ "type": "number",
646
+ "defaultValue": "0",
647
+ "appliesTo": "sl-combobox",
648
+ "description": "How far the popup shifts along its side, in pixels."
649
+ },
650
+ {
651
+ "name": "collisionPadding",
652
+ "type": "number",
653
+ "defaultValue": "8",
654
+ "appliesTo": "sl-combobox",
655
+ "description": "The minimum distance between the popup and the edge of the viewport, in pixels."
656
+ },
657
+ {
658
+ "name": "messages",
659
+ "type": "Partial<ComboboxMessages>",
660
+ "defaultValue": "—",
661
+ "appliesTo": "sl-combobox",
662
+ "description": "Phrases that replace the active locale’s, key by key: clear, trigger, create ({query}), empty, loading and count ({count})."
663
+ },
664
+ {
665
+ "name": "value",
666
+ "type": "string",
667
+ "defaultValue": "—",
668
+ "appliesTo": "sl-combobox-item",
669
+ "description": "The option key: what the form submits and what valueChange emits."
670
+ },
671
+ {
672
+ "name": "label",
673
+ "type": "string",
674
+ "defaultValue": "—",
675
+ "appliesTo": "sl-combobox-item",
676
+ "description": "The option text: what the reader sees, what the filter compares and what the mark splits."
677
+ },
678
+ {
679
+ "name": "disabled",
680
+ "type": "boolean",
681
+ "defaultValue": "false",
682
+ "appliesTo": "sl-combobox-item",
683
+ "description": "Keeps the option in the list, announces it as unavailable, and skips it with every movement key."
684
+ },
685
+ {
686
+ "name": "description",
687
+ "type": "string",
688
+ "defaultValue": "—",
689
+ "appliesTo": "sl-combobox-item",
690
+ "description": "The second line under the label."
691
+ },
692
+ {
693
+ "name": "icon",
694
+ "type": "GlyphName",
695
+ "defaultValue": "—",
696
+ "appliesTo": "sl-combobox-item",
697
+ "description": "The glyph drawn in the first column, as a Glyph inside an Icon. An element of your own goes there through slComboboxItemIcon."
698
+ },
699
+ {
700
+ "name": "position",
701
+ "type": "number",
702
+ "defaultValue": "—",
703
+ "appliesTo": "sl-combobox-item",
704
+ "description": "The position of the option in the whole collection, written to aria-posinset."
705
+ },
706
+ {
707
+ "name": "label",
708
+ "type": "string",
709
+ "defaultValue": "—",
710
+ "appliesTo": "sl-combobox-group",
711
+ "description": "The name of the group, which the group references through aria-labelledby."
712
+ }
713
+ ],
714
+ "composition": [
715
+ {
716
+ "name": "provideComboboxDefaults()",
717
+ "type": "Provider",
718
+ "defaultValue": "—",
719
+ "appliesTo": "Application",
720
+ "description": "Sets any axis once, in a bootstrap, a route or the providers of a component. The phrases come from the active locale, set by provideSlotted."
721
+ },
722
+ {
723
+ "name": "slComboboxItemIcon",
724
+ "type": "directive",
725
+ "defaultValue": "—",
726
+ "appliesTo": "element inside sl-combobox-item",
727
+ "description": "Places the element in the first column, for artwork a glyph cannot draw, such as an avatar."
728
+ },
729
+ {
730
+ "name": "exportAs",
731
+ "type": "slCombobox",
732
+ "defaultValue": "—",
733
+ "appliesTo": "sl-combobox",
734
+ "description": "The component instance, for a template that calls focus(), setOpen() or scrollToKey()."
735
+ },
736
+ {
737
+ "name": "ControlValueAccessor",
738
+ "type": "NG_VALUE_ACCESSOR",
739
+ "defaultValue": "—",
740
+ "appliesTo": "sl-combobox",
741
+ "description": "formControl, formControlName and ngModel bind the chosen value, and the disabled state of the form control reaches the combobox."
742
+ },
743
+ {
744
+ "name": "Validator",
745
+ "type": "NG_VALIDATORS",
746
+ "defaultValue": "—",
747
+ "appliesTo": "sl-combobox",
748
+ "description": "Reports required, and text that matches no option while allowsCustomValue is off. A native input cannot report the second."
749
+ },
750
+ {
751
+ "name": "native attributes",
752
+ "type": "placeholder, aria-label",
753
+ "defaultValue": "—",
754
+ "appliesTo": "sl-combobox",
755
+ "description": "The two attributes the host passes to the input. Other attributes stay on the host element, and every text-editing key keeps its browser behaviour."
756
+ }
757
+ ],
758
+ "events": [
759
+ {
760
+ "name": "inputValueChange",
761
+ "payload": "string",
762
+ "when": "After the text changes; the output half of [(inputValue)]."
763
+ },
764
+ {
765
+ "name": "valueChange",
766
+ "payload": "string | null",
767
+ "when": "After the chosen value changes; the output half of [(value)]."
768
+ },
769
+ {
770
+ "name": "openChange",
771
+ "payload": "boolean",
772
+ "when": "After the popup opens or closes; the output half of [(open)]."
773
+ },
774
+ {
775
+ "name": "highlightedValueChange",
776
+ "payload": "string | null",
777
+ "when": "After the highlight moves; the output half of [(highlightedValue)]."
778
+ },
779
+ {
780
+ "name": "inputValueChangeRequest",
781
+ "payload": "ChangeRequest<string>",
782
+ "when": "Before the text changes. The reason is keyboard while the reader types, select when an option is chosen, and clear, blur or programmatic otherwise."
783
+ },
784
+ {
785
+ "name": "valueChangeRequest",
786
+ "payload": "ChangeRequest<string | null>",
787
+ "when": "Before the chosen value changes. Typing emits only the text request; choosing an option emits both, each with the reason select."
788
+ },
789
+ {
790
+ "name": "openChangeRequest",
791
+ "payload": "ChangeRequest<boolean>",
792
+ "when": "Before the popup opens or closes. The reason tells a selection from a dismissal: select, escape, outsidePress, dismiss, blur, pointer, keyboard or programmatic."
793
+ },
794
+ {
795
+ "name": "highlightedValueChangeRequest",
796
+ "payload": "ChangeRequest<string | null>",
797
+ "when": "Before the highlight moves, by key or by pointer, and when the filter removes the highlighted option."
798
+ },
799
+ {
800
+ "name": "create",
801
+ "payload": "{ query: string; reason: ComboboxValueReason }",
802
+ "when": "When the reader takes the create option, which appears while creatable is set, the query is not empty and nothing matched. The popup closes and nothing is selected: add the option to your collection and select it."
803
+ },
804
+ {
805
+ "name": "inputReset",
806
+ "payload": "{ rejected: string; reason: 'blur' }",
807
+ "when": "When the input loses focus holding text that matches no option while allowsCustomValue is off. The text returns to the label of the chosen option, or empties, and the event carries the rejected text."
808
+ },
809
+ {
810
+ "name": "loadMore",
811
+ "payload": "void",
812
+ "when": "When the end of the rendered list scrolls into view. Fetch the next page; the combobox keeps no cursor of its own."
813
+ }
814
+ ],
815
+ "accessibility": [
816
+ "The input has role=\"combobox\" with aria-autocomplete, aria-expanded and aria-controls. The popup has role=\"listbox\", and each row has role=\"option\". The trigger button is out of the tab sequence, as the ARIA combobox pattern requires.",
817
+ "Focus stays on the input, so Home, End, ArrowLeft, ArrowRight, Backspace and Delete keep their text-editing behaviour. The highlight moves through aria-activedescendant, and the caret does not move with it.",
818
+ "Escape works in two steps, both named by the pattern. With the popup open, it closes the popup and keeps the text. With the popup closed, it restores the label of the chosen option, and a second press clears the selection.",
819
+ "The status row is a polite live region. It announces how many options matched, and \"Loading…\" while a request is in flight.",
820
+ "Tab commits nothing: an option the reader arrowed past is not a choice, which is where the combobox differs from the select. Tab does accept an inline completion that is still showing."
821
+ ]
822
+ }
823
+ },
824
+ "tokens": [
825
+ "--slotted-border-subtle",
826
+ "--slotted-border-width-thin",
827
+ "--slotted-combobox-action-active-background",
828
+ "--slotted-combobox-action-color",
829
+ "--slotted-combobox-action-hover-background",
830
+ "--slotted-combobox-action-size",
831
+ "--slotted-combobox-arrow-color",
832
+ "--slotted-combobox-autofill-background",
833
+ "--slotted-combobox-background",
834
+ "--slotted-combobox-border-color",
835
+ "--slotted-combobox-color",
836
+ "--slotted-combobox-completion-background",
837
+ "--slotted-combobox-completion-color",
838
+ "--slotted-combobox-content-border-color",
839
+ "--slotted-combobox-content-padding-block",
840
+ "--slotted-combobox-content-padding-inline",
841
+ "--slotted-combobox-content-radius",
842
+ "--slotted-combobox-content-shadow",
843
+ "--slotted-combobox-content-text",
844
+ "--slotted-combobox-content-text-muted",
845
+ "--slotted-combobox-disabled-background",
846
+ "--slotted-combobox-disabled-border-color",
847
+ "--slotted-combobox-disabled-color",
848
+ "--slotted-combobox-highlight",
849
+ "--slotted-combobox-highlight-active",
850
+ "--slotted-combobox-highlight-ring",
851
+ "--slotted-combobox-hover-border-color",
852
+ "--slotted-combobox-icon-size-min",
853
+ "--slotted-combobox-invalid-border-color",
854
+ "--slotted-combobox-invalid-edge-width",
855
+ "--slotted-combobox-invalid-focus-ring-color",
856
+ "--slotted-combobox-item-radius",
857
+ "--slotted-combobox-measure",
858
+ "--slotted-combobox-open-border-color",
859
+ "--slotted-combobox-placeholder-color",
860
+ "--slotted-combobox-plain-hover-background",
861
+ "--slotted-combobox-radius",
862
+ "--slotted-combobox-readonly-background",
863
+ "--slotted-combobox-selected-color",
864
+ "--slotted-combobox-separator-color",
865
+ "--slotted-combobox-shadow",
866
+ "--slotted-combobox-subtle-background",
867
+ "--slotted-combobox-subtle-border-color",
868
+ "--slotted-combobox-subtle-hover-background",
869
+ "--slotted-combobox-surface",
870
+ "--slotted-control-border-color",
871
+ "--slotted-control-border-width",
872
+ "--slotted-control-font-family",
873
+ "--slotted-control-font-size-lg",
874
+ "--slotted-control-font-size-md",
875
+ "--slotted-control-font-size-sm",
876
+ "--slotted-control-gap-lg",
877
+ "--slotted-control-gap-md",
878
+ "--slotted-control-gap-sm",
879
+ "--slotted-control-height-lg",
880
+ "--slotted-control-height-md",
881
+ "--slotted-control-height-sm",
882
+ "--slotted-control-icon-size-lg",
883
+ "--slotted-control-icon-size-md",
884
+ "--slotted-control-icon-size-sm",
885
+ "--slotted-control-inner-size-lg",
886
+ "--slotted-control-inner-size-md",
887
+ "--slotted-control-inner-size-sm",
888
+ "--slotted-control-invalid-edge-width",
889
+ "--slotted-control-padding-inline-lg",
890
+ "--slotted-control-padding-inline-md",
891
+ "--slotted-control-padding-inline-sm",
892
+ "--slotted-control-radius",
893
+ "--slotted-control-shadow",
894
+ "--slotted-control-shadow-focus-geometry",
895
+ "--slotted-control-surface",
896
+ "--slotted-control-transition-duration",
897
+ "--slotted-control-transition-easing",
898
+ "--slotted-disabled-background",
899
+ "--slotted-disabled-border",
900
+ "--slotted-disabled-foreground",
901
+ "--slotted-duration-medium",
902
+ "--slotted-duration-short",
903
+ "--slotted-easing-enter",
904
+ "--slotted-easing-exit",
905
+ "--slotted-easing-standard",
906
+ "--slotted-focus-ring-color",
907
+ "--slotted-focus-ring-color-invalid",
908
+ "--slotted-focus-ring-offset",
909
+ "--slotted-focus-ring-width",
910
+ "--slotted-font-family-sans",
911
+ "--slotted-font-size-xs",
912
+ "--slotted-font-weight-medium",
913
+ "--slotted-font-weight-semibold",
914
+ "--slotted-line-height-md",
915
+ "--slotted-line-height-sm",
916
+ "--slotted-radius-lg",
917
+ "--slotted-radius-none",
918
+ "--slotted-shadow-md",
919
+ "--slotted-space-1",
920
+ "--slotted-space-2",
921
+ "--slotted-space-5",
922
+ "--slotted-surface-raised",
923
+ "--slotted-surface-sunken",
924
+ "--slotted-target-comfortable",
925
+ "--slotted-target-min",
926
+ "--slotted-text",
927
+ "--slotted-text-muted",
928
+ "--slotted-tone-accent-border",
929
+ "--slotted-tone-accent-surface",
930
+ "--slotted-tone-accent-text",
931
+ "--slotted-tone-danger-border",
932
+ "--slotted-tone-secondary-subtle-active",
933
+ "--slotted-tone-secondary-subtle-hover",
934
+ "--slotted-z-index-popover"
935
+ ],
936
+ "examples": [
937
+ {
938
+ "id": "playground",
939
+ "title": "Playground",
940
+ "note": "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.",
941
+ "language": "html",
942
+ "source": "<sl-combobox aria-label=\"Fruit\" placeholder=\"Search fruit\">\n <sl-combobox-item value=\"blueberry\" label=\"Blueberry\" />\n <sl-combobox-item value=\"raspberry\" label=\"Raspberry\" />\n</sl-combobox>\n",
943
+ "verdict": "excerpt"
944
+ },
945
+ {
946
+ "id": "filtering",
947
+ "title": "Filtering, and the mark",
948
+ "note": "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.",
949
+ "language": "ts",
950
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst CITIES = [\n 'São Paulo',\n 'Zürich',\n 'Montréal',\n 'Kraków',\n 'Malmö',\n 'Querétaro',\n 'Reykjavík',\n 'Düsseldorf',\n];\n\n@Component({\n selector: 'app-combobox-filtering',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Destination city</label>\n <sl-combobox placeholder=\"Try “sao” or “zurich”\">\n @for (city of cities; track city) {\n <sl-combobox-item [value]=\"city\" [label]=\"city\" />\n }\n </sl-combobox>\n <span slFieldDescription>Accents and case are ignored when matching.</span>\n </div>\n `,\n})\nexport class ComboboxFiltering {\n protected readonly cities = CITIES;\n}\n",
951
+ "verdict": "example"
952
+ },
953
+ {
954
+ "id": "autocomplete",
955
+ "title": "Autocomplete",
956
+ "note": "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.",
957
+ "language": "html",
958
+ "source": "<sl-combobox autocomplete=\"none\">…</sl-combobox>\n<sl-combobox autocomplete=\"list\">…</sl-combobox>\n<sl-combobox autocomplete=\"both\">…</sl-combobox>\n",
959
+ "verdict": "excerpt"
960
+ },
961
+ {
962
+ "id": "custom-value",
963
+ "title": "A value that is not on the list",
964
+ "note": "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\".",
965
+ "language": "ts",
966
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst BOXES = [\n { id: 'small', label: 'Small · 20 × 15 × 10 cm' },\n { id: 'medium', label: 'Medium · 35 × 25 × 15 cm' },\n { id: 'large', label: 'Large · 50 × 40 × 30 cm' },\n];\n\n@Component({\n selector: 'app-combobox-custom-value',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Box size</label>\n <sl-combobox allowsCustomValue placeholder=\"Pick a box or type dimensions\" [(value)]=\"value\">\n @for (box of boxes; track box.id) {\n <sl-combobox-item [value]=\"box.id\" [label]=\"box.label\" />\n }\n </sl-combobox>\n <span slFieldDescription>Value: {{ value() ?? 'none' }}</span>\n </div>\n `,\n})\nexport class ComboboxCustomValue {\n protected readonly boxes = BOXES;\n protected readonly value = signal<string | null>(null);\n}\n",
967
+ "verdict": "example"
968
+ },
969
+ {
970
+ "id": "creation",
971
+ "title": "Adding a value the list does not hold",
972
+ "note": "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.",
973
+ "language": "html",
974
+ "source": "<sl-combobox creatable (create)=\"add($event.query)\">…</sl-combobox>\n",
975
+ "verdict": "excerpt"
976
+ },
977
+ {
978
+ "id": "async",
979
+ "title": "Asynchronous results",
980
+ "note": "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.",
981
+ "language": "html",
982
+ "source": "<sl-combobox\n [filter]=\"null\"\n [loading]=\"pending()\"\n [(inputValue)]=\"query\"\n (loadMore)=\"fetchNextPage()\"\n>\n …\n</sl-combobox>\n",
983
+ "verdict": "excerpt"
984
+ },
985
+ {
986
+ "id": "groups",
987
+ "title": "Groups",
988
+ "note": "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.",
989
+ "language": "ts",
990
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst CATALOG = [\n {\n category: 'Kitchen',\n products: [\n { sku: 'KIT-1042', name: 'Cast-iron skillet' },\n { sku: 'KIT-1043', name: 'Stoneware mug' },\n { sku: 'KIT-1051', name: 'Pour-over kettle' },\n ],\n },\n {\n category: 'Bags',\n products: [\n { sku: 'BAG-2010', name: 'Canvas tote' },\n { sku: 'BAG-2014', name: 'Trail daypack' },\n { sku: 'BAG-2019', name: 'Weekender bag' },\n ],\n },\n {\n category: 'Stationery',\n products: [\n { sku: 'STA-3002', name: 'Field notebook' },\n { sku: 'STA-3007', name: 'Fountain pen' },\n { sku: 'STA-3011', name: 'Brass stapler' },\n ],\n },\n];\n\n@Component({\n selector: 'app-combobox-groups',\n imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Product</label>\n <sl-combobox placeholder=\"Search the catalog\">\n @for (group of catalog; track group.category) {\n <sl-combobox-group [label]=\"group.category\">\n @for (product of group.products; track product.sku) {\n <sl-combobox-item [value]=\"product.sku\" [label]=\"product.name\" />\n }\n </sl-combobox-group>\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxGroups {\n protected readonly catalog = CATALOG;\n}\n",
991
+ "verdict": "example"
992
+ },
993
+ {
994
+ "id": "clearable",
995
+ "title": "Clearable",
996
+ "note": "One press takes both contracts back — the text and the chosen key — and focus returns to the field rather than to the document.",
997
+ "language": "ts",
998
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\n@Component({\n selector: 'app-combobox-clearable',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n <div slField>\n <label slFieldLabel>Default warehouse</label>\n <sl-combobox inputValue=\"Columbus, OH\" defaultValue=\"CMH\">\n <sl-combobox-item value=\"RNO\" label=\"Reno, NV\" />\n <sl-combobox-item value=\"CMH\" label=\"Columbus, OH\" />\n <sl-combobox-item value=\"SAV\" label=\"Savannah, GA\" />\n </sl-combobox>\n <span slFieldDescription>Optional. Clearing it routes orders by distance.</span>\n </div>\n <div slField>\n <label slFieldLabel>Payment terms</label>\n <sl-combobox [clearable]=\"false\" inputValue=\"Net 30\" defaultValue=\"net-30\">\n <sl-combobox-item value=\"prepaid\" label=\"Prepaid\" />\n <sl-combobox-item value=\"net-30\" label=\"Net 30\" />\n <sl-combobox-item value=\"net-45\" label=\"Net 45\" />\n </sl-combobox>\n <span slFieldDescription>Every account has terms, so there is nothing to clear.</span>\n </div>\n </div>\n `,\n})\nexport class ComboboxClearable {}\n",
999
+ "verdict": "example"
1000
+ },
1001
+ {
1002
+ "id": "sizes",
1003
+ "title": "Sizes",
1004
+ "note": "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.",
1005
+ "language": "ts",
1006
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport type { ComboboxSize } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst SIZES: { size: ComboboxSize; label: string }[] = [\n { size: 'sm', label: 'Small' },\n { size: 'md', label: 'Medium' },\n { size: 'lg', label: 'Large' },\n];\n\nconst WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];\n\n@Component({\n selector: 'app-combobox-sizes',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n @for (step of sizes; track step.size) {\n <div slField>\n <label slFieldLabel>{{ step.label }}</label>\n <sl-combobox [size]=\"step.size\" inputValue=\"Reno, NV\" defaultValue=\"Reno, NV\">\n @for (warehouse of warehouses; track warehouse) {\n <sl-combobox-item [value]=\"warehouse\" [label]=\"warehouse\" />\n }\n </sl-combobox>\n </div>\n }\n </div>\n `,\n})\nexport class ComboboxSizes {\n protected readonly sizes = SIZES;\n protected readonly warehouses = WAREHOUSES;\n}\n",
1007
+ "verdict": "example"
1008
+ },
1009
+ {
1010
+ "id": "variants",
1011
+ "title": "Variants",
1012
+ "note": "outline on the page, subtle where a form sinks into its card, and plain for a table cell that is only a control while it is being used.",
1013
+ "language": "ts",
1014
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport type { ComboboxVariant } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst VARIANTS: { variant: ComboboxVariant; label: string }[] = [\n { variant: 'outline', label: 'Outline' },\n { variant: 'subtle', label: 'Subtle' },\n { variant: 'plain', label: 'Plain' },\n];\n\nconst WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];\n\n@Component({\n selector: 'app-combobox-variants',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n @for (step of variants; track step.variant) {\n <div slField>\n <label slFieldLabel>{{ step.label }}</label>\n <sl-combobox placeholder=\"Search warehouses\" [variant]=\"step.variant\">\n @for (warehouse of warehouses; track warehouse) {\n <sl-combobox-item [value]=\"warehouse\" [label]=\"warehouse\" />\n }\n </sl-combobox>\n </div>\n }\n </div>\n `,\n})\nexport class ComboboxVariants {\n protected readonly variants = VARIANTS;\n protected readonly warehouses = WAREHOUSES;\n}\n",
1015
+ "verdict": "example"
1016
+ },
1017
+ {
1018
+ "id": "states",
1019
+ "title": "States",
1020
+ "note": "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.",
1021
+ "language": "ts",
1022
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\n@Component({\n selector: 'app-combobox-states',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n <div slField disabled>\n <label slFieldLabel>Warehouse</label>\n <sl-combobox inputValue=\"Reno, NV\" defaultValue=\"RNO\">\n <sl-combobox-item value=\"RNO\" label=\"Reno, NV\" />\n <sl-combobox-item value=\"CMH\" label=\"Columbus, OH\" />\n </sl-combobox>\n <span slFieldDescription>Locked while the transfer is in transit.</span>\n </div>\n <div slField readOnly>\n <label slFieldLabel>Billing entity</label>\n <sl-combobox inputValue=\"Northwind Trading Co.\" defaultValue=\"northwind-us\">\n <sl-combobox-item value=\"northwind-us\" label=\"Northwind Trading Co.\" />\n <sl-combobox-item value=\"northwind-eu\" label=\"Northwind Europe B.V.\" />\n </sl-combobox>\n <span slFieldDescription\n >Set by the contract. The text can still be selected and copied.</span\n >\n </div>\n </div>\n `,\n})\nexport class ComboboxStates {}\n",
1023
+ "verdict": "example"
1024
+ },
1025
+ {
1026
+ "id": "empty",
1027
+ "title": "Nothing matched, and still travelling",
1028
+ "note": "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.",
1029
+ "language": "html",
1030
+ "source": "<sl-combobox [messages]=\"{ empty: 'Try a different spelling' }\">…</sl-combobox>\n",
1031
+ "verdict": "excerpt"
1032
+ },
1033
+ {
1034
+ "id": "long-content",
1035
+ "title": "Long, translated and unbroken content",
1036
+ "note": "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.",
1037
+ "language": "html",
1038
+ "source": "<sl-combobox-item value=\"urn\" label=\"urn:acme:catalogue:9f2c41ab8de07c5511903fbe\" />\n",
1039
+ "verdict": "excerpt"
1040
+ },
1041
+ {
1042
+ "id": "keyboard",
1043
+ "title": "Keyboard",
1044
+ "note": "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.",
1045
+ "language": "html",
1046
+ "source": "<sl-combobox openOn=\"input\" [autoHighlight]=\"false\" [loop]=\"false\">…</sl-combobox>\n",
1047
+ "verdict": "excerpt"
1048
+ },
1049
+ {
1050
+ "id": "form",
1051
+ "title": "In a Reactive Form",
1052
+ "note": "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.",
1053
+ "language": "ts",
1054
+ "source": "import { Component, signal } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlText } from '@slotted/angular/typography';\n\nconst WAREHOUSES = [\n { code: 'RNO', city: 'Reno, NV' },\n { code: 'CMH', city: 'Columbus, OH' },\n { code: 'SAV', city: 'Savannah, GA' },\n];\n\n@Component({\n selector: 'app-combobox-form',\n imports: [\n ReactiveFormsModule,\n SlButton,\n SlCombobox,\n SlComboboxItem,\n SlField,\n SlFieldError,\n SlFieldLabel,\n SlInline,\n SlStack,\n SlText,\n ],\n template: `\n <form [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div slStack [gap]=\"4\">\n <div slField required [invalid]=\"missing()\">\n <label slFieldLabel>Fulfil from</label>\n <sl-combobox\n formControlName=\"warehouse\"\n placeholder=\"Search warehouses\"\n (valueChange)=\"$event && missing.set(false)\"\n >\n @for (warehouse of warehouses; track warehouse.code) {\n <sl-combobox-item [value]=\"warehouse.code\" [label]=\"warehouse.city\" />\n }\n </sl-combobox>\n @if (missing()) {\n <span slFieldError>Choose the warehouse that ships this order.</span>\n }\n </div>\n <div slInline [gap]=\"3\" align=\"center\">\n <button slButton type=\"submit\">Create transfer</button>\n @if (submitted(); as line) {\n <span slText size=\"sm\" tone=\"muted\">Submitted {{ line }}</span>\n }\n </div>\n </div>\n </form>\n `,\n})\nexport class ComboboxForm {\n protected readonly warehouses = WAREHOUSES;\n protected readonly form = new FormGroup({\n warehouse: new FormControl<string | null>(null, Validators.required),\n });\n protected readonly missing = signal(false);\n protected readonly submitted = signal<string | null>(null);\n\n protected submit() {\n const warehouse = this.form.value.warehouse;\n this.missing.set(this.form.invalid);\n this.submitted.set(this.form.valid ? `warehouse=${warehouse}` : null);\n }\n}\n",
1055
+ "verdict": "example"
1056
+ },
1057
+ {
1058
+ "id": "composition",
1059
+ "title": "Composition",
1060
+ "note": "Defaults provided once for a whole application; the words come from the language in force (provideSlotted).",
1061
+ "language": "ts",
1062
+ "source": "providers: [provideComboboxDefaults({ size: 'sm' })];\n",
1063
+ "verdict": "excerpt"
1064
+ },
1065
+ {
1066
+ "id": "assignee-picker",
1067
+ "title": "assignee-picker.ts",
1068
+ "note": null,
1069
+ "language": "ts",
1070
+ "source": "import { Component } from '@angular/core';\nimport { SlAvatar } from '@slotted/angular/avatar';\nimport { SlCombobox, SlComboboxItem, SlComboboxItemIcon } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst PEOPLE = [\n { id: 'avery', name: 'Avery Collins', role: 'Fulfilment lead', away: false },\n { id: 'kenji', name: 'Kenji Watanabe', role: 'Customer care', away: false },\n { id: 'lucia', name: 'Lucía Fernández', role: 'Account manager', away: false },\n { id: 'ruth', name: 'Ruth Adeyemi', role: 'On leave until 14 October', away: true },\n { id: 'tomasz', name: 'Tomasz Nowak', role: 'Warehouse supervisor, Reno', away: false },\n { id: 'omar', name: 'Omar Haddad', role: 'Finance', away: false },\n];\n\n@Component({\n selector: 'app-combobox-assignee-picker',\n imports: [SlAvatar, SlCombobox, SlComboboxItem, SlComboboxItemIcon, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Assignee</label>\n <sl-combobox autoHighlight placeholder=\"Assign to…\">\n @for (person of people; track person.id) {\n <sl-combobox-item\n [value]=\"person.id\"\n [label]=\"person.name\"\n [description]=\"person.role\"\n [disabled]=\"person.away\"\n >\n <span slComboboxItemIcon\n ><span slAvatar [name]=\"person.name\" size=\"xs\" decorative></span\n ></span>\n </sl-combobox-item>\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxAssigneePicker {\n protected readonly people = PEOPLE;\n}\n",
1071
+ "verdict": "example"
1072
+ },
1073
+ {
1074
+ "id": "async-search",
1075
+ "title": "async-search.ts",
1076
+ "note": null,
1077
+ "language": "ts",
1078
+ "source": "import { Component, computed, DestroyRef, inject, signal } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\ninterface Customer {\n id: string;\n name: string;\n city: string;\n}\n\nconst DIRECTORY: Customer[] = [\n { id: 'brightline', name: 'Brightline Studio', city: 'Portland, OR' },\n { id: 'harbor-pine', name: 'Harbor & Pine', city: 'Seattle, WA' },\n { id: 'northgate', name: 'Northgate Labs', city: 'Austin, TX' },\n { id: 'quill', name: 'Quill & Co.', city: 'Brooklyn, NY' },\n { id: 'solstice', name: 'Solstice Outdoor', city: 'Boulder, CO' },\n { id: 'verde', name: 'Verde Kitchen', city: 'Oakland, CA' },\n { id: 'atlas', name: 'Atlas Freight', city: 'Memphis, TN' },\n { id: 'juniper', name: 'Juniper Health', city: 'Minneapolis, MN' },\n { id: 'kestrel', name: 'Kestrel Robotics', city: 'Pittsburgh, PA' },\n { id: 'larkspur', name: 'Larkspur Books', city: 'Asheville, NC' },\n { id: 'meridian', name: 'Meridian Hotels', city: 'Chicago, IL' },\n { id: 'oakline', name: 'Oakline Furniture', city: 'Grand Rapids, MI' },\n { id: 'pelican', name: 'Pelican Coffee', city: 'Tampa, FL' },\n { id: 'saltmarsh', name: 'Saltmarsh Dairy', city: 'Burlington, VT' },\n { id: 'tidewater', name: 'Tidewater Supply', city: 'Norfolk, VA' },\n];\n\n/** Stands in for a request to the server, which answers after 600 ms. */\nfunction searchCustomers(query: string): Promise<Customer[]> {\n const needle = query.trim().toLowerCase();\n const found = DIRECTORY.filter((customer) => customer.name.toLowerCase().includes(needle));\n return new Promise((resolve) => setTimeout(() => resolve(found), 600));\n}\n\n@Component({\n selector: 'app-combobox-async-search',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Customer</label>\n <sl-combobox\n placeholder=\"Search 15 customers\"\n [filter]=\"null\"\n [inputValue]=\"query()\"\n [loading]=\"loading()\"\n [messages]=\"{ empty: emptyMessage() }\"\n (inputValueChange)=\"type($event)\"\n >\n @for (customer of results(); track customer.id) {\n <sl-combobox-item\n [value]=\"customer.id\"\n [label]=\"customer.name\"\n [description]=\"customer.city\"\n />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxAsyncSearch {\n protected readonly query = signal('');\n protected readonly results = signal<Customer[]>([]);\n protected readonly loading = signal(false);\n protected readonly emptyMessage = computed(() =>\n this.query().trim() === '' ? 'Type a name to search.' : 'No customer by that name.',\n );\n private debounce: ReturnType<typeof setTimeout> | undefined;\n private latest = 0;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => clearTimeout(this.debounce));\n }\n\n protected type(text: string) {\n this.query.set(text);\n clearTimeout(this.debounce);\n const request = ++this.latest;\n if (text.trim() === '') {\n this.results.set([]);\n this.loading.set(false);\n return;\n }\n this.loading.set(true);\n this.debounce = setTimeout(() => {\n void searchCustomers(text).then((found) => {\n if (request !== this.latest) return;\n this.results.set(found);\n this.loading.set(false);\n });\n }, 250);\n }\n}\n",
1079
+ "verdict": "example"
1080
+ },
1081
+ {
1082
+ "id": "auto-highlight",
1083
+ "title": "auto-highlight.ts",
1084
+ "note": null,
1085
+ "language": "ts",
1086
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst UNITS = ['Each', 'Case of 6', 'Case of 12', 'Pallet', 'Kilogram', 'Pound', 'Meter', 'Liter'];\n\n@Component({\n selector: 'app-combobox-auto-highlight',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Unit of measure</label>\n <sl-combobox autoHighlight loop placeholder=\"Type “ca” and press Enter\">\n @for (unit of units; track unit) {\n <sl-combobox-item [value]=\"unit\" [label]=\"unit\" />\n }\n </sl-combobox>\n <span slFieldDescription>The first match is highlighted, so Enter takes it.</span>\n </div>\n `,\n})\nexport class ComboboxAutoHighlight {\n protected readonly units = UNITS;\n}\n",
1087
+ "verdict": "example"
1088
+ },
1089
+ {
1090
+ "id": "basic",
1091
+ "title": "basic.ts",
1092
+ "note": null,
1093
+ "language": "ts",
1094
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst CUSTOMERS = [\n { id: 'brightline', name: 'Brightline Studio' },\n { id: 'harbor-pine', name: 'Harbor & Pine' },\n { id: 'northgate', name: 'Northgate Labs' },\n { id: 'quill', name: 'Quill & Co.' },\n { id: 'solstice', name: 'Solstice Outdoor' },\n { id: 'verde', name: 'Verde Kitchen' },\n { id: 'atlas', name: 'Atlas Freight' },\n { id: 'juniper', name: 'Juniper Health' },\n];\n\n@Component({\n selector: 'app-combobox-basic',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Customer</label>\n <sl-combobox placeholder=\"Search customers\">\n @for (customer of customers; track customer.id) {\n <sl-combobox-item [value]=\"customer.id\" [label]=\"customer.name\" />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxBasic {\n protected readonly customers = CUSTOMERS;\n}\n",
1095
+ "verdict": "example"
1096
+ },
1097
+ {
1098
+ "id": "controlled",
1099
+ "title": "controlled.ts",
1100
+ "note": null,
1101
+ "language": "ts",
1102
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlText } from '@slotted/angular/typography';\n\nconst PEOPLE = [\n { id: 'avery', name: 'Avery Collins' },\n { id: 'kenji', name: 'Kenji Watanabe' },\n { id: 'lucia', name: 'Lucía Fernández' },\n { id: 'ruth', name: 'Ruth Adeyemi' },\n { id: 'tomasz', name: 'Tomasz Nowak' },\n];\n\n@Component({\n selector: 'app-combobox-controlled',\n imports: [SlButton, SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlInline, SlStack, SlText],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Reviewer</label>\n <sl-combobox placeholder=\"Search people\" [(inputValue)]=\"text\" [(value)]=\"value\">\n @for (person of people; track person.id) {\n <sl-combobox-item [value]=\"person.id\" [label]=\"person.name\" />\n }\n </sl-combobox>\n </div>\n <div slInline [gap]=\"3\" align=\"center\">\n <button slButton size=\"sm\" variant=\"outline\" (click)=\"assignToMe()\">Assign to me</button>\n <span slText size=\"sm\" tone=\"muted\"\n >Text “{{ text() }}” · Value {{ value() ?? 'none' }}</span\n >\n </div>\n </div>\n `,\n})\nexport class ComboboxControlled {\n protected readonly people = PEOPLE;\n protected readonly text = signal('');\n protected readonly value = signal<string | null>(null);\n\n protected assignToMe() {\n this.value.set('ruth');\n this.text.set('Ruth Adeyemi');\n }\n}\n",
1103
+ "verdict": "example"
1104
+ },
1105
+ {
1106
+ "id": "country-picker",
1107
+ "title": "country-picker.ts",
1108
+ "note": null,
1109
+ "language": "ts",
1110
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst REGIONS = [\n {\n region: 'Americas',\n countries: [\n { code: 'BR', name: 'Brazil', detail: 'BRL · +55' },\n { code: 'CA', name: 'Canada', detail: 'CAD · +1' },\n { code: 'MX', name: 'Mexico', detail: 'MXN · +52' },\n { code: 'US', name: 'United States', detail: 'USD · +1' },\n ],\n },\n {\n region: 'Europe',\n countries: [\n { code: 'FR', name: 'France', detail: 'EUR · +33' },\n { code: 'DE', name: 'Germany', detail: 'EUR · +49' },\n { code: 'PL', name: 'Poland', detail: 'PLN · +48' },\n { code: 'CH', name: 'Switzerland', detail: 'CHF · +41' },\n { code: 'TR', name: 'Türkiye', detail: 'TRY · +90' },\n { code: 'GB', name: 'United Kingdom', detail: 'GBP · +44' },\n ],\n },\n {\n region: 'Asia Pacific',\n countries: [\n { code: 'AU', name: 'Australia', detail: 'AUD · +61' },\n { code: 'JP', name: 'Japan', detail: 'JPY · +81' },\n { code: 'SG', name: 'Singapore', detail: 'SGD · +65' },\n { code: 'VN', name: 'Việt Nam', detail: 'VND · +84' },\n ],\n },\n {\n region: 'Middle East and Africa',\n countries: [\n { code: 'CI', name: 'Côte d’Ivoire', detail: 'XOF · +225' },\n { code: 'EG', name: 'Egypt', detail: 'EGP · +20' },\n { code: 'KE', name: 'Kenya', detail: 'KES · +254' },\n { code: 'AE', name: 'United Arab Emirates', detail: 'AED · +971' },\n ],\n },\n];\n\n@Component({\n selector: 'app-combobox-country-picker',\n imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField required>\n <label slFieldLabel>Country or region</label>\n <sl-combobox autoHighlight name=\"country\" placeholder=\"Search countries\">\n @for (group of regions; track group.region) {\n <sl-combobox-group [label]=\"group.region\">\n @for (country of group.countries; track country.code) {\n <sl-combobox-item\n [value]=\"country.code\"\n [label]=\"country.name\"\n [description]=\"country.detail\"\n />\n }\n </sl-combobox-group>\n }\n </sl-combobox>\n <span slFieldDescription>Sets the currency and the phone prefix on the invoice.</span>\n </div>\n `,\n})\nexport class ComboboxCountryPicker {\n protected readonly regions = REGIONS;\n}\n",
1111
+ "verdict": "example"
1112
+ },
1113
+ {
1114
+ "id": "creatable",
1115
+ "title": "creatable.ts",
1116
+ "note": null,
1117
+ "language": "ts",
1118
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst CATEGORIES = ['Apparel', 'Bags', 'Home', 'Kitchen', 'Stationery', 'Outdoor'];\n\n@Component({\n selector: 'app-combobox-creatable',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Category</label>\n <sl-combobox\n creatable\n placeholder=\"Type “Garden” to add it\"\n [(value)]=\"value\"\n (create)=\"create($event.query)\"\n >\n @for (category of categories(); track category) {\n <sl-combobox-item [value]=\"category\" [label]=\"category\" />\n }\n </sl-combobox>\n <span slFieldDescription>{{ categories().length }} categories</span>\n </div>\n `,\n})\nexport class ComboboxCreatable {\n protected readonly categories = signal(CATEGORIES);\n protected readonly value = signal<string | null>(null);\n\n protected create(query: string) {\n this.categories.update((held) => [...held, query]);\n this.value.set(query);\n }\n}\n",
1119
+ "verdict": "example"
1120
+ },
1121
+ {
1122
+ "id": "custom-filter",
1123
+ "title": "custom-filter.ts",
1124
+ "note": null,
1125
+ "language": "ts",
1126
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst PRODUCTS = [\n { sku: 'KIT-1042', name: 'Cast-iron skillet' },\n { sku: 'KIT-1043', name: 'Stoneware mug' },\n { sku: 'BAG-2010', name: 'Canvas tote' },\n { sku: 'BAG-2014', name: 'Trail daypack' },\n { sku: 'HOM-4010', name: 'Wool throw' },\n { sku: 'HOM-4014', name: 'Brass desk lamp' },\n { sku: 'STA-3010', name: 'Field notebook' },\n];\n\n@Component({\n selector: 'app-combobox-custom-filter',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>SKU</label>\n <sl-combobox placeholder=\"KIT-, BAG-, HOM-…\" [filter]=\"startsWith\">\n @for (product of products; track product.sku) {\n <sl-combobox-item\n [value]=\"product.sku\"\n [label]=\"product.sku\"\n [description]=\"product.name\"\n />\n }\n </sl-combobox>\n <span slFieldDescription>Codes match from the first character, so “10” finds nothing.</span>\n </div>\n `,\n})\nexport class ComboboxCustomFilter {\n protected readonly products = PRODUCTS;\n protected readonly startsWith = (label: string, query: string) =>\n label.toLowerCase().startsWith(query.toLowerCase());\n}\n",
1127
+ "verdict": "example"
1128
+ },
1129
+ {
1130
+ "id": "defaults",
1131
+ "title": "defaults.ts",
1132
+ "note": null,
1133
+ "language": "ts",
1134
+ "source": "import { Component } from '@angular/core';\nimport { provideComboboxDefaults, SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];\nconst CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS'];\n\n@Component({\n selector: 'app-combobox-defaults',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel, SlStack],\n providers: [provideComboboxDefaults({ variant: 'subtle', autoHighlight: true })],\n template: `\n <div slStack [gap]=\"4\">\n <div slField>\n <label slFieldLabel>Warehouse</label>\n <sl-combobox placeholder=\"Any warehouse\">\n @for (warehouse of warehouses; track warehouse) {\n <sl-combobox-item [value]=\"warehouse\" [label]=\"warehouse\" />\n }\n </sl-combobox>\n </div>\n <div slField>\n <label slFieldLabel>Carrier</label>\n <sl-combobox placeholder=\"Any carrier\">\n @for (carrier of carriers; track carrier) {\n <sl-combobox-item [value]=\"carrier\" [label]=\"carrier\" />\n }\n </sl-combobox>\n </div>\n </div>\n `,\n})\nexport class ComboboxAppDefaults {\n protected readonly warehouses = WAREHOUSES;\n protected readonly carriers = CARRIERS;\n}\n",
1135
+ "verdict": "example"
1136
+ },
1137
+ {
1138
+ "id": "descriptions",
1139
+ "title": "descriptions.ts",
1140
+ "note": null,
1141
+ "language": "ts",
1142
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst WAREHOUSES = [\n { code: 'RNO', city: 'Reno, NV', detail: 'West · same-day cutoff 2:00 pm PT' },\n { code: 'CMH', city: 'Columbus, OH', detail: 'Midwest · same-day cutoff 3:00 pm ET' },\n { code: 'SAV', city: 'Savannah, GA', detail: 'Southeast · port of entry for ocean freight' },\n { code: 'DFW', city: 'Dallas, TX', detail: 'South · opens November 2026' },\n];\n\n@Component({\n selector: 'app-combobox-descriptions',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Ship from</label>\n <sl-combobox placeholder=\"Search warehouses\">\n @for (warehouse of warehouses; track warehouse.code) {\n <sl-combobox-item\n [value]=\"warehouse.code\"\n [label]=\"warehouse.city\"\n [description]=\"warehouse.detail\"\n />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxDescriptions {\n protected readonly warehouses = WAREHOUSES;\n}\n",
1143
+ "verdict": "example"
1144
+ },
1145
+ {
1146
+ "id": "disabled-options",
1147
+ "title": "disabled-options.ts",
1148
+ "note": null,
1149
+ "language": "ts",
1150
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst SERVICES = [\n { id: 'usps-priority', name: 'USPS Priority Mail', note: '1–3 business days', disabled: false },\n { id: 'ups-ground', name: 'UPS Ground', note: '1–5 business days', disabled: false },\n { id: 'fedex-2day', name: 'FedEx 2Day', note: '2 business days', disabled: false },\n {\n id: 'dhl-express',\n name: 'DHL Express Worldwide',\n note: 'International shipments only',\n disabled: true,\n },\n { id: 'ups-next-day', name: 'UPS Next Day Air', note: 'Cutoff passed for today', disabled: true },\n];\n\n@Component({\n selector: 'app-combobox-disabled-options',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Shipping service</label>\n <sl-combobox placeholder=\"Search services\">\n @for (service of services; track service.id) {\n <sl-combobox-item\n [value]=\"service.id\"\n [label]=\"service.name\"\n [description]=\"service.note\"\n [disabled]=\"service.disabled\"\n />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxDisabledOptions {\n protected readonly services = SERVICES;\n}\n",
1151
+ "verdict": "example"
1152
+ },
1153
+ {
1154
+ "id": "field",
1155
+ "title": "field.ts",
1156
+ "note": null,
1157
+ "language": "ts",
1158
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst OWNERS = ['Avery Collins', 'Kenji Watanabe', 'Lucía Fernández', 'Omar Haddad'];\nconst COST_CENTERS = ['4100 Fulfilment', '4200 Customer care', '4300 Marketing'];\n\n@Component({\n selector: 'app-combobox-field',\n imports: [\n SlCombobox,\n SlComboboxItem,\n SlField,\n SlFieldDescription,\n SlFieldError,\n SlFieldLabel,\n SlStack,\n ],\n template: `\n <div slStack [gap]=\"5\">\n <div slField required>\n <label slFieldLabel>Account manager</label>\n <sl-combobox placeholder=\"Search people\">\n @for (owner of owners; track owner) {\n <sl-combobox-item [value]=\"owner\" [label]=\"owner\" />\n }\n </sl-combobox>\n <span slFieldDescription>Receives the renewal reminders for this account.</span>\n </div>\n <div slField invalid required>\n <label slFieldLabel>Cost center</label>\n <sl-combobox inputValue=\"4900\">\n @for (center of costCenters; track center) {\n <sl-combobox-item [value]=\"center\" [label]=\"center\" />\n }\n </sl-combobox>\n <span slFieldError>4900 is closed. Choose an open cost center.</span>\n </div>\n </div>\n `,\n})\nexport class ComboboxField {\n protected readonly owners = OWNERS;\n protected readonly costCenters = COST_CENTERS;\n}\n",
1159
+ "verdict": "example"
1160
+ },
1161
+ {
1162
+ "id": "filter-facets",
1163
+ "title": "filter-facets.ts",
1164
+ "note": null,
1165
+ "language": "ts",
1166
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlText } from '@slotted/angular/typography';\n\ntype Facet = 'warehouse' | 'carrier' | 'owner';\n\nconst WAREHOUSES = ['Reno, NV', 'Columbus, OH', 'Savannah, GA'];\nconst CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS'];\nconst OWNERS = ['Avery Collins', 'Kenji Watanabe', 'Lucía Fernández', 'Omar Haddad'];\n\nconst FACETS: { id: Facet; label: string; options: string[] }[] = [\n { id: 'warehouse', label: 'Warehouse', options: WAREHOUSES },\n { id: 'carrier', label: 'Carrier', options: CARRIERS },\n { id: 'owner', label: 'Owner', options: OWNERS },\n];\n\n/** Open orders, counted per warehouse, carrier and owner. */\nconst ORDERS = WAREHOUSES.flatMap((warehouse, w) =>\n CARRIERS.flatMap((carrier, c) =>\n OWNERS.map((owner, o) => ({ warehouse, carrier, owner, count: 1 + ((w + 2 * c + 3 * o) % 5) })),\n ),\n);\nconst TOTAL = ORDERS.reduce((sum, row) => sum + row.count, 0);\n\nconst NONE: Record<Facet, string | null> = { warehouse: null, carrier: null, owner: null };\nconst EMPTY: Record<Facet, string> = { warehouse: '', carrier: '', owner: '' };\n\n@Component({\n selector: 'app-combobox-filter-facets',\n imports: [SlButton, SlCombobox, SlComboboxItem, SlInline, SlText],\n template: `\n <div slInline [gap]=\"2\" align=\"center\" wrap=\"wrap\">\n @for (facet of facets; track facet.id) {\n <sl-combobox\n size=\"sm\"\n width=\"content\"\n [fullWidth]=\"false\"\n [aria-label]=\"facet.label\"\n [placeholder]=\"facet.label\"\n [value]=\"chosen()[facet.id]\"\n (valueChange)=\"choose(facet.id, $event)\"\n [inputValue]=\"texts()[facet.id]\"\n (inputValueChange)=\"type(facet.id, $event)\"\n >\n @for (option of facet.options; track option) {\n <sl-combobox-item [value]=\"option\" [label]=\"option\" />\n }\n </sl-combobox>\n }\n <button slButton size=\"sm\" variant=\"ghost\" [disabled]=\"active() === 0\" (click)=\"clear()\">\n Clear filters\n </button>\n <span slText size=\"sm\" tone=\"muted\">{{ matching() }} of {{ total }} orders</span>\n </div>\n `,\n})\nexport class ComboboxFilterFacets {\n protected readonly facets = FACETS;\n protected readonly total = TOTAL;\n protected readonly chosen = signal(NONE);\n protected readonly texts = signal(EMPTY);\n\n protected readonly matching = computed(() =>\n ORDERS.filter((row) =>\n FACETS.every(\n (facet) => this.chosen()[facet.id] === null || row[facet.id] === this.chosen()[facet.id],\n ),\n ).reduce((sum, row) => sum + row.count, 0),\n );\n protected readonly active = computed(\n () => FACETS.filter((facet) => this.chosen()[facet.id] !== null).length,\n );\n\n protected choose(facet: Facet, value: string | null) {\n this.chosen.update((held) => ({ ...held, [facet]: value }));\n }\n\n protected type(facet: Facet, text: string) {\n this.texts.update((held) => ({ ...held, [facet]: text }));\n }\n\n protected clear() {\n this.chosen.set(NONE);\n this.texts.set(EMPTY);\n }\n}\n",
1167
+ "verdict": "example"
1168
+ },
1169
+ {
1170
+ "id": "global-search",
1171
+ "title": "global-search.ts",
1172
+ "note": null,
1173
+ "language": "ts",
1174
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlCombobox, SlComboboxGroup, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlText } from '@slotted/angular/typography';\n\nconst CUSTOMERS = [\n { id: 'brightline', name: 'Brightline Studio', city: 'Portland, OR' },\n { id: 'harbor-pine', name: 'Harbor & Pine', city: 'Seattle, WA' },\n { id: 'northgate', name: 'Northgate Labs', city: 'Austin, TX' },\n];\nconst ORDERS = [\n { id: '10482', customer: 'Brightline Studio', total: '$1,284.00' },\n { id: '10479', customer: 'Atlas Freight', total: '$356.40' },\n { id: '10471', customer: 'Northgate Labs', total: '$2,910.15' },\n];\nconst LABELS = new Map<string, string>([\n ...CUSTOMERS.map((customer) => [`customer:${customer.id}`, customer.name] as const),\n ...ORDERS.map((order) => [`order:${order.id}`, `Order ${order.id}`] as const),\n]);\n\n@Component({\n selector: 'app-combobox-global-search',\n imports: [SlCombobox, SlComboboxGroup, SlComboboxItem, SlStack, SlText],\n template: `\n <div slStack [gap]=\"3\">\n <sl-combobox\n aria-label=\"Search Northwind\"\n openOn=\"focus\"\n placeholder=\"Search customers and orders\"\n size=\"sm\"\n (valueChange)=\"opened.set($event)\"\n >\n <sl-combobox-group label=\"Customers\">\n @for (customer of customers; track customer.id) {\n <sl-combobox-item\n icon=\"person\"\n [value]=\"'customer:' + customer.id\"\n [label]=\"customer.name\"\n [description]=\"customer.city\"\n />\n }\n </sl-combobox-group>\n <sl-combobox-group label=\"Orders\">\n @for (order of orders; track order.id) {\n <sl-combobox-item\n icon=\"file-text\"\n [value]=\"'order:' + order.id\"\n [label]=\"'Order ' + order.id\"\n [description]=\"order.customer + ' · ' + order.total\"\n />\n }\n </sl-combobox-group>\n </sl-combobox>\n <span slText size=\"sm\" tone=\"muted\">\n @if (opened(); as key) {\n Opening {{ labels.get(key) }}\n } @else {\n Focus the field to see every result.\n }\n </span>\n </div>\n `,\n})\nexport class ComboboxGlobalSearch {\n protected readonly customers = CUSTOMERS;\n protected readonly orders = ORDERS;\n protected readonly labels = LABELS;\n protected readonly opened = signal<string | null>(null);\n}\n",
1175
+ "verdict": "example"
1176
+ },
1177
+ {
1178
+ "id": "icons",
1179
+ "title": "icons.ts",
1180
+ "note": null,
1181
+ "language": "ts",
1182
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport type { GlyphName } from '@slotted/angular/icon';\n\nconst DOCUMENTS: { id: string; name: string; glyph: GlyphName }[] = [\n { id: 'price-list', name: 'Q4 wholesale price list.xlsx', glyph: 'file-spreadsheet' },\n { id: 'carrier-contract', name: 'Carrier contract 2026.pdf', glyph: 'file-text' },\n { id: 'floor-plan', name: 'Reno floor plan.png', glyph: 'file-image' },\n { id: 'returns-deck', name: 'Returns policy review.key', glyph: 'presentation' },\n { id: 'product-photos', name: 'Autumn product photos.zip', glyph: 'file-archive' },\n];\n\n@Component({\n selector: 'app-combobox-icons',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Attach a document</label>\n <sl-combobox placeholder=\"Search shared files\">\n @for (document of documents; track document.id) {\n <sl-combobox-item [value]=\"document.id\" [label]=\"document.name\" [icon]=\"document.glyph\" />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxIcons {\n protected readonly documents = DOCUMENTS;\n}\n",
1183
+ "verdict": "example"
1184
+ },
1185
+ {
1186
+ "id": "inline-completion",
1187
+ "title": "inline-completion.ts",
1188
+ "note": null,
1189
+ "language": "ts",
1190
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst TIME_ZONES = [\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'Europe/London',\n 'Europe/Berlin',\n 'Asia/Tokyo',\n 'Australia/Sydney',\n];\n\n@Component({\n selector: 'app-combobox-inline-completion',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Time zone</label>\n <sl-combobox autocomplete=\"both\" placeholder=\"Type “eu” or “am”\">\n @for (zone of zones; track zone) {\n <sl-combobox-item [value]=\"zone\" [label]=\"zone\" />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxInlineCompletion {\n protected readonly zones = TIME_ZONES;\n}\n",
1191
+ "verdict": "example"
1192
+ },
1193
+ {
1194
+ "id": "load-more",
1195
+ "title": "load-more.ts",
1196
+ "note": null,
1197
+ "language": "ts",
1198
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst PRODUCTS = [\n 'Canvas tote',\n 'Merino beanie',\n 'Stoneware mug',\n 'Linen apron',\n 'Trail daypack',\n 'Wool throw',\n 'Ceramic planter',\n 'Field notebook',\n 'Rain shell',\n 'Leather wallet',\n 'Weekender bag',\n 'Cotton crewneck',\n 'Camp mug',\n 'Insulated bottle',\n 'Chambray shirt',\n 'Waffle towel',\n 'Beeswax candle',\n 'Rattan basket',\n 'Hiking socks',\n 'Down vest',\n 'Sketchbook',\n 'Wool blanket',\n 'Market crossbody',\n 'Felt slippers',\n];\nconst COLORS = [\n 'Natural',\n 'Charcoal',\n 'Olive',\n 'Rust',\n 'Navy',\n 'Sand',\n 'Forest',\n 'Slate',\n 'Clay',\n 'Ink',\n];\nconst SKUS = PRODUCTS.flatMap((product, row) =>\n COLORS.map((color, column) => ({\n sku: `NW-${1001 + row * COLORS.length + column}`,\n label: `${product}, ${color}`,\n })),\n);\nconst PAGE = 30;\n\n@Component({\n selector: 'app-combobox-load-more',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Variant</label>\n <sl-combobox\n placeholder=\"Search 240 SKUs\"\n [filter]=\"null\"\n [inputValue]=\"query()\"\n [loading]=\"loading()\"\n [total]=\"matching().length\"\n (inputValueChange)=\"type($event)\"\n (loadMore)=\"loadMore()\"\n >\n @for (item of visible(); track item.sku; let index = $index) {\n <sl-combobox-item\n [value]=\"item.sku\"\n [label]=\"item.label\"\n [description]=\"item.sku\"\n [position]=\"index + 1\"\n />\n }\n </sl-combobox>\n <span slFieldDescription>Thirty at a time; scrolling to the end fetches the next page.</span>\n </div>\n `,\n})\nexport class ComboboxLoadMore {\n protected readonly query = signal('');\n protected readonly shown = signal(PAGE);\n protected readonly loading = signal(false);\n private request = 0;\n\n /* The server's answer: every SKU whose label holds the query, a page at a time. */\n protected readonly matching = computed(() => {\n const needle = this.query().trim().toLowerCase();\n return SKUS.filter((item) => item.label.toLowerCase().includes(needle));\n });\n protected readonly visible = computed(() => this.matching().slice(0, this.shown()));\n\n protected type(text: string) {\n this.request += 1;\n this.query.set(text);\n this.shown.set(PAGE);\n this.loading.set(false);\n }\n\n protected loadMore() {\n if (this.loading() || this.shown() >= this.matching().length) return;\n const current = ++this.request;\n this.loading.set(true);\n setTimeout(() => {\n if (current !== this.request) return;\n this.shown.update((count) => count + PAGE);\n this.loading.set(false);\n }, 500);\n }\n}\n",
1199
+ "verdict": "example"
1200
+ },
1201
+ {
1202
+ "id": "long-labels",
1203
+ "title": "long-labels.ts",
1204
+ "note": null,
1205
+ "language": "ts",
1206
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst ACCOUNTS: { id: string; label: string; description?: string }[] = [\n {\n id: '4010',\n label:\n '4010 · Revenue, wholesale channel, net of returns, allowances and early-payment discounts',\n },\n { id: '4020', label: '4020 · Revenue, online store' },\n {\n id: 'urn',\n label: 'urn:northwind:ledger:4030-9f2c41ab8de07c5511903fbe',\n description: 'Imported from the previous ledger',\n },\n {\n id: '5100',\n label: '5100 · Cost of goods sold, including inbound freight and duties',\n description: 'Posted when an order ships, at the weighted average cost of the warehouse',\n },\n];\n\n@Component({\n selector: 'app-combobox-long-labels',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Ledger account</label>\n <sl-combobox placeholder=\"Search accounts\">\n @for (account of accounts; track account.id) {\n <sl-combobox-item\n [value]=\"account.id\"\n [label]=\"account.label\"\n [description]=\"account.description\"\n />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxLongLabels {\n protected readonly accounts = ACCOUNTS;\n}\n",
1207
+ "verdict": "example"
1208
+ },
1209
+ {
1210
+ "id": "long-list",
1211
+ "title": "long-list.ts",
1212
+ "note": null,
1213
+ "language": "ts",
1214
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\n\nconst BINS = Array.from({ length: 240 }, (_, index) => {\n const aisle = String(Math.floor(index / 20) + 1).padStart(2, '0');\n const bay = String((index % 20) + 1).padStart(2, '0');\n return { id: `A${aisle}-B${bay}`, detail: `Aisle ${Number(aisle)}, bay ${Number(bay)} · Reno` };\n});\n\n@Component({\n selector: 'app-combobox-long-list',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Put-away bin</label>\n <sl-combobox placeholder=\"Search 240 bins\">\n @for (bin of bins; track bin.id) {\n <sl-combobox-item [value]=\"bin.id\" [label]=\"bin.id\" [description]=\"bin.detail\" />\n }\n </sl-combobox>\n <span slFieldDescription>Page Down and Page Up move ten bins at a time.</span>\n </div>\n `,\n})\nexport class ComboboxLongList {\n protected readonly bins = BINS;\n}\n",
1215
+ "verdict": "example"
1216
+ },
1217
+ {
1218
+ "id": "messages",
1219
+ "title": "messages.ts",
1220
+ "note": null,
1221
+ "language": "ts",
1222
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS', 'OnTrac'];\n\n@Component({\n selector: 'app-combobox-messages',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Carrier</label>\n <sl-combobox placeholder=\"Type “royal mail”\" [messages]=\"messages\">\n @for (carrier of carriers; track carrier) {\n <sl-combobox-item [value]=\"carrier\" [label]=\"carrier\" />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxCustomMessages {\n protected readonly carriers = CARRIERS;\n protected readonly messages = {\n clear: 'Clear carrier',\n count: '{count, plural, one {# carrier} other {# carriers}}',\n empty: 'No carrier by that name. Check the spelling on the label.',\n };\n}\n",
1223
+ "verdict": "example"
1224
+ },
1225
+ {
1226
+ "id": "open-on",
1227
+ "title": "open-on.ts",
1228
+ "note": null,
1229
+ "language": "ts",
1230
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport type { ComboboxOpenOn } from '@slotted/angular/combobox';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst MODES: { openOn: ComboboxOpenOn; label: string; hint: string }[] = [\n { openOn: 'input', label: 'Opens on typing', hint: 'Typing or a press on the field opens it.' },\n { openOn: 'focus', label: 'Opens on focus', hint: 'Every focus opens it, Tab included.' },\n {\n openOn: 'manual',\n label: 'Opens on request',\n hint: 'Only the button and the arrow keys open it.',\n },\n];\n\nconst CHANNELS = ['Online store', 'Wholesale portal', 'Marketplace', 'Retail partners'];\n\n@Component({\n selector: 'app-combobox-open-on',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldDescription, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"5\">\n @for (mode of modes; track mode.openOn) {\n <div slField>\n <label slFieldLabel>{{ mode.label }}</label>\n <sl-combobox placeholder=\"Sales channel\" [openOn]=\"mode.openOn\">\n @for (channel of channels; track channel) {\n <sl-combobox-item [value]=\"channel\" [label]=\"channel\" />\n }\n </sl-combobox>\n <span slFieldDescription>{{ mode.hint }}</span>\n </div>\n }\n </div>\n `,\n})\nexport class ComboboxOpening {\n protected readonly modes = MODES;\n protected readonly channels = CHANNELS;\n}\n",
1231
+ "verdict": "example"
1232
+ },
1233
+ {
1234
+ "id": "search-error",
1235
+ "title": "search-error.ts",
1236
+ "note": null,
1237
+ "language": "ts",
1238
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\n\nconst CARRIERS = ['UPS', 'FedEx', 'DHL', 'USPS', 'OnTrac', 'LaserShip'];\n\n/** Stands in for a rate service that fails its first request and answers after. */\nlet outage = true;\nfunction searchCarriers(query: string): Promise<string[]> {\n const needle = query.trim().toLowerCase();\n return new Promise((resolve, reject) =>\n setTimeout(() => {\n if (outage) {\n outage = false;\n reject(new Error('The rate service did not answer.'));\n return;\n }\n resolve(CARRIERS.filter((carrier) => carrier.toLowerCase().includes(needle)));\n }, 500),\n );\n}\n\n@Component({\n selector: 'app-combobox-search-error',\n imports: [SlButton, SlCombobox, SlComboboxItem, SlField, SlFieldError, SlFieldLabel, SlStack],\n template: `\n <div slStack [gap]=\"3\">\n <div slField [invalid]=\"failed()\">\n <label slFieldLabel>Carrier</label>\n <sl-combobox\n placeholder=\"Search carriers\"\n [filter]=\"null\"\n [inputValue]=\"query()\"\n [loading]=\"loading()\"\n [messages]=\"{ empty: failed() ? 'Rates are unavailable.' : 'No carrier by that name.' }\"\n (inputValueChange)=\"type($event)\"\n >\n @for (carrier of results(); track carrier) {\n <sl-combobox-item [value]=\"carrier\" [label]=\"carrier\" />\n }\n </sl-combobox>\n @if (failed()) {\n <span slFieldError>The rate service did not answer. Your text is kept.</span>\n }\n </div>\n @if (failed()) {\n <div>\n <button slButton size=\"sm\" variant=\"outline\" (click)=\"search(query())\">Retry</button>\n </div>\n }\n </div>\n `,\n})\nexport class ComboboxSearchError {\n protected readonly query = signal('');\n protected readonly results = signal<string[]>([]);\n protected readonly loading = signal(false);\n protected readonly failed = signal(false);\n private latest = 0;\n\n protected search(text: string) {\n const request = ++this.latest;\n this.loading.set(true);\n this.failed.set(false);\n searchCarriers(text).then(\n (found) => {\n if (request !== this.latest) return;\n this.results.set(found);\n this.loading.set(false);\n },\n () => {\n if (request !== this.latest) return;\n this.results.set([]);\n this.failed.set(true);\n this.loading.set(false);\n },\n );\n }\n\n protected type(text: string) {\n this.query.set(text);\n if (text.trim() !== '') this.search(text);\n }\n}\n",
1239
+ "verdict": "example"
1240
+ },
1241
+ {
1242
+ "id": "width",
1243
+ "title": "width.ts",
1244
+ "note": null,
1245
+ "language": "ts",
1246
+ "source": "import { Component } from '@angular/core';\nimport { SlCombobox, SlComboboxItem } from '@slotted/angular/combobox';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\n\nconst ZONES = [\n { id: 'pacific', label: '(UTC−08:00) Pacific Time — Los Angeles, Vancouver' },\n { id: 'mountain', label: '(UTC−07:00) Mountain Time — Denver, Calgary' },\n { id: 'central', label: '(UTC−06:00) Central Time — Chicago, Mexico City' },\n { id: 'eastern', label: '(UTC−05:00) Eastern Time — New York, Toronto' },\n { id: 'london', label: '(UTC+00:00) Greenwich Mean Time — London, Lisbon' },\n];\n\n@Component({\n selector: 'app-combobox-width',\n imports: [SlCombobox, SlComboboxItem, SlField, SlFieldLabel],\n template: `\n <div slField>\n <label slFieldLabel>Report time zone</label>\n <sl-combobox placeholder=\"Search zones\" [fullWidth]=\"false\" width=\"content\">\n @for (zone of zones; track zone.id) {\n <sl-combobox-item [value]=\"zone.id\" [label]=\"zone.label\" />\n }\n </sl-combobox>\n </div>\n `,\n})\nexport class ComboboxPopupWidth {\n protected readonly zones = ZONES;\n}\n",
1247
+ "verdict": "example"
1248
+ }
1249
+ ]
1250
+ }