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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,1274 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, input, booleanAttribute, computed, ViewEncapsulation, ChangeDetectionStrategy, Component, Directive, numberAttribute, output, ElementRef, DestroyRef, HostAttributeToken, contentChild, TemplateRef, signal, afterNextRender, forwardRef } from '@angular/core';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
+ import { createCollection, createRowMetrics, virtualWindow, nextSelection, offsetForIndex, moveIndex, shouldLoadMore } from '@slotted/core/collection';
6
+ import { createControllable } from '@slotted/core/state';
7
+ import { isPrintable, createTypeahead } from '@slotted/core/typeahead';
8
+ import { SlGlyph, SlIcon } from '@slotted/angular/icon';
9
+
10
+ /**
11
+ * `loop` is off because React Aria and Zag both default it off and only the
12
+ * Angular CDK defaults it on, and a list of two hundred options that jumps from
13
+ * the last to the first loses the reader. `selectOnFocus` is off because the
14
+ * pattern names the accessibility cost of the other answer.
15
+ */
16
+ const FALLBACK = {
17
+ columns: 1,
18
+ disallowEmptySelection: false,
19
+ disallowSelectAll: false,
20
+ focusMode: 'auto',
21
+ indicator: 'check',
22
+ loadMoreThreshold: 0,
23
+ loop: false,
24
+ navigateDisabled: false,
25
+ orientation: 'vertical',
26
+ overscan: 4,
27
+ pageSize: 10,
28
+ rows: 7,
29
+ selectOnFocus: false,
30
+ selectionBehavior: 'toggle',
31
+ selectionMode: 'single',
32
+ size: 'md',
33
+ typeahead: true,
34
+ typeaheadTimeout: 500,
35
+ variant: 'framed',
36
+ };
37
+ const LISTBOX_DEFAULTS = new InjectionToken('slotted listbox defaults', {
38
+ providedIn: 'root',
39
+ factory: () => FALLBACK,
40
+ });
41
+ /**
42
+ * An application decides once how its listboxes behave, rather than repeating
43
+ * nineteen inputs on every collection in a product. A listbox that states any
44
+ * of them itself still wins: an explicit input is never overridden by the
45
+ * token.
46
+ */
47
+ function provideListboxDefaults(defaults) {
48
+ return {
49
+ provide: LISTBOX_DEFAULTS,
50
+ useFactory: () => ({ ...FALLBACK, ...defaults }),
51
+ };
52
+ }
53
+ /** What a listbox behaves as here, before it states anything of its own. */
54
+ function injectListboxDefaults() {
55
+ return inject(LISTBOX_DEFAULTS);
56
+ }
57
+ /**
58
+ * `aria-activedescendant` names an option by its id, so every option needs one
59
+ * and the same string has to be produced on the server and in the browser. A
60
+ * counter held by the injector produces one; `Math.random` would not match for
61
+ * hydration.
62
+ */
63
+ class SlListboxIdFactory {
64
+ count = 0;
65
+ next() {
66
+ this.count += 1;
67
+ return `slotted-listbox-${this.count}`;
68
+ }
69
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIdFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
70
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIdFactory, providedIn: 'root' });
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIdFactory, decorators: [{
73
+ type: Injectable,
74
+ args: [{ providedIn: 'root' }]
75
+ }] });
76
+
77
+ /**
78
+ * What a part asks the listbox around it.
79
+ *
80
+ * It is an abstract class rather than an interface so it can be the injection
81
+ * token as well as the type, and it exists in a file of its own so the parts do
82
+ * not import the component that renders them: the component's own template
83
+ * applies the option directive, and a direct import each way is a cycle.
84
+ */
85
+ class SlListboxContext {
86
+ }
87
+
88
+ /** The selector the listbox reads its collection through, in DOM order. */
89
+ const OPTION_SELECTOR = "[data-part='option']";
90
+ /**
91
+ * One option, and the four facts the listbox reads back off it.
92
+ *
93
+ * The collection is read from the DOM rather than from a registry, which is
94
+ * what `menu` already does for its typeahead: DOM order is the reading order,
95
+ * it survives arbitrary nesting inside groups, and it cannot disagree with what
96
+ * the reader sees. The facts travel as data attributes, so nothing has to be
97
+ * registered, unregistered or ordered by the time it was created.
98
+ *
99
+ * `aria-disabled` and never the native attribute: the pattern needs a disabled
100
+ * option to keep its place in the set, and `navigateDisabled` is what decides
101
+ * whether the arrows land on it.
102
+ */
103
+ class SlListboxOption {
104
+ /** The key this option chooses. It is what the listbox value holds. */
105
+ value = input.required(/* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
107
+ /**
108
+ * What typeahead matches and what a reader hears. Defaults to the option's
109
+ * own text, which is wrong exactly when the option holds a mark, a badge or
110
+ * a number the reader would not type.
111
+ */
112
+ textValue = input(undefined, /* @ts-ignore */
113
+ ...(ngDevMode ? [{ debugName: "textValue" }] : /* istanbul ignore next */ []));
114
+ /** Unstated rather than `false`, so the option defers to the listbox. */
115
+ disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
116
+ /**
117
+ * Rendered outside the window that covers it, at its own place on the canvas.
118
+ * The listbox pins the active option and the range anchor; nothing else sets
119
+ * it, because an `aria-activedescendant` whose target has been recycled names
120
+ * an id that is not in the document.
121
+ */
122
+ pinned = input(false, { ...(ngDevMode ? { debugName: "pinned" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
123
+ listbox = inject(SlListboxContext);
124
+ id = computed(() => this.listbox.optionId(this.value()), /* @ts-ignore */
125
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
126
+ selected = computed(() => this.listbox.isSelected(this.value()), /* @ts-ignore */
127
+ ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
128
+ current = computed(() => this.listbox.isActive(this.value()), /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "current" }] : /* istanbul ignore next */ []));
130
+ resolvedDisabled = computed(() => (this.disabled() ?? false) === true || this.listbox.listboxDisabled() === true, /* @ts-ignore */
131
+ ...(ngDevMode ? [{ debugName: "resolvedDisabled" }] : /* istanbul ignore next */ []));
132
+ ariaSelected = computed(() => this.listbox.selection() === 'none' ? null : this.selected() ? 'true' : 'false', /* @ts-ignore */
133
+ ...(ngDevMode ? [{ debugName: "ariaSelected" }] : /* istanbul ignore next */ []));
134
+ setSize = computed(() => this.listbox.setSize(), /* @ts-ignore */
135
+ ...(ngDevMode ? [{ debugName: "setSize" }] : /* istanbul ignore next */ []));
136
+ posInSet = computed(() => this.listbox.posInSet(this.value()), /* @ts-ignore */
137
+ ...(ngDevMode ? [{ debugName: "posInSet" }] : /* istanbul ignore next */ []));
138
+ tabIndex = computed(() => this.listbox.optionTabIndex(this.value()), /* @ts-ignore */
139
+ ...(ngDevMode ? [{ debugName: "tabIndex" }] : /* istanbul ignore next */ []));
140
+ onClick(event) {
141
+ if (event.defaultPrevented)
142
+ return;
143
+ this.listbox.press(this.value(), event);
144
+ }
145
+ /**
146
+ * Only to stop the browser moving focus off the root. Under
147
+ * `aria-activedescendant` the root is the focused element, and a press that
148
+ * took focus to the option would leave the property pointing at something
149
+ * that is no longer the active element.
150
+ */
151
+ onPointerDown(event) {
152
+ if (event.defaultPrevented)
153
+ return;
154
+ event.preventDefault();
155
+ }
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxOption, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: SlListboxOption, isStandalone: true, selector: "[slListboxOption]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, textValue: { classPropertyName: "textValue", publicName: "textValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, pinned: { classPropertyName: "pinned", publicName: "pinned", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "option", "role": "option" }, listeners: { "click": "onClick($event)", "pointerdown": "onPointerDown($event)" }, properties: { "attr.id": "id()", "attr.data-key": "value()", "attr.data-text-value": "textValue() ?? null", "attr.data-selected": "selected() ? '' : null", "attr.data-current": "current() ? '' : null", "attr.data-disabled": "resolvedDisabled() ? '' : null", "attr.data-pinned": "pinned() ? '' : null", "attr.aria-selected": "ariaSelected()", "attr.aria-disabled": "resolvedDisabled() ? 'true' : null", "attr.aria-setsize": "setSize()", "attr.aria-posinset": "posInSet()", "attr.tabindex": "tabIndex()" } }, exportAs: ["slListboxOption"], ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
158
+ }
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxOption, decorators: [{
160
+ type: Component,
161
+ args: [{
162
+ selector: '[slListboxOption]',
163
+ standalone: true,
164
+ exportAs: 'slListboxOption',
165
+ template: '<ng-content />',
166
+ changeDetection: ChangeDetectionStrategy.OnPush,
167
+ encapsulation: ViewEncapsulation.None,
168
+ host: {
169
+ 'data-part': 'option',
170
+ role: 'option',
171
+ '[attr.id]': 'id()',
172
+ '[attr.data-key]': 'value()',
173
+ '[attr.data-text-value]': 'textValue() ?? null',
174
+ '[attr.data-selected]': "selected() ? '' : null",
175
+ '[attr.data-current]': "current() ? '' : null",
176
+ '[attr.data-disabled]': "resolvedDisabled() ? '' : null",
177
+ '[attr.data-pinned]': "pinned() ? '' : null",
178
+ '[attr.aria-selected]': 'ariaSelected()',
179
+ '[attr.aria-disabled]': "resolvedDisabled() ? 'true' : null",
180
+ '[attr.aria-setsize]': 'setSize()',
181
+ '[attr.aria-posinset]': 'posInSet()',
182
+ '[attr.tabindex]': 'tabIndex()',
183
+ '(click)': 'onClick($event)',
184
+ '(pointerdown)': 'onPointerDown($event)',
185
+ },
186
+ }]
187
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], textValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "textValue", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], pinned: [{ type: i0.Input, args: [{ isSignal: true, alias: "pinned", required: false }] }] } });
188
+ /**
189
+ * A group of options, named by its own label. The pattern requires the name —
190
+ * "each option group has an accessible name provided via aria-label or
191
+ * aria-labelledby" — and requires the group to hold at least one option, which
192
+ * is the consumer's to honour.
193
+ */
194
+ class SlListboxGroup {
195
+ /** The group's accessible name, rendered as its own label row. */
196
+ label = input(undefined, /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
198
+ /**
199
+ * The name without the row, which is what a windowed group takes when its
200
+ * label has scrolled out of the slice: the run of options is still a group
201
+ * and still has to be named.
202
+ */
203
+ ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'groupLabel' });
204
+ labelId = inject(SlListboxIdFactory).next();
205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlListboxGroup, isStandalone: true, selector: "[slListboxGroup]", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "groupLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-part": "group", "role": "group" }, properties: { "attr.aria-labelledby": "label() ? labelId : null", "attr.aria-label": "label() ? null : ariaLabel()" } }, exportAs: ["slListboxGroup"], ngImport: i0, template: `@if (label()) {
207
+ <div data-part="group-label" [attr.id]="labelId">{{ label() }}</div>
208
+ }
209
+ <ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxGroup, decorators: [{
212
+ type: Component,
213
+ args: [{
214
+ selector: '[slListboxGroup]',
215
+ standalone: true,
216
+ exportAs: 'slListboxGroup',
217
+ template: `@if (label()) {
218
+ <div data-part="group-label" [attr.id]="labelId">{{ label() }}</div>
219
+ }
220
+ <ng-content />`,
221
+ changeDetection: ChangeDetectionStrategy.OnPush,
222
+ encapsulation: ViewEncapsulation.None,
223
+ host: {
224
+ 'data-part': 'group',
225
+ role: 'group',
226
+ '[attr.aria-labelledby]': 'label() ? labelId : null',
227
+ '[attr.aria-label]': 'label() ? null : ariaLabel()',
228
+ },
229
+ }]
230
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupLabel", required: false }] }] } });
231
+ /**
232
+ * The mark that says an option is chosen. The listbox reserves its column
233
+ * whether or not the mark is painted, so a list does not shift sideways as one
234
+ * option is chosen; `indicator="none"` removes the element and the column with
235
+ * it. The tick is a `Glyph` sized by the column, and content the consumer
236
+ * wrote replaces it.
237
+ */
238
+ class SlListboxIndicator {
239
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
240
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxIndicator, isStandalone: true, selector: "[slListboxIndicator]", host: { attributes: { "data-part": "indicator", "aria-hidden": "true" } }, ngImport: i0, template: `<ng-content
241
+ ><span slIcon><svg slGlyph name="check"></svg></span
242
+ ></ng-content>`, isInline: true, dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
243
+ }
244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIndicator, decorators: [{
245
+ type: Component,
246
+ args: [{
247
+ selector: '[slListboxIndicator]',
248
+ standalone: true,
249
+ imports: [SlGlyph, SlIcon],
250
+ template: `<ng-content
251
+ ><span slIcon><svg slGlyph name="check"></svg></span
252
+ ></ng-content>`,
253
+ changeDetection: ChangeDetectionStrategy.OnPush,
254
+ encapsulation: ViewEncapsulation.None,
255
+ host: { 'data-part': 'indicator', 'aria-hidden': 'true' },
256
+ }]
257
+ }] });
258
+ /**
259
+ * The option's own artwork, in the same column the mark uses and never beside
260
+ * it: a `span[slIcon]` holding an `svg[slGlyph]`, or an element of the page's
261
+ * own. The column sizes and centres it; no stylesheet fills it.
262
+ */
263
+ class SlListboxIcon {
264
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIcon, deps: [], target: i0.ɵɵFactoryTarget.Directive });
265
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxIcon, isStandalone: true, selector: "[slListboxIcon]", host: { attributes: { "data-part": "icon", "aria-hidden": "true" } }, ngImport: i0 });
266
+ }
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxIcon, decorators: [{
268
+ type: Directive,
269
+ args: [{
270
+ selector: '[slListboxIcon]',
271
+ standalone: true,
272
+ host: { 'data-part': 'icon', 'aria-hidden': 'true' },
273
+ }]
274
+ }] });
275
+ /** The option's primary text, and the only one of the three columns that gives way. */
276
+ class SlListboxLabel {
277
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
278
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxLabel, isStandalone: true, selector: "[slListboxLabel]", host: { attributes: { "data-part": "label" } }, ngImport: i0 });
279
+ }
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxLabel, decorators: [{
281
+ type: Directive,
282
+ args: [{ selector: '[slListboxLabel]', standalone: true, host: { 'data-part': 'label' } }]
283
+ }] });
284
+ /** A second line under the label, for what the label cannot say on its own. */
285
+ class SlListboxDescription {
286
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxDescription, deps: [], target: i0.ɵɵFactoryTarget.Directive });
287
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxDescription, isStandalone: true, selector: "[slListboxDescription]", host: { attributes: { "data-part": "description" } }, ngImport: i0 });
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxDescription, decorators: [{
290
+ type: Directive,
291
+ args: [{
292
+ selector: '[slListboxDescription]',
293
+ standalone: true,
294
+ host: { 'data-part': 'description' },
295
+ }]
296
+ }] });
297
+ /**
298
+ * The value beside the name — a count, a price, a status word. `menu` calls the
299
+ * same column `shortcut`, because a menu's third column holds a key binding.
300
+ */
301
+ class SlListboxMeta {
302
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxMeta, deps: [], target: i0.ɵɵFactoryTarget.Directive });
303
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxMeta, isStandalone: true, selector: "[slListboxMeta]", host: { attributes: { "data-part": "meta" } }, ngImport: i0 });
304
+ }
305
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxMeta, decorators: [{
306
+ type: Directive,
307
+ args: [{ selector: '[slListboxMeta]', standalone: true, host: { 'data-part': 'meta' } }]
308
+ }] });
309
+ /**
310
+ * What the listbox says when it holds nothing. It lives inside the listbox for
311
+ * the reason `list` records: outside it a reader hears "listbox, zero items"
312
+ * and then nothing, and the words fall outside the box a framed listbox paints.
313
+ *
314
+ * It carries no role: `listbox` owns `option` and `group` and nothing else, so
315
+ * a message with a role of its own would be an owned element ARIA does not
316
+ * permit.
317
+ */
318
+ class SlListboxEmpty {
319
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxEmpty, deps: [], target: i0.ɵɵFactoryTarget.Directive });
320
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxEmpty, isStandalone: true, selector: "[slListboxEmpty]", host: { attributes: { "data-part": "empty" } }, ngImport: i0 });
321
+ }
322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxEmpty, decorators: [{
323
+ type: Directive,
324
+ args: [{ selector: '[slListboxEmpty]', standalone: true, host: { 'data-part': 'empty' } }]
325
+ }] });
326
+ /**
327
+ * The row at the end of a page that has not arrived. It is an `option` by role
328
+ * and disabled, because a listbox owns nothing else and the row is not a
329
+ * choice — which is also why it is not counted in `aria-setsize`.
330
+ */
331
+ class SlListboxLoader {
332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxLoader, deps: [], target: i0.ɵɵFactoryTarget.Directive });
333
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxLoader, isStandalone: true, selector: "[slListboxLoader]", host: { attributes: { "data-part": "loader", "role": "option", "aria-disabled": "true" } }, ngImport: i0 });
334
+ }
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxLoader, decorators: [{
336
+ type: Directive,
337
+ args: [{
338
+ selector: '[slListboxLoader]',
339
+ standalone: true,
340
+ host: { 'data-part': 'loader', role: 'option', 'aria-disabled': 'true' },
341
+ }]
342
+ }] });
343
+ /**
344
+ * The content of one option of a collection the listbox was handed. The family
345
+ * renders the option element around it, so the template says what an option
346
+ * holds and never how it is wired.
347
+ */
348
+ class SlListboxOptionContent {
349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxOptionContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
350
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: SlListboxOptionContent, isStandalone: true, selector: "[slListboxOptionContent]", ngImport: i0 });
351
+ }
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListboxOptionContent, decorators: [{
353
+ type: Directive,
354
+ args: [{ selector: '[slListboxOptionContent]', standalone: true }]
355
+ }] });
356
+
357
+ const EMPTY_SNAPSHOT = { keys: [], labels: [], disabled: [] };
358
+ function toKeys(value) {
359
+ if (value === undefined || value === null)
360
+ return [];
361
+ return typeof value === 'string' ? [value] : value;
362
+ }
363
+ function sameKeys(a, b) {
364
+ return a.length === b.length && a.every((key, index) => key === b[index]);
365
+ }
366
+ /**
367
+ * A list of options the reader chooses from, and the primitive `select`,
368
+ * `combobox` and the pickers are built on.
369
+ *
370
+ * ── Where the collection comes from ─────────────────────────────────────
371
+ *
372
+ * Two ways in, one shape out. Written in the template, the collection is read
373
+ * from the rendered options in DOM order — which is the reading order, survives
374
+ * nesting inside groups, and cannot disagree with what the reader sees. Handed
375
+ * `items` or `sections`, it is built by `@slotted/core/collection`, which is
376
+ * the only way a listbox can window a set larger than the DOM or report a set
377
+ * the DOM does not hold.
378
+ *
379
+ * ── Two mutable values ──────────────────────────────────────────────────
380
+ *
381
+ * The pattern is explicit that they are two: "DOM focus (the active element) is
382
+ * functionally distinct from the selected state". `value` is what the reader
383
+ * chose and `activeKey` is where the keyboard is, and a `select` reopening onto
384
+ * the option chosen last time needs the second and nothing else.
385
+ *
386
+ * ── The focus model is read, not asked for ──────────────────────────────
387
+ *
388
+ * `focusMode="auto"` answers `activedescendant` whenever the set is windowed,
389
+ * because a roving `tabindex` cannot survive its own element being recycled:
390
+ * the element carrying `tabindex="0"` is removed while it holds focus, and
391
+ * focus falls to the document body.
392
+ */
393
+ class SlListbox {
394
+ /* ── Inputs ───────────────────────────────────────────────────────── */
395
+ /** Present means the consumer owns the choice, for the life of the component. */
396
+ value = input(undefined, /* @ts-ignore */
397
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
398
+ /** What an uncontrolled listbox starts from, read once. */
399
+ defaultValue = input(undefined, /* @ts-ignore */
400
+ ...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
401
+ /** Present means the consumer owns which option the keyboard is on. */
402
+ activeKey = input(undefined, /* @ts-ignore */
403
+ ...(ngDevMode ? [{ debugName: "activeKey" }] : /* istanbul ignore next */ []));
404
+ defaultActiveKey = input(undefined, /* @ts-ignore */
405
+ ...(ngDevMode ? [{ debugName: "defaultActiveKey" }] : /* istanbul ignore next */ []));
406
+ selectionMode = input(undefined, /* @ts-ignore */
407
+ ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
408
+ selectionBehavior = input(undefined, /* @ts-ignore */
409
+ ...(ngDevMode ? [{ debugName: "selectionBehavior" }] : /* istanbul ignore next */ []));
410
+ size = input(undefined, /* @ts-ignore */
411
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
412
+ variant = input(undefined, /* @ts-ignore */
413
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
414
+ orientation = input(undefined, /* @ts-ignore */
415
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
416
+ focusMode = input(undefined, /* @ts-ignore */
417
+ ...(ngDevMode ? [{ debugName: "focusMode" }] : /* istanbul ignore next */ []));
418
+ indicator = input(undefined, /* @ts-ignore */
419
+ ...(ngDevMode ? [{ debugName: "indicator" }] : /* istanbul ignore next */ []));
420
+ loop = input(undefined, { ...(ngDevMode ? { debugName: "loop" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
421
+ typeahead = input(undefined, { ...(ngDevMode ? { debugName: "typeahead" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
422
+ selectOnFocus = input(undefined, { ...(ngDevMode ? { debugName: "selectOnFocus" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
423
+ navigateDisabled = input(undefined, { ...(ngDevMode ? { debugName: "navigateDisabled" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
424
+ disallowEmptySelection = input(undefined, { ...(ngDevMode ? { debugName: "disallowEmptySelection" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
425
+ disallowSelectAll = input(undefined, { ...(ngDevMode ? { debugName: "disallowSelectAll" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
426
+ rows = input(undefined, { ...(ngDevMode ? { debugName: "rows" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
427
+ columns = input(undefined, { ...(ngDevMode ? { debugName: "columns" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
428
+ pageSize = input(undefined, { ...(ngDevMode ? { debugName: "pageSize" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
429
+ typeaheadTimeout = input(undefined, { ...(ngDevMode ? { debugName: "typeaheadTimeout" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
430
+ /** Unstated rather than `false`, so the listbox defers to the form around it. */
431
+ disabled = input(undefined, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
432
+ readOnly = input(undefined, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
433
+ required = input(undefined, { ...(ngDevMode ? { debugName: "required" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
434
+ invalid = input(undefined, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : booleanAttribute(state)) });
435
+ loading = input(false, { ...(ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
436
+ /** The whole collection, when the listbox is to window it or to report a set larger than the DOM. */
437
+ items = input(undefined, /* @ts-ignore */
438
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
439
+ /** A grouped collection. Mutually exclusive with `items`. */
440
+ sections = input(undefined, /* @ts-ignore */
441
+ ...(ngDevMode ? [{ debugName: "sections" }] : /* istanbul ignore next */ []));
442
+ getKey = input(undefined, /* @ts-ignore */
443
+ ...(ngDevMode ? [{ debugName: "getKey" }] : /* istanbul ignore next */ []));
444
+ getLabel = input(undefined, /* @ts-ignore */
445
+ ...(ngDevMode ? [{ debugName: "getLabel" }] : /* istanbul ignore next */ []));
446
+ isItemDisabled = input(undefined, /* @ts-ignore */
447
+ ...(ngDevMode ? [{ debugName: "isItemDisabled" }] : /* istanbul ignore next */ []));
448
+ /** How large the whole set is when only part of it has been loaded. */
449
+ totalCount = input(undefined, { ...(ngDevMode ? { debugName: "totalCount" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
450
+ /** Renders only the options the viewport covers, plus the pinned ones. */
451
+ virtual = input(false, { ...(ngDevMode ? { debugName: "virtual" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
452
+ /** The block size of one option. Required whenever `virtual` is set. */
453
+ itemSize = input(undefined, { ...(ngDevMode ? { debugName: "itemSize" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
454
+ /** The block size of a group label row. Defaults to `itemSize`. */
455
+ sectionSize = input(undefined, { ...(ngDevMode ? { debugName: "sectionSize" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
456
+ overscan = input(undefined, { ...(ngDevMode ? { debugName: "overscan" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
457
+ hasMore = input(false, { ...(ngDevMode ? { debugName: "hasMore" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
458
+ loadMoreThreshold = input(undefined, { ...(ngDevMode ? { debugName: "loadMoreThreshold" } : /* istanbul ignore next */ {}), transform: (state) => (state === undefined ? undefined : numberAttribute(state)) });
459
+ /* ── Outputs ──────────────────────────────────────────────────────── */
460
+ /** Emitted before the selection moves, with the request that carries the reason. */
461
+ valueChange = output();
462
+ /** Emitted before the option the keyboard is on moves. */
463
+ activeKeyChange = output();
464
+ /** Asked when the rendered window reaches the end of what has been loaded. */
465
+ loadMore = output();
466
+ /* ── Wiring ───────────────────────────────────────────────────────── */
467
+ defaults = injectListboxDefaults();
468
+ host = inject(ElementRef);
469
+ idPrefix = inject(SlListboxIdFactory).next();
470
+ destroyRef = inject(DestroyRef);
471
+ /** A role the consumer wrote is never replaced by the family's. */
472
+ writtenRole = inject(new HostAttributeToken('role'), { optional: true });
473
+ /* The consumer's `<ng-template slListboxOptionContent let-item>`: what one
474
+ option of a handed collection holds, so the template says what an option is
475
+ made of and never how it is wired. */
476
+ optionContent = contentChild(SlListboxOptionContent, { ...(ngDevMode ? { debugName: "optionContent" } : /* istanbul ignore next */ {}), read: TemplateRef });
477
+ ownKeys = signal([], /* @ts-ignore */
478
+ ...(ngDevMode ? [{ debugName: "ownKeys" }] : /* istanbul ignore next */ []));
479
+ ownActive = signal(null, /* @ts-ignore */
480
+ ...(ngDevMode ? [{ debugName: "ownActive" }] : /* istanbul ignore next */ []));
481
+ formKeys = signal(null, /* @ts-ignore */
482
+ ...(ngDevMode ? [{ debugName: "formKeys" }] : /* istanbul ignore next */ []));
483
+ formDisabled = signal(false, /* @ts-ignore */
484
+ ...(ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []));
485
+ anchor = signal(undefined, /* @ts-ignore */
486
+ ...(ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []));
487
+ typeaheadHandle = null;
488
+ onChangeFn = () => { };
489
+ onTouchedFn = () => { };
490
+ viewportSize = signal(0, /* @ts-ignore */
491
+ ...(ngDevMode ? [{ debugName: "viewportSize" }] : /* istanbul ignore next */ []));
492
+ scrollOffset = signal(0, /* @ts-ignore */
493
+ ...(ngDevMode ? [{ debugName: "scrollOffset" }] : /* istanbul ignore next */ []));
494
+ constructor() {
495
+ afterNextRender(() => {
496
+ const element = this.host.nativeElement;
497
+ this.readViewport();
498
+ /* A `ResizeObserver` where there is one, and the viewport's own resize
499
+ where there is not: a test environment and an old browser both answer
500
+ the second, and a window that never re-measured would render the first
501
+ frame's slice forever. */
502
+ if (typeof ResizeObserver === 'undefined') {
503
+ const view = element.ownerDocument.defaultView;
504
+ const read = () => this.readViewport();
505
+ view?.addEventListener('resize', read);
506
+ this.destroyRef.onDestroy(() => view?.removeEventListener('resize', read));
507
+ return;
508
+ }
509
+ const observer = new ResizeObserver(() => this.readViewport());
510
+ observer.observe(element);
511
+ this.destroyRef.onDestroy(() => observer.disconnect());
512
+ });
513
+ this.destroyRef.onDestroy(() => this.typeaheadHandle?.destroy());
514
+ }
515
+ /**
516
+ * The uncontrolled start, read once. It is read here rather than in the
517
+ * constructor because that is where Angular has finished writing the inputs,
518
+ * and a value read a moment earlier is the input's declared default rather
519
+ * than the consumer's.
520
+ */
521
+ ngOnInit() {
522
+ this.ownKeys.set(toKeys(this.defaultValue()));
523
+ this.ownActive.set(this.defaultActiveKey() ?? null);
524
+ }
525
+ /* ── Resolved axes ────────────────────────────────────────────────── */
526
+ resolvedSize = computed(() => this.size() ?? this.defaults.size, /* @ts-ignore */
527
+ ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
528
+ resolvedVariant = computed(() => this.variant() ?? this.defaults.variant, /* @ts-ignore */
529
+ ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
530
+ resolvedOrientation = computed(() => this.orientation() ?? this.defaults.orientation, /* @ts-ignore */
531
+ ...(ngDevMode ? [{ debugName: "resolvedOrientation" }] : /* istanbul ignore next */ []));
532
+ indicatorMode = computed(() => this.indicator() ?? this.defaults.indicator, /* @ts-ignore */
533
+ ...(ngDevMode ? [{ debugName: "indicatorMode" }] : /* istanbul ignore next */ []));
534
+ selection = computed(() => this.selectionMode() ?? this.defaults.selectionMode, /* @ts-ignore */
535
+ ...(ngDevMode ? [{ debugName: "selection" }] : /* istanbul ignore next */ []));
536
+ resolvedBehavior = computed(() => this.selectionBehavior() ?? this.defaults.selectionBehavior, /* @ts-ignore */
537
+ ...(ngDevMode ? [{ debugName: "resolvedBehavior" }] : /* istanbul ignore next */ []));
538
+ resolvedRows = computed(() => this.rows() ?? this.defaults.rows, /* @ts-ignore */
539
+ ...(ngDevMode ? [{ debugName: "resolvedRows" }] : /* istanbul ignore next */ []));
540
+ resolvedColumns = computed(() => Math.max(Math.floor(this.columns() ?? this.defaults.columns), 1), /* @ts-ignore */
541
+ ...(ngDevMode ? [{ debugName: "resolvedColumns" }] : /* istanbul ignore next */ []));
542
+ resolvedReadOnly = computed(() => (this.readOnly() ?? false) === true, /* @ts-ignore */
543
+ ...(ngDevMode ? [{ debugName: "resolvedReadOnly" }] : /* istanbul ignore next */ []));
544
+ resolvedRequired = computed(() => (this.required() ?? false) === true, /* @ts-ignore */
545
+ ...(ngDevMode ? [{ debugName: "resolvedRequired" }] : /* istanbul ignore next */ []));
546
+ resolvedInvalid = computed(() => (this.invalid() ?? false) === true, /* @ts-ignore */
547
+ ...(ngDevMode ? [{ debugName: "resolvedInvalid" }] : /* istanbul ignore next */ []));
548
+ listboxDisabled = computed(() => (this.disabled() ?? this.formDisabled()) === true, /* @ts-ignore */
549
+ ...(ngDevMode ? [{ debugName: "listboxDisabled" }] : /* istanbul ignore next */ []));
550
+ windowed = computed(() => this.virtual() && (this.itemSize() ?? 0) > 0, /* @ts-ignore */
551
+ ...(ngDevMode ? [{ debugName: "windowed" }] : /* istanbul ignore next */ []));
552
+ mode = computed(() => {
553
+ const asked = this.focusMode() ?? this.defaults.focusMode;
554
+ return asked === 'auto' ? (this.windowed() ? 'activedescendant' : 'roving') : asked;
555
+ }, /* @ts-ignore */
556
+ ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
557
+ /* ── State ────────────────────────────────────────────────────────── */
558
+ selectedKeys = computed(() => {
559
+ const controlled = this.value();
560
+ if (controlled !== undefined)
561
+ return toKeys(controlled);
562
+ return this.formKeys() ?? this.ownKeys();
563
+ }, /* @ts-ignore */
564
+ ...(ngDevMode ? [{ debugName: "selectedKeys" }] : /* istanbul ignore next */ []));
565
+ active = computed(() => {
566
+ const controlled = this.activeKey();
567
+ return controlled === undefined ? this.ownActive() : controlled;
568
+ }, /* @ts-ignore */
569
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
570
+ activeDescendant = computed(() => {
571
+ const key = this.active();
572
+ return this.mode() === 'activedescendant' && key !== null ? this.optionId(key) : null;
573
+ }, /* @ts-ignore */
574
+ ...(ngDevMode ? [{ debugName: "activeDescendant" }] : /* istanbul ignore next */ []));
575
+ rootTabIndex = computed(() => this.mode() === 'activedescendant' || this.active() === null ? 0 : -1, /* @ts-ignore */
576
+ ...(ngDevMode ? [{ debugName: "rootTabIndex" }] : /* istanbul ignore next */ []));
577
+ /* ── The collection ───────────────────────────────────────────────── */
578
+ collection = computed(() => {
579
+ const items = this.items();
580
+ const sections = this.sections();
581
+ if (items === undefined && sections === undefined)
582
+ return undefined;
583
+ const key = this.getKey();
584
+ const label = this.getLabel();
585
+ const disabled = this.isItemDisabled();
586
+ const total = this.totalCount();
587
+ return createCollection({
588
+ ...(items === undefined ? {} : { items }),
589
+ ...(sections === undefined ? {} : { sections }),
590
+ getKey: key === undefined ? (_item, index) => String(index) : (item) => key(item),
591
+ ...(label === undefined ? {} : { getLabel: label }),
592
+ ...(disabled === undefined ? {} : { isDisabled: disabled }),
593
+ ...(total === undefined ? {} : { totalCount: total }),
594
+ });
595
+ }, /* @ts-ignore */
596
+ ...(ngDevMode ? [{ debugName: "collection" }] : /* istanbul ignore next */ []));
597
+ rowMetrics = computed(() => {
598
+ const held = this.collection();
599
+ if (!this.windowed() || held === undefined || this.sections() === undefined)
600
+ return undefined;
601
+ const option = this.itemSize() ?? 0;
602
+ const label = this.sectionSize() ?? option;
603
+ return createRowMetrics(held.rows.map((row) => (row.kind === 'option' ? option : label)));
604
+ }, /* @ts-ignore */
605
+ ...(ngDevMode ? [{ debugName: "rowMetrics" }] : /* istanbul ignore next */ []));
606
+ slice = computed(() => {
607
+ const held = this.collection();
608
+ const metrics = this.rowMetrics();
609
+ const activeRow = this.active() === null ? -1 : (held?.optionFor(this.active())?.row ?? -1);
610
+ const anchorKey = this.anchor();
611
+ const anchorRow = anchorKey === undefined ? -1 : (held?.optionFor(anchorKey)?.row ?? -1);
612
+ return virtualWindow({
613
+ itemCount: held?.rows.length ?? 0,
614
+ ...(metrics === undefined ? { itemSize: this.itemSize() ?? 0 } : { metrics }),
615
+ overscan: this.overscan() ?? this.defaults.overscan,
616
+ scrollOffset: this.scrollOffset(),
617
+ viewportSize: this.viewportSize(),
618
+ pinned: [activeRow, anchorRow],
619
+ });
620
+ }, /* @ts-ignore */
621
+ ...(ngDevMode ? [{ debugName: "slice" }] : /* istanbul ignore next */ []));
622
+ /**
623
+ * What the template walks. A windowed slice starts and ends in the middle of
624
+ * the collection, so a group is emitted per contiguous run of rows belonging
625
+ * to one section rather than per section — and a run whose label row is
626
+ * outside the window is named by `aria-label` instead. Each run is still a
627
+ * group carrying the section's name, which is what the pattern asks of a
628
+ * grouped option.
629
+ */
630
+ plan = computed(() => {
631
+ const held = this.collection();
632
+ if (held === undefined)
633
+ return [];
634
+ const metrics = this.rowMetrics();
635
+ const size = this.itemSize() ?? 0;
636
+ const offsetOf = (row) => metrics?.offsetOf(row) ?? row * size;
637
+ const toOption = (index, pinned) => {
638
+ const option = held.options[index];
639
+ if (option === undefined)
640
+ return null;
641
+ return {
642
+ kind: 'option',
643
+ id: `${option.key}-${pinned ? 'pinned' : 'row'}`,
644
+ key: option.key,
645
+ item: option.item,
646
+ label: option.label,
647
+ disabled: option.disabled,
648
+ offset: pinned ? offsetOf(option.row) : null,
649
+ };
650
+ };
651
+ const window_ = this.slice();
652
+ const rows = this.windowed()
653
+ ? held.rows.slice(window_.startIndex, window_.endIndex)
654
+ : held.rows;
655
+ const entries = [];
656
+ if (this.windowed()) {
657
+ for (const row of [...window_.pinnedBefore, ...window_.pinnedAfter]) {
658
+ const held_ = held.rows[row];
659
+ if (held_?.kind !== 'option')
660
+ continue;
661
+ const option = toOption(held_.option.index, true);
662
+ if (option !== null)
663
+ entries.push(option);
664
+ }
665
+ }
666
+ const group = (sectionKey, label, showLabel) => {
667
+ const made = {
668
+ kind: 'group',
669
+ id: `group-${sectionKey}-${window_.startIndex}`,
670
+ sectionKey,
671
+ label,
672
+ showLabel,
673
+ options: [],
674
+ };
675
+ entries.push(made);
676
+ return made;
677
+ };
678
+ let run;
679
+ for (const row of rows) {
680
+ if (row.kind === 'section-label') {
681
+ run = group(row.section.key, row.section.label ?? '', true);
682
+ continue;
683
+ }
684
+ const option = toOption(row.option.index, false);
685
+ if (option === null)
686
+ continue;
687
+ const section = row.option.section;
688
+ if (section === undefined) {
689
+ run = undefined;
690
+ entries.push(option);
691
+ continue;
692
+ }
693
+ if (run === undefined || run.sectionKey !== section) {
694
+ run = group(section, held.sections.find((s) => s.key === section)?.label ?? '', false);
695
+ }
696
+ run.options.push(option);
697
+ }
698
+ return entries;
699
+ }, /* @ts-ignore */
700
+ ...(ngDevMode ? [{ debugName: "plan" }] : /* istanbul ignore next */ []));
701
+ /**
702
+ * The collection as the reducers want it, read at the moment of a key press
703
+ * rather than held in state: an option added or removed between two presses
704
+ * is already accounted for, and nothing has to be registered.
705
+ */
706
+ snapshot() {
707
+ const held = this.collection();
708
+ if (held !== undefined) {
709
+ return {
710
+ keys: held.keys,
711
+ labels: held.labels,
712
+ disabled: held.options.map((option) => option.disabled),
713
+ };
714
+ }
715
+ const nodes = [...this.host.nativeElement.querySelectorAll(OPTION_SELECTOR)];
716
+ if (nodes.length === 0)
717
+ return EMPTY_SNAPSHOT;
718
+ return {
719
+ keys: nodes.map((node) => node.dataset['key'] ?? ''),
720
+ labels: nodes.map((node) => node.dataset['textValue'] ?? node.textContent?.trim() ?? ''),
721
+ disabled: nodes.map((node) => node.getAttribute('aria-disabled') === 'true'),
722
+ };
723
+ }
724
+ /* ── What the parts are told ──────────────────────────────────────── */
725
+ isSelected(key) {
726
+ return this.selectedKeys().includes(key);
727
+ }
728
+ isActive(key) {
729
+ return this.active() === key;
730
+ }
731
+ optionId(key) {
732
+ return `${this.idPrefix}-${key}`;
733
+ }
734
+ optionTabIndex(key) {
735
+ if (this.mode() !== 'roving')
736
+ return null;
737
+ return this.active() === key ? 0 : -1;
738
+ }
739
+ setSize() {
740
+ return this.collection()?.setSize ?? null;
741
+ }
742
+ posInSet(key) {
743
+ const position = this.collection()?.posInSet(key);
744
+ return position === undefined || position === -1 ? null : position;
745
+ }
746
+ press(key, event) {
747
+ if (this.listboxDisabled())
748
+ return;
749
+ const snap = this.snapshot();
750
+ const index = snap.keys.indexOf(key);
751
+ const optionDisabled = index !== -1 && snap.disabled[index] === true;
752
+ const navigateDisabled = this.navigateDisabled() ?? this.defaults.navigateDisabled;
753
+ if (this.mode() === 'roving')
754
+ this.focusOption(key);
755
+ else
756
+ this.host.nativeElement.focus();
757
+ if (optionDisabled && !navigateDisabled)
758
+ return;
759
+ this.requestActive(key, 'pointer', event);
760
+ if (optionDisabled)
761
+ return;
762
+ if (event.shiftKey)
763
+ this.applySelection('range', key, 'pointer', event);
764
+ /* Control or Command adds one, whichever model is in force: it is the press
765
+ that says "this one as well", and it means that in both. */
766
+ else if (event.ctrlKey || event.metaKey) {
767
+ this.applySelection('toggle', key, 'pointer', event, 'toggle');
768
+ }
769
+ else
770
+ this.applySelection('toggle', key, 'pointer', event);
771
+ }
772
+ /* ── Moving and choosing ──────────────────────────────────────────── */
773
+ focusOption(key) {
774
+ this.host.nativeElement
775
+ .querySelector(`${OPTION_SELECTOR}[data-key="${CSS.escape(key)}"]`)
776
+ ?.focus();
777
+ }
778
+ requestActive(key, reason, source) {
779
+ let cancelled = false;
780
+ const controlled = this.activeKey();
781
+ const state = createControllable({
782
+ ...(controlled === undefined ? {} : { controlled }),
783
+ initial: this.active(),
784
+ onRequest: (request) => {
785
+ this.activeKeyChange.emit(request);
786
+ cancelled = request.cancelled;
787
+ },
788
+ });
789
+ const moved = state.request(key, reason, source);
790
+ if (cancelled)
791
+ return;
792
+ if (moved)
793
+ this.ownActive.set(key);
794
+ }
795
+ applySelection(action, key, reason, source, behavior = this.resolvedBehavior()) {
796
+ if (this.selection() === 'none' || this.resolvedReadOnly())
797
+ return;
798
+ const snap = this.snapshot();
799
+ const selected = this.selectedKeys();
800
+ const result = nextSelection({
801
+ action,
802
+ behavior,
803
+ mode: this.selection(),
804
+ selected,
805
+ keys: snap.keys,
806
+ ...(key === undefined ? {} : { key }),
807
+ ...(this.anchor() === undefined ? {} : { anchor: this.anchor() }),
808
+ disabled: (candidate) => snap.disabled[snap.keys.indexOf(candidate)] === true,
809
+ disallowEmpty: this.disallowEmptySelection() ?? this.defaults.disallowEmptySelection,
810
+ disallowSelectAll: this.disallowSelectAll() ?? this.defaults.disallowSelectAll,
811
+ });
812
+ this.anchor.set(result.anchor);
813
+ if (!result.changed)
814
+ return;
815
+ let cancelled = false;
816
+ const controlled = this.value();
817
+ const outward = (keys) => this.selection() === 'multiple' ? keys : (keys[0] ?? null);
818
+ const state = createControllable({
819
+ ...(controlled === undefined ? {} : { controlled: toKeys(controlled) }),
820
+ initial: selected,
821
+ equals: sameKeys,
822
+ onRequest: (request) => {
823
+ /* The request the consumer sees carries the shape the consumer gave:
824
+ one key in single selection, the set in multiple. The reducer works in
825
+ arrays throughout, and this is the one place the two meet. */
826
+ this.valueChange.emit({
827
+ value: outward(request.value),
828
+ previous: outward(request.previous),
829
+ reason: request.reason,
830
+ source: request.source,
831
+ get cancelled() {
832
+ return request.cancelled;
833
+ },
834
+ cancel: () => request.cancel(),
835
+ });
836
+ cancelled = request.cancelled;
837
+ },
838
+ });
839
+ const moved = state.request(result.selected, reason, source);
840
+ if (cancelled)
841
+ return;
842
+ if (moved) {
843
+ this.ownKeys.set(result.selected);
844
+ this.formKeys.set(result.selected);
845
+ }
846
+ this.onChangeFn(outward(result.selected));
847
+ }
848
+ moveActive(index, source, keys) {
849
+ const key = keys[index];
850
+ if (key === undefined)
851
+ return;
852
+ this.requestActive(key, 'keyboard', source);
853
+ this.revealIndex(index, 'nearest');
854
+ if (this.mode() === 'roving')
855
+ this.focusOption(key);
856
+ }
857
+ revealIndex(index, align) {
858
+ const element = this.host.nativeElement;
859
+ if (index < 0)
860
+ return;
861
+ if (!this.windowed()) {
862
+ const key = this.snapshot().keys[index];
863
+ if (key === undefined)
864
+ return;
865
+ element
866
+ .querySelector(`${OPTION_SELECTOR}[data-key="${CSS.escape(key)}"]`)
867
+ /* Optional-called: `scrollIntoView` is absent in a test environment. */
868
+ ?.scrollIntoView?.({ block: align === 'nearest' ? 'nearest' : 'center' });
869
+ return;
870
+ }
871
+ const held = this.collection();
872
+ const metrics = this.rowMetrics();
873
+ element.scrollTop = offsetForIndex({
874
+ index: held?.options[index]?.row ?? index,
875
+ itemCount: held?.rows.length ?? 0,
876
+ ...(metrics === undefined ? { itemSize: this.itemSize() ?? 0 } : { metrics }),
877
+ scrollOffset: element.scrollTop,
878
+ viewportSize: element.clientHeight,
879
+ align,
880
+ });
881
+ }
882
+ /* ── The keyboard ─────────────────────────────────────────────────── */
883
+ handleKeyDown(event) {
884
+ if (event.defaultPrevented || this.listboxDisabled())
885
+ return;
886
+ const snap = this.snapshot();
887
+ if (snap.keys.length === 0)
888
+ return;
889
+ const navigateDisabled = this.navigateDisabled() ?? this.defaults.navigateDisabled;
890
+ const enabled = snap.keys.map((_, index) => navigateDisabled || snap.disabled[index] !== true);
891
+ const active = this.active();
892
+ const from = active === null ? -1 : snap.keys.indexOf(active);
893
+ const modifier = event.ctrlKey || event.metaKey;
894
+ const element = this.host.nativeElement;
895
+ const rtl = element.ownerDocument.defaultView?.getComputedStyle(element).direction === 'rtl';
896
+ const loop = this.loop() ?? this.defaults.loop;
897
+ const columns = this.resolvedColumns();
898
+ const pageSize = this.pageSize() ?? this.defaults.pageSize;
899
+ const selectOnFocus = this.selectOnFocus() ?? this.defaults.selectOnFocus;
900
+ /**
901
+ * A row in a two-dimensional arrangement is `pageDown` with the page set to
902
+ * `columns`: the engine's page arithmetic already clamps rather than
903
+ * wrapping and lands on the nearest enabled option inward, which is exactly
904
+ * what a row step needs.
905
+ */
906
+ const step = (intent, page) => {
907
+ const index = moveIndex({
908
+ enabled,
909
+ from,
910
+ intent,
911
+ loop,
912
+ ...(page === undefined ? {} : { page }),
913
+ });
914
+ if (index === -1 || index === from)
915
+ return;
916
+ event.preventDefault();
917
+ this.moveActive(index, event, snap.keys);
918
+ const key = snap.keys[index];
919
+ if (key === undefined || snap.disabled[index] === true)
920
+ return;
921
+ if (event.shiftKey && this.selection() === 'multiple') {
922
+ this.applySelection('toggle', key, 'keyboard', event, 'toggle');
923
+ }
924
+ else if (!modifier && selectOnFocus) {
925
+ this.applySelection('replace', key, 'keyboard', event);
926
+ }
927
+ };
928
+ const edge = (intent) => {
929
+ const index = moveIndex({ enabled, from, intent });
930
+ if (index === -1)
931
+ return;
932
+ event.preventDefault();
933
+ const key = snap.keys[index];
934
+ this.moveActive(index, event, snap.keys);
935
+ if (modifier && event.shiftKey && key !== undefined) {
936
+ this.applySelection('range', key, 'keyboard', event, 'toggle');
937
+ }
938
+ else if (!modifier && selectOnFocus && key !== undefined) {
939
+ this.applySelection('replace', key, 'keyboard', event);
940
+ }
941
+ };
942
+ const inlineNext = rtl ? 'ArrowLeft' : 'ArrowRight';
943
+ const inlinePrevious = rtl ? 'ArrowRight' : 'ArrowLeft';
944
+ const horizontal = this.resolvedOrientation() === 'horizontal';
945
+ const grid = columns > 1;
946
+ if (event.key === 'ArrowDown' && !horizontal) {
947
+ return grid ? step('pageDown', columns) : step('next');
948
+ }
949
+ if (event.key === 'ArrowUp' && !horizontal) {
950
+ return grid ? step('pageUp', columns) : step('previous');
951
+ }
952
+ if (event.key === inlineNext && (horizontal || grid))
953
+ return step('next');
954
+ if (event.key === inlinePrevious && (horizontal || grid))
955
+ return step('previous');
956
+ if (event.key === 'Home')
957
+ return edge('first');
958
+ if (event.key === 'End')
959
+ return edge('last');
960
+ if (event.key === 'PageDown')
961
+ return step('pageDown', pageSize);
962
+ if (event.key === 'PageUp')
963
+ return step('pageUp', pageSize);
964
+ const sequenceOpen = (this.typeaheadHandle?.query.length ?? 0) > 0;
965
+ if ((event.key === ' ' && !sequenceOpen) || event.key === 'Enter') {
966
+ if (active === null)
967
+ return;
968
+ event.preventDefault();
969
+ if (event.shiftKey && this.selection() === 'multiple') {
970
+ this.applySelection('range', active, 'keyboard', event, 'toggle');
971
+ }
972
+ else {
973
+ /* Control+Space toggles even under the alternative model, where a plain
974
+ Space replaces. It is the one key that says "this one as well". */
975
+ this.applySelection('toggle', active, 'keyboard', event, modifier ? 'toggle' : this.resolvedBehavior());
976
+ }
977
+ return;
978
+ }
979
+ if (modifier && (event.key === 'a' || event.key === 'A')) {
980
+ event.preventDefault();
981
+ this.applySelection('all', undefined, 'select', event);
982
+ return;
983
+ }
984
+ const typeahead = this.typeahead() ?? this.defaults.typeahead;
985
+ if (typeahead && !modifier && isPrintable(event.key, sequenceOpen)) {
986
+ this.typeaheadHandle ??= createTypeahead({
987
+ timeout: this.typeaheadTimeout() ?? this.defaults.typeaheadTimeout,
988
+ });
989
+ const index = this.typeaheadHandle.match(event.key, snap.labels, from);
990
+ if (index === -1)
991
+ return;
992
+ event.preventDefault();
993
+ this.moveActive(index, event, snap.keys);
994
+ const key = snap.keys[index];
995
+ if (selectOnFocus && key !== undefined) {
996
+ this.applySelection('replace', key, 'keyboard', event);
997
+ }
998
+ }
999
+ }
1000
+ handleFocusIn(event) {
1001
+ if (this.listboxDisabled())
1002
+ return;
1003
+ if (event.target !== this.host.nativeElement || this.active() !== null)
1004
+ return;
1005
+ /* The pattern: focus lands on the selected option when there is one, and on
1006
+ the first option otherwise, in both single and multiple selection. */
1007
+ const snap = this.snapshot();
1008
+ const navigateDisabled = this.navigateDisabled() ?? this.defaults.navigateDisabled;
1009
+ const enabled = snap.keys.map((_, index) => navigateDisabled || snap.disabled[index] !== true);
1010
+ const selected = this.selectedKeys();
1011
+ const chosen = selected.length > 0 ? snap.keys.indexOf(selected[0]) : -1;
1012
+ const index = chosen !== -1 && enabled[chosen] === true
1013
+ ? chosen
1014
+ : moveIndex({ enabled, from: -1, intent: 'first' });
1015
+ if (index !== -1)
1016
+ this.moveActive(index, event, snap.keys);
1017
+ }
1018
+ handleFocusOut(event) {
1019
+ const next = event.relatedTarget;
1020
+ if (next !== null && this.host.nativeElement.contains(next))
1021
+ return;
1022
+ /**
1023
+ * Only when focus has actually left. Under the roving model the family
1024
+ * moves focus from option to option on every key, and each of those moves
1025
+ * raises a `focusout` on the root: resetting on all of them cleared the
1026
+ * typeahead buffer after every character, so a sequence longer than one
1027
+ * letter could never be typed.
1028
+ */
1029
+ this.typeaheadHandle?.reset();
1030
+ this.onTouchedFn();
1031
+ }
1032
+ readViewport() {
1033
+ const element = this.host.nativeElement;
1034
+ this.viewportSize.set(element.clientHeight);
1035
+ this.scrollOffset.set(element.scrollTop);
1036
+ if (!this.windowed())
1037
+ return;
1038
+ this.askForMore();
1039
+ }
1040
+ askForMore() {
1041
+ const held = this.collection();
1042
+ if (held === undefined)
1043
+ return;
1044
+ if (shouldLoadMore({
1045
+ endIndex: this.windowed() ? this.slice().endIndex : held.rows.length,
1046
+ loadedCount: held.rows.length,
1047
+ threshold: this.loadMoreThreshold() ?? this.defaults.loadMoreThreshold,
1048
+ hasMore: this.hasMore(),
1049
+ loading: this.loading(),
1050
+ })) {
1051
+ this.loadMore.emit();
1052
+ }
1053
+ }
1054
+ /* ── The imperative actions ───────────────────────────────────────── */
1055
+ /** Moves real focus into the listbox, under either focus model. */
1056
+ focus() {
1057
+ const active = this.active();
1058
+ if (this.mode() === 'activedescendant' || active === null) {
1059
+ this.host.nativeElement.focus();
1060
+ return;
1061
+ }
1062
+ this.focusOption(active);
1063
+ }
1064
+ /** Reveals an option, whether or not it is currently rendered. */
1065
+ scrollToKey(key, align = 'nearest') {
1066
+ const index = this.snapshot().keys.indexOf(key);
1067
+ if (index !== -1)
1068
+ this.revealIndex(index, align);
1069
+ }
1070
+ /** Which option the keyboard is on, or `null`. */
1071
+ getActiveKey() {
1072
+ return this.active();
1073
+ }
1074
+ /* ── Forms ────────────────────────────────────────────────────────── */
1075
+ writeValue(value) {
1076
+ this.formKeys.set(toKeys(value));
1077
+ }
1078
+ registerOnChange(fn) {
1079
+ this.onChangeFn = fn;
1080
+ }
1081
+ registerOnTouched(fn) {
1082
+ this.onTouchedFn = fn;
1083
+ }
1084
+ setDisabledState(isDisabled) {
1085
+ this.formDisabled.set(isDisabled);
1086
+ }
1087
+ /**
1088
+ * The listbox owns validity over the set, which no single option can see:
1089
+ * "choose one" is a fact about the collection and not about any one option.
1090
+ */
1091
+ validate(control) {
1092
+ if (!this.resolvedRequired())
1093
+ return null;
1094
+ const value = control.value;
1095
+ return toKeys(value).length === 0 ? { required: true } : null;
1096
+ }
1097
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
1098
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlListbox, isStandalone: true, selector: "[slListbox]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, activeKey: { classPropertyName: "activeKey", publicName: "activeKey", isSignal: true, isRequired: false, transformFunction: null }, defaultActiveKey: { classPropertyName: "defaultActiveKey", publicName: "defaultActiveKey", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: "selectionBehavior", publicName: "selectionBehavior", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, focusMode: { classPropertyName: "focusMode", publicName: "focusMode", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, loop: { classPropertyName: "loop", publicName: "loop", isSignal: true, isRequired: false, transformFunction: null }, typeahead: { classPropertyName: "typeahead", publicName: "typeahead", isSignal: true, isRequired: false, transformFunction: null }, selectOnFocus: { classPropertyName: "selectOnFocus", publicName: "selectOnFocus", isSignal: true, isRequired: false, transformFunction: null }, navigateDisabled: { classPropertyName: "navigateDisabled", publicName: "navigateDisabled", isSignal: true, isRequired: false, transformFunction: null }, disallowEmptySelection: { classPropertyName: "disallowEmptySelection", publicName: "disallowEmptySelection", isSignal: true, isRequired: false, transformFunction: null }, disallowSelectAll: { classPropertyName: "disallowSelectAll", publicName: "disallowSelectAll", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, typeaheadTimeout: { classPropertyName: "typeaheadTimeout", publicName: "typeaheadTimeout", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, sections: { classPropertyName: "sections", publicName: "sections", isSignal: true, isRequired: false, transformFunction: null }, getKey: { classPropertyName: "getKey", publicName: "getKey", isSignal: true, isRequired: false, transformFunction: null }, getLabel: { classPropertyName: "getLabel", publicName: "getLabel", isSignal: true, isRequired: false, transformFunction: null }, isItemDisabled: { classPropertyName: "isItemDisabled", publicName: "isItemDisabled", isSignal: true, isRequired: false, transformFunction: null }, totalCount: { classPropertyName: "totalCount", publicName: "totalCount", isSignal: true, isRequired: false, transformFunction: null }, virtual: { classPropertyName: "virtual", publicName: "virtual", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, sectionSize: { classPropertyName: "sectionSize", publicName: "sectionSize", isSignal: true, isRequired: false, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null }, hasMore: { classPropertyName: "hasMore", publicName: "hasMore", isSignal: true, isRequired: false, transformFunction: null }, loadMoreThreshold: { classPropertyName: "loadMoreThreshold", publicName: "loadMoreThreshold", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", activeKeyChange: "activeKeyChange", loadMore: "loadMore" }, host: { attributes: { "data-ui": "listbox", "data-part": "root" }, listeners: { "keydown": "handleKeyDown($event)", "focusin": "handleFocusIn($event)", "focusout": "handleFocusOut($event)", "scroll": "readViewport()" }, properties: { "attr.role": "writtenRole ?? \"listbox\"", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-orientation": "resolvedOrientation()", "attr.data-indicator": "indicatorMode()", "attr.data-focus-mode": "mode()", "attr.data-layout": "resolvedColumns() > 1 ? \"grid\" : null", "attr.data-disabled": "listboxDisabled() ? \"\" : null", "attr.data-readonly": "resolvedReadOnly() ? \"\" : null", "attr.data-invalid": "resolvedInvalid() ? \"\" : null", "attr.data-required": "resolvedRequired() ? \"\" : null", "attr.data-loading": "loading() ? \"\" : null", "attr.aria-multiselectable": "selection() === \"multiple\" ? \"true\" : null", "attr.aria-orientation": "resolvedOrientation() === \"horizontal\" ? \"horizontal\" : null", "attr.aria-activedescendant": "activeDescendant()", "attr.aria-disabled": "listboxDisabled() ? \"true\" : null", "attr.aria-readonly": "resolvedReadOnly() ? \"true\" : null", "attr.aria-required": "resolvedRequired() ? \"true\" : null", "attr.aria-invalid": "resolvedInvalid() ? \"true\" : null", "attr.aria-busy": "loading() ? \"true\" : null", "attr.tabindex": "rootTabIndex()", "style.--slotted-listbox-rows": "resolvedRows()", "style.--slotted-listbox-columns": "resolvedColumns()" } }, providers: [
1099
+ { provide: SlListboxContext, useExisting: forwardRef(() => SlListbox) },
1100
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlListbox), multi: true },
1101
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlListbox), multi: true },
1102
+ ], queries: [{ propertyName: "optionContent", first: true, predicate: SlListboxOptionContent, descendants: true, read: TemplateRef, isSignal: true }], exportAs: ["slListbox"], ngImport: i0, template: `@if (collection(); as held) {
1103
+ @if (windowed()) {
1104
+ <div
1105
+ data-part="canvas"
1106
+ role="presentation"
1107
+ [style.--_canvas-size]="slice().totalSize + 'px'"
1108
+ [style.--_canvas-offset]="slice().startOffset + 'px'"
1109
+ >
1110
+ <ng-container
1111
+ [ngTemplateOutlet]="planRows"
1112
+ [ngTemplateOutletContext]="{ $implicit: plan() }"
1113
+ />
1114
+ </div>
1115
+ } @else {
1116
+ <ng-container
1117
+ [ngTemplateOutlet]="planRows"
1118
+ [ngTemplateOutletContext]="{ $implicit: plan() }"
1119
+ />
1120
+ }
1121
+ }
1122
+ <ng-content />
1123
+
1124
+ <ng-template #planRows let-entries>
1125
+ @for (entry of entries; track entry.id) {
1126
+ @if (entry.kind === 'group') {
1127
+ <div
1128
+ slListboxGroup
1129
+ [label]="entry.showLabel ? entry.label : undefined"
1130
+ [groupLabel]="entry.label"
1131
+ >
1132
+ @for (option of entry.options; track option.id) {
1133
+ <ng-container
1134
+ [ngTemplateOutlet]="optionRow"
1135
+ [ngTemplateOutletContext]="{ $implicit: option }"
1136
+ />
1137
+ }
1138
+ </div>
1139
+ } @else {
1140
+ <ng-container
1141
+ [ngTemplateOutlet]="optionRow"
1142
+ [ngTemplateOutletContext]="{ $implicit: entry }"
1143
+ />
1144
+ }
1145
+ }
1146
+ </ng-template>
1147
+
1148
+ <ng-template #optionRow let-option>
1149
+ <div
1150
+ slListboxOption
1151
+ [value]="option.key"
1152
+ [textValue]="option.label"
1153
+ [disabled]="option.disabled"
1154
+ [pinned]="option.offset !== null"
1155
+ [style.inset-block-start.px]="option.offset"
1156
+ >
1157
+ @if (optionContent(); as content) {
1158
+ <ng-container
1159
+ [ngTemplateOutlet]="content"
1160
+ [ngTemplateOutletContext]="{ $implicit: option.item }"
1161
+ />
1162
+ }
1163
+ </div>
1164
+ </ng-template>`, isInline: true, styles: ["@layer slotted.components{[data-ui=listbox]{--_surface: var(--slotted-listbox-surface, var(--slotted-surface, #ffffff));--_text: var(--slotted-listbox-text, var(--slotted-text, #0f172a));--_muted: var(--slotted-listbox-text-muted, var(--slotted-text-muted, #5b6b7f));--_border-color: var(--slotted-listbox-border-color, var(--slotted-control-border-color));--_border-width: var(--slotted-border-width-thin, 1px);--_radius: var(--slotted-listbox-radius, var(--slotted-radius-md, 6px));--_shadow: var(--slotted-listbox-shadow, var(--slotted-control-shadow));--_highlight: var(--slotted-listbox-highlight, var(--slotted-tone-secondary-subtle-hover));--_highlight-active: var( --slotted-listbox-highlight-active, var(--slotted-tone-secondary-subtle-active) );--_selected-surface: var( --slotted-listbox-selected-surface, var(--slotted-tone-accent-surface) );--_selected-text: var(--slotted-listbox-selected-text, var(--slotted-tone-accent-text));--_inset-block: var(--slotted-listbox-padding-block, var(--slotted-space-2, .25rem));--_inset-inline: var(--slotted-listbox-padding-inline, var(--slotted-space-2, .25rem));--_option-inset: var(--slotted-control-padding-inline-md, .8125rem);--_option-height: var(--slotted-control-height-md, 34px);--_option-radius: var(--slotted-listbox-option-radius, var(--slotted-control-radius));--_font-size: var(--slotted-control-font-size-md, 13px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_column-gap: var(--slotted-control-gap-md, .5rem);--_rows: var(--slotted-listbox-rows, 7);--_columns: var(--slotted-listbox-columns, 1);--_measure: var(--slotted-listbox-measure, 24rem);box-sizing:border-box;color:var(--_text);display:grid;font-family:var(--slotted-font-family-sans);font-size:var(--_font-size);grid-auto-rows:min-content;grid-template-columns:auto minmax(0,1fr) auto;inline-size:100%;max-inline-size:var(--_measure);max-block-size:calc(var(--_rows) * var(--_option-height) + 2 * var(--_inset-block));outline:none;overflow-y:auto;overscroll-behavior:contain;padding-block:var(--_inset-block);padding-inline:var(--_inset-inline);scroll-behavior:auto}[data-ui=listbox][data-size=sm]{--_option-inset: var(--slotted-control-padding-inline-sm, .625rem);--_option-height: var(--slotted-control-height-sm, 30px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_secondary-font-size: var(--slotted-font-size-xs, .75rem);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_column-gap: var(--slotted-control-gap-sm, .375rem)}[data-ui=listbox][data-size=lg]{--_option-inset: var(--slotted-control-padding-inline-lg, 1rem);--_option-height: var(--slotted-control-height-lg, 38px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_column-gap: var(--slotted-control-gap-lg, .5rem)}[data-ui=listbox][data-variant=framed]{background:var(--_surface);border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);box-shadow:var(--_shadow)}[data-ui=listbox][data-variant=plain]{background:transparent;border:0}[data-ui=listbox][data-focus-mode=activedescendant]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, #2563eb);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=listbox][data-focus-mode=roving]:focus{outline:none}[data-ui=listbox][data-invalid]{--_border-color: var(--slotted-tone-danger-border);--slotted-focus-ring-color: var(--slotted-focus-ring-color-invalid)}[data-ui=listbox][data-invalid]:not([data-disabled]){--_invalid-edge-width: var(--slotted-control-invalid-edge-width, 1px);--_shadow: inset 0 0 0 var(--_invalid-edge-width) var(--slotted-tone-danger-border)}[data-ui=listbox][data-disabled]{--_surface: var(--slotted-disabled-background, #e2e8f0);--_text: var(--slotted-disabled-foreground, #64748b);--_border-color: var(--slotted-disabled-border, #cbd5e1);cursor:not-allowed}[data-ui=listbox][data-loading]{cursor:progress}[data-ui=listbox][data-layout=grid]{column-gap:var(--_column-gap);grid-template-columns:repeat(var(--_columns),minmax(0,1fr));max-block-size:none}[data-ui=listbox][data-layout=grid] [data-part=option]{grid-column:auto;grid-template-columns:auto minmax(0,1fr) auto}[data-ui=listbox][data-layout=grid] :is([data-part=group],[data-part=canvas]){grid-template-columns:repeat(var(--_columns),minmax(0,1fr))}[data-ui=listbox][data-orientation=horizontal]{display:flex;flex-direction:row;max-block-size:none;overflow-x:auto;overflow-y:hidden}[data-ui=listbox][data-orientation=horizontal] [data-part=option]{flex:0 0 auto;grid-template-columns:auto auto auto}[data-ui=listbox]>[data-part=canvas]{align-content:start;block-size:var(--_canvas-size, auto);box-sizing:border-box;display:grid;grid-auto-rows:min-content;grid-column:1 / -1;grid-template-columns:subgrid;padding-block-start:var(--_canvas-offset, 0);position:relative}[data-ui=listbox] [data-part=option][data-pinned]{grid-template-columns:auto minmax(0,1fr) auto;inset-inline:0;position:absolute}[data-ui=listbox] [data-part=group]{display:grid;grid-column:1 / -1;grid-template-columns:subgrid}[data-ui=listbox] [data-part=group-label]{color:var(--_muted);font-size:var(--_secondary-font-size);font-weight:var(--slotted-font-weight-semibold, 600);grid-column:1 / -1;line-height:var(--slotted-line-height-sm, 1.45);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_option-inset)}[data-ui=listbox] [data-part=group]+[data-part=group]{border-block-start:var(--_border-width) solid var(--slotted-listbox-group-border-color, var(--slotted-border-subtle, #e2e8f0));margin-block-start:var(--slotted-space-2, .25rem);padding-block-start:var(--slotted-space-2, .25rem)}[data-ui=listbox] [data-part=option]{align-content:center;background:transparent;border-radius:var(--_option-radius);box-sizing:border-box;color:inherit;cursor:default;display:grid;grid-column:1 / -1;grid-template-columns:subgrid;line-height:var(--slotted-line-height-md, 1.5);min-block-size:var(--_option-height);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_option-inset);position:relative;row-gap:var(--slotted-space-1, .125rem);text-align:start;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=listbox]:not([data-disabled]) [data-part=option]:not([data-disabled]):hover{background-color:var(--_highlight)}[data-ui=listbox]:not([data-disabled]) [data-part=option]:not([data-disabled]):active{background-color:var(--_highlight-active)}[data-ui=listbox][data-focus-mode=roving]:focus-within [data-part=option][data-current],[data-ui=listbox][data-focus-mode=activedescendant] [data-part=option][data-current]{background-color:var(--_highlight)}[data-ui=listbox]:focus-within [data-part=option][data-current]{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, #2563eb);outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=listbox] [data-part=option]:focus{outline:none}[data-ui=listbox] [data-part=option][data-selected]{background-color:var(--_selected-surface);color:var(--_selected-text)}[data-ui=listbox] [data-part=option][data-selected]+[data-part=option][data-selected]{border-start-end-radius:0;border-start-start-radius:0}[data-ui=listbox] [data-part=option][data-selected]:has(+[data-part=option][data-selected]){border-end-end-radius:0;border-end-start-radius:0}[data-ui=listbox]:not([data-disabled]) [data-part=option][data-selected]:not([data-disabled]):hover{background-color:var(--slotted-tone-accent-subtle-hover)}[data-ui=listbox]:not([data-disabled]) [data-part=option][data-selected]:not([data-disabled]):active{background-color:var(--slotted-tone-accent-subtle-active)}[data-ui=listbox] [data-part=option][data-disabled]{color:var(--slotted-disabled-foreground, #64748b);cursor:not-allowed}[data-ui=listbox] [data-part=option][data-disabled]:is([data-selected],[data-current]){background-color:var(--slotted-disabled-background, #e2e8f0);color:var(--slotted-disabled-foreground, #64748b)}[data-ui=listbox][data-readonly] [data-part=option]{cursor:default}[data-ui=listbox] :is([data-part=indicator],[data-part=icon]){block-size:1lh;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-self:center;margin-inline-end:var(--_column-gap)}[data-ui=listbox] [data-part=indicator]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;justify-content:center;opacity:0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=listbox] [data-part=option][data-selected]>[data-part=indicator]{opacity:1}[data-ui=listbox] [data-part=icon]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;justify-content:center}[data-ui=listbox] [data-part=label]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=listbox] [data-part=description]{color:var(--_muted);font-size:var(--_secondary-font-size);grid-column:2;grid-row:2;line-height:var(--slotted-line-height-sm, 1.45);min-inline-size:0;overflow-wrap:anywhere}[data-ui=listbox] [data-part=option]:is([data-disabled],[data-selected])>[data-part=description]{color:inherit}[data-ui=listbox] [data-part=meta]{color:var(--_muted);font-variant-numeric:tabular-nums;grid-column:3;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=listbox] [data-part=option]:is([data-disabled],[data-selected])>[data-part=meta]{color:inherit}[data-ui=listbox] :is([data-part=empty],[data-part=loader]){align-content:center;color:var(--_muted);display:grid;grid-column:1 / -1;min-block-size:var(--_option-height);padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--_option-inset);text-align:center}[data-ui=listbox] [data-part=loader]{animation:slotted-listbox-loader var(--slotted-duration-loop) ease-in-out infinite}@keyframes slotted-listbox-loader{0%,to{opacity:.45}50%{opacity:1}}@media(prefers-reduced-motion:reduce){[data-ui=listbox] [data-part=loader]{animation:none;opacity:.7}}@media(forced-colors:active){[data-ui=listbox] [data-part=option][data-selected]{background-color:Highlight;color:HighlightText;forced-color-adjust:none}[data-ui=listbox] [data-part=option][data-disabled]{color:GrayText}}@media(forced-colors:active){[data-ui=listbox][data-variant=framed][data-invalid]:not([data-disabled]){outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--_border-width) + var(--_invalid-edge-width)))}[data-ui=listbox][data-variant=framed][data-invalid]:not([data-disabled])[data-focus-mode=activedescendant]:focus-visible{outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}}}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SlListboxGroup, selector: "[slListboxGroup]", inputs: ["label", "groupLabel"], exportAs: ["slListboxGroup"] }, { kind: "component", type: SlListboxOption, selector: "[slListboxOption]", inputs: ["value", "textValue", "disabled", "pinned"], exportAs: ["slListboxOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1165
+ }
1166
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlListbox, decorators: [{
1167
+ type: Component,
1168
+ args: [{ selector: '[slListbox]', standalone: true, exportAs: 'slListbox', imports: [NgTemplateOutlet, SlListboxGroup, SlListboxOption], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
1169
+ { provide: SlListboxContext, useExisting: forwardRef(() => SlListbox) },
1170
+ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SlListbox), multi: true },
1171
+ { provide: NG_VALIDATORS, useExisting: forwardRef(() => SlListbox), multi: true },
1172
+ ], template: `@if (collection(); as held) {
1173
+ @if (windowed()) {
1174
+ <div
1175
+ data-part="canvas"
1176
+ role="presentation"
1177
+ [style.--_canvas-size]="slice().totalSize + 'px'"
1178
+ [style.--_canvas-offset]="slice().startOffset + 'px'"
1179
+ >
1180
+ <ng-container
1181
+ [ngTemplateOutlet]="planRows"
1182
+ [ngTemplateOutletContext]="{ $implicit: plan() }"
1183
+ />
1184
+ </div>
1185
+ } @else {
1186
+ <ng-container
1187
+ [ngTemplateOutlet]="planRows"
1188
+ [ngTemplateOutletContext]="{ $implicit: plan() }"
1189
+ />
1190
+ }
1191
+ }
1192
+ <ng-content />
1193
+
1194
+ <ng-template #planRows let-entries>
1195
+ @for (entry of entries; track entry.id) {
1196
+ @if (entry.kind === 'group') {
1197
+ <div
1198
+ slListboxGroup
1199
+ [label]="entry.showLabel ? entry.label : undefined"
1200
+ [groupLabel]="entry.label"
1201
+ >
1202
+ @for (option of entry.options; track option.id) {
1203
+ <ng-container
1204
+ [ngTemplateOutlet]="optionRow"
1205
+ [ngTemplateOutletContext]="{ $implicit: option }"
1206
+ />
1207
+ }
1208
+ </div>
1209
+ } @else {
1210
+ <ng-container
1211
+ [ngTemplateOutlet]="optionRow"
1212
+ [ngTemplateOutletContext]="{ $implicit: entry }"
1213
+ />
1214
+ }
1215
+ }
1216
+ </ng-template>
1217
+
1218
+ <ng-template #optionRow let-option>
1219
+ <div
1220
+ slListboxOption
1221
+ [value]="option.key"
1222
+ [textValue]="option.label"
1223
+ [disabled]="option.disabled"
1224
+ [pinned]="option.offset !== null"
1225
+ [style.inset-block-start.px]="option.offset"
1226
+ >
1227
+ @if (optionContent(); as content) {
1228
+ <ng-container
1229
+ [ngTemplateOutlet]="content"
1230
+ [ngTemplateOutletContext]="{ $implicit: option.item }"
1231
+ />
1232
+ }
1233
+ </div>
1234
+ </ng-template>`, host: {
1235
+ 'data-ui': 'listbox',
1236
+ 'data-part': 'root',
1237
+ '[attr.role]': 'writtenRole ?? "listbox"',
1238
+ '[attr.data-size]': 'resolvedSize()',
1239
+ '[attr.data-variant]': 'resolvedVariant()',
1240
+ '[attr.data-orientation]': 'resolvedOrientation()',
1241
+ '[attr.data-indicator]': 'indicatorMode()',
1242
+ '[attr.data-focus-mode]': 'mode()',
1243
+ '[attr.data-layout]': 'resolvedColumns() > 1 ? "grid" : null',
1244
+ '[attr.data-disabled]': 'listboxDisabled() ? "" : null',
1245
+ '[attr.data-readonly]': 'resolvedReadOnly() ? "" : null',
1246
+ '[attr.data-invalid]': 'resolvedInvalid() ? "" : null',
1247
+ '[attr.data-required]': 'resolvedRequired() ? "" : null',
1248
+ '[attr.data-loading]': 'loading() ? "" : null',
1249
+ '[attr.aria-multiselectable]': 'selection() === "multiple" ? "true" : null',
1250
+ '[attr.aria-orientation]': 'resolvedOrientation() === "horizontal" ? "horizontal" : null',
1251
+ '[attr.aria-activedescendant]': 'activeDescendant()',
1252
+ '[attr.aria-disabled]': 'listboxDisabled() ? "true" : null',
1253
+ '[attr.aria-readonly]': 'resolvedReadOnly() ? "true" : null',
1254
+ '[attr.aria-required]': 'resolvedRequired() ? "true" : null',
1255
+ '[attr.aria-invalid]': 'resolvedInvalid() ? "true" : null',
1256
+ '[attr.aria-busy]': 'loading() ? "true" : null',
1257
+ '[attr.tabindex]': 'rootTabIndex()',
1258
+ '[style.--slotted-listbox-rows]': 'resolvedRows()',
1259
+ '[style.--slotted-listbox-columns]': 'resolvedColumns()',
1260
+ '(keydown)': 'handleKeyDown($event)',
1261
+ '(focusin)': 'handleFocusIn($event)',
1262
+ '(focusout)': 'handleFocusOut($event)',
1263
+ '(scroll)': 'readViewport()',
1264
+ }, styles: ["@layer slotted.components{[data-ui=listbox]{--_surface: var(--slotted-listbox-surface, var(--slotted-surface, #ffffff));--_text: var(--slotted-listbox-text, var(--slotted-text, #0f172a));--_muted: var(--slotted-listbox-text-muted, var(--slotted-text-muted, #5b6b7f));--_border-color: var(--slotted-listbox-border-color, var(--slotted-control-border-color));--_border-width: var(--slotted-border-width-thin, 1px);--_radius: var(--slotted-listbox-radius, var(--slotted-radius-md, 6px));--_shadow: var(--slotted-listbox-shadow, var(--slotted-control-shadow));--_highlight: var(--slotted-listbox-highlight, var(--slotted-tone-secondary-subtle-hover));--_highlight-active: var( --slotted-listbox-highlight-active, var(--slotted-tone-secondary-subtle-active) );--_selected-surface: var( --slotted-listbox-selected-surface, var(--slotted-tone-accent-surface) );--_selected-text: var(--slotted-listbox-selected-text, var(--slotted-tone-accent-text));--_inset-block: var(--slotted-listbox-padding-block, var(--slotted-space-2, .25rem));--_inset-inline: var(--slotted-listbox-padding-inline, var(--slotted-space-2, .25rem));--_option-inset: var(--slotted-control-padding-inline-md, .8125rem);--_option-height: var(--slotted-control-height-md, 34px);--_option-radius: var(--slotted-listbox-option-radius, var(--slotted-control-radius));--_font-size: var(--slotted-control-font-size-md, 13px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-md, 16px);--_column-gap: var(--slotted-control-gap-md, .5rem);--_rows: var(--slotted-listbox-rows, 7);--_columns: var(--slotted-listbox-columns, 1);--_measure: var(--slotted-listbox-measure, 24rem);box-sizing:border-box;color:var(--_text);display:grid;font-family:var(--slotted-font-family-sans);font-size:var(--_font-size);grid-auto-rows:min-content;grid-template-columns:auto minmax(0,1fr) auto;inline-size:100%;max-inline-size:var(--_measure);max-block-size:calc(var(--_rows) * var(--_option-height) + 2 * var(--_inset-block));outline:none;overflow-y:auto;overscroll-behavior:contain;padding-block:var(--_inset-block);padding-inline:var(--_inset-inline);scroll-behavior:auto}[data-ui=listbox][data-size=sm]{--_option-inset: var(--slotted-control-padding-inline-sm, .625rem);--_option-height: var(--slotted-control-height-sm, 30px);--_font-size: var(--slotted-control-font-size-sm, 12px);--_secondary-font-size: var(--slotted-font-size-xs, .75rem);--_icon-size: var(--slotted-control-icon-size-sm, 14px);--_column-gap: var(--slotted-control-gap-sm, .375rem)}[data-ui=listbox][data-size=lg]{--_option-inset: var(--slotted-control-padding-inline-lg, 1rem);--_option-height: var(--slotted-control-height-lg, 38px);--_font-size: var(--slotted-control-font-size-lg, 14px);--_secondary-font-size: var(--slotted-control-font-size-sm, 12px);--_icon-size: var(--slotted-control-icon-size-lg, 18px);--_column-gap: var(--slotted-control-gap-lg, .5rem)}[data-ui=listbox][data-variant=framed]{background:var(--_surface);border:var(--_border-width) solid var(--_border-color);border-radius:var(--_radius);box-shadow:var(--_shadow)}[data-ui=listbox][data-variant=plain]{background:transparent;border:0}[data-ui=listbox][data-focus-mode=activedescendant]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, #2563eb);outline-offset:var(--slotted-focus-ring-offset, 2px)}[data-ui=listbox][data-focus-mode=roving]:focus{outline:none}[data-ui=listbox][data-invalid]{--_border-color: var(--slotted-tone-danger-border);--slotted-focus-ring-color: var(--slotted-focus-ring-color-invalid)}[data-ui=listbox][data-invalid]:not([data-disabled]){--_invalid-edge-width: var(--slotted-control-invalid-edge-width, 1px);--_shadow: inset 0 0 0 var(--_invalid-edge-width) var(--slotted-tone-danger-border)}[data-ui=listbox][data-disabled]{--_surface: var(--slotted-disabled-background, #e2e8f0);--_text: var(--slotted-disabled-foreground, #64748b);--_border-color: var(--slotted-disabled-border, #cbd5e1);cursor:not-allowed}[data-ui=listbox][data-loading]{cursor:progress}[data-ui=listbox][data-layout=grid]{column-gap:var(--_column-gap);grid-template-columns:repeat(var(--_columns),minmax(0,1fr));max-block-size:none}[data-ui=listbox][data-layout=grid] [data-part=option]{grid-column:auto;grid-template-columns:auto minmax(0,1fr) auto}[data-ui=listbox][data-layout=grid] :is([data-part=group],[data-part=canvas]){grid-template-columns:repeat(var(--_columns),minmax(0,1fr))}[data-ui=listbox][data-orientation=horizontal]{display:flex;flex-direction:row;max-block-size:none;overflow-x:auto;overflow-y:hidden}[data-ui=listbox][data-orientation=horizontal] [data-part=option]{flex:0 0 auto;grid-template-columns:auto auto auto}[data-ui=listbox]>[data-part=canvas]{align-content:start;block-size:var(--_canvas-size, auto);box-sizing:border-box;display:grid;grid-auto-rows:min-content;grid-column:1 / -1;grid-template-columns:subgrid;padding-block-start:var(--_canvas-offset, 0);position:relative}[data-ui=listbox] [data-part=option][data-pinned]{grid-template-columns:auto minmax(0,1fr) auto;inset-inline:0;position:absolute}[data-ui=listbox] [data-part=group]{display:grid;grid-column:1 / -1;grid-template-columns:subgrid}[data-ui=listbox] [data-part=group-label]{color:var(--_muted);font-size:var(--_secondary-font-size);font-weight:var(--slotted-font-weight-semibold, 600);grid-column:1 / -1;line-height:var(--slotted-line-height-sm, 1.45);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_option-inset)}[data-ui=listbox] [data-part=group]+[data-part=group]{border-block-start:var(--_border-width) solid var(--slotted-listbox-group-border-color, var(--slotted-border-subtle, #e2e8f0));margin-block-start:var(--slotted-space-2, .25rem);padding-block-start:var(--slotted-space-2, .25rem)}[data-ui=listbox] [data-part=option]{align-content:center;background:transparent;border-radius:var(--_option-radius);box-sizing:border-box;color:inherit;cursor:default;display:grid;grid-column:1 / -1;grid-template-columns:subgrid;line-height:var(--slotted-line-height-md, 1.5);min-block-size:var(--_option-height);padding-block:var(--slotted-space-2, .25rem);padding-inline:var(--_option-inset);position:relative;row-gap:var(--slotted-space-1, .125rem);text-align:start;transition:background-color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard)),color var(--slotted-control-transition-duration, var(--slotted-duration-short)) var(--slotted-control-transition-easing, var(--slotted-easing-standard))}[data-ui=listbox]:not([data-disabled]) [data-part=option]:not([data-disabled]):hover{background-color:var(--_highlight)}[data-ui=listbox]:not([data-disabled]) [data-part=option]:not([data-disabled]):active{background-color:var(--_highlight-active)}[data-ui=listbox][data-focus-mode=roving]:focus-within [data-part=option][data-current],[data-ui=listbox][data-focus-mode=activedescendant] [data-part=option][data-current]{background-color:var(--_highlight)}[data-ui=listbox]:focus-within [data-part=option][data-current]{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, #2563eb);outline-offset:calc(-1 * var(--slotted-focus-ring-width, 2px))}[data-ui=listbox] [data-part=option]:focus{outline:none}[data-ui=listbox] [data-part=option][data-selected]{background-color:var(--_selected-surface);color:var(--_selected-text)}[data-ui=listbox] [data-part=option][data-selected]+[data-part=option][data-selected]{border-start-end-radius:0;border-start-start-radius:0}[data-ui=listbox] [data-part=option][data-selected]:has(+[data-part=option][data-selected]){border-end-end-radius:0;border-end-start-radius:0}[data-ui=listbox]:not([data-disabled]) [data-part=option][data-selected]:not([data-disabled]):hover{background-color:var(--slotted-tone-accent-subtle-hover)}[data-ui=listbox]:not([data-disabled]) [data-part=option][data-selected]:not([data-disabled]):active{background-color:var(--slotted-tone-accent-subtle-active)}[data-ui=listbox] [data-part=option][data-disabled]{color:var(--slotted-disabled-foreground, #64748b);cursor:not-allowed}[data-ui=listbox] [data-part=option][data-disabled]:is([data-selected],[data-current]){background-color:var(--slotted-disabled-background, #e2e8f0);color:var(--slotted-disabled-foreground, #64748b)}[data-ui=listbox][data-readonly] [data-part=option]{cursor:default}[data-ui=listbox] :is([data-part=indicator],[data-part=icon]){block-size:1lh;grid-column:1;grid-row:1;inline-size:var(--_icon-size);justify-self:center;margin-inline-end:var(--_column-gap)}[data-ui=listbox] [data-part=indicator]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;justify-content:center;opacity:0;transition:opacity var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=listbox] [data-part=option][data-selected]>[data-part=indicator]{opacity:1}[data-ui=listbox] [data-part=icon]{--slotted-icon-size: var(--_icon-size);align-items:center;display:flex;justify-content:center}[data-ui=listbox] [data-part=label]{grid-column:2;grid-row:1;min-inline-size:0;overflow-wrap:anywhere}[data-ui=listbox] [data-part=description]{color:var(--_muted);font-size:var(--_secondary-font-size);grid-column:2;grid-row:2;line-height:var(--slotted-line-height-sm, 1.45);min-inline-size:0;overflow-wrap:anywhere}[data-ui=listbox] [data-part=option]:is([data-disabled],[data-selected])>[data-part=description]{color:inherit}[data-ui=listbox] [data-part=meta]{color:var(--_muted);font-variant-numeric:tabular-nums;grid-column:3;grid-row:1;justify-self:end;margin-inline-start:var(--slotted-space-6, 1rem);white-space:nowrap}[data-ui=listbox] [data-part=option]:is([data-disabled],[data-selected])>[data-part=meta]{color:inherit}[data-ui=listbox] :is([data-part=empty],[data-part=loader]){align-content:center;color:var(--_muted);display:grid;grid-column:1 / -1;min-block-size:var(--_option-height);padding-block:var(--slotted-space-5, .75rem);padding-inline:var(--_option-inset);text-align:center}[data-ui=listbox] [data-part=loader]{animation:slotted-listbox-loader var(--slotted-duration-loop) ease-in-out infinite}@keyframes slotted-listbox-loader{0%,to{opacity:.45}50%{opacity:1}}@media(prefers-reduced-motion:reduce){[data-ui=listbox] [data-part=loader]{animation:none;opacity:.7}}@media(forced-colors:active){[data-ui=listbox] [data-part=option][data-selected]{background-color:Highlight;color:HighlightText;forced-color-adjust:none}[data-ui=listbox] [data-part=option][data-disabled]{color:GrayText}}@media(forced-colors:active){[data-ui=listbox][data-variant=framed][data-invalid]:not([data-disabled]){outline:var(--_invalid-edge-width) solid CanvasText;outline-offset:calc(-1 * (var(--_border-width) + var(--_invalid-edge-width)))}[data-ui=listbox][data-variant=framed][data-invalid]:not([data-disabled])[data-focus-mode=activedescendant]:focus-visible{outline:calc(var(--slotted-focus-ring-width, 2px) + var(--_invalid-edge-width)) double var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-focus-ring-offset, 2px)}}}\n"] }]
1265
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }], activeKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeKey", required: false }] }], defaultActiveKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultActiveKey", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], selectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionBehavior", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], focusMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusMode", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], loop: [{ type: i0.Input, args: [{ isSignal: true, alias: "loop", required: false }] }], typeahead: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeahead", required: false }] }], selectOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectOnFocus", required: false }] }], navigateDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateDisabled", required: false }] }], disallowEmptySelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "disallowEmptySelection", required: false }] }], disallowSelectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "disallowSelectAll", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], typeaheadTimeout: [{ type: i0.Input, args: [{ isSignal: true, alias: "typeaheadTimeout", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], sections: [{ type: i0.Input, args: [{ isSignal: true, alias: "sections", required: false }] }], getKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "getKey", required: false }] }], getLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "getLabel", required: false }] }], isItemDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "isItemDisabled", required: false }] }], totalCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalCount", required: false }] }], virtual: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtual", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], sectionSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionSize", required: false }] }], overscan: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscan", required: false }] }], hasMore: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasMore", required: false }] }], loadMoreThreshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadMoreThreshold", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], activeKeyChange: [{ type: i0.Output, args: ["activeKeyChange"] }], loadMore: [{ type: i0.Output, args: ["loadMore"] }], optionContent: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SlListboxOptionContent), { ...{
1266
+ read: TemplateRef,
1267
+ }, isSignal: true }] }] } });
1268
+
1269
+ /**
1270
+ * Generated bundle index. Do not edit.
1271
+ */
1272
+
1273
+ export { LISTBOX_DEFAULTS, SlListbox, SlListboxContext, SlListboxDescription, SlListboxEmpty, SlListboxGroup, SlListboxIcon, SlListboxIdFactory, SlListboxIndicator, SlListboxLabel, SlListboxLoader, SlListboxMeta, SlListboxOption, SlListboxOptionContent, injectListboxDefaults, provideListboxDefaults };
1274
+ //# sourceMappingURL=slotted-angular-listbox.mjs.map