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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
package/docs/tabs.json ADDED
@@ -0,0 +1,661 @@
1
+ {
2
+ "family": "tabs",
3
+ "ui": "tabs",
4
+ "binding": "angular",
5
+ "catalog": {
6
+ "group": "Navigation",
7
+ "summary": "Switches between panels of related content."
8
+ },
9
+ "axes": {
10
+ "activation": [
11
+ "automatic",
12
+ "manual"
13
+ ],
14
+ "orientation": [
15
+ "horizontal",
16
+ "vertical"
17
+ ],
18
+ "size": [
19
+ "sm",
20
+ "md",
21
+ "lg"
22
+ ],
23
+ "variant": [
24
+ "line",
25
+ "contained"
26
+ ],
27
+ "track": [
28
+ "line",
29
+ "none"
30
+ ],
31
+ "fit": [
32
+ "auto",
33
+ "equal"
34
+ ],
35
+ "mount": [
36
+ "active",
37
+ "lazy",
38
+ "eager"
39
+ ]
40
+ },
41
+ "members": {
42
+ "tabs": {
43
+ "nativeElement": "div",
44
+ "defaults": {
45
+ "activation": "automatic",
46
+ "orientation": "horizontal",
47
+ "size": "md",
48
+ "variant": "line",
49
+ "track": "line",
50
+ "fit": "auto",
51
+ "mount": "active",
52
+ "loop": true,
53
+ "disabled": false
54
+ },
55
+ "capabilities": [
56
+ "selection",
57
+ "orientation",
58
+ "size",
59
+ "appearance",
60
+ "disabled",
61
+ "removable",
62
+ "wiring"
63
+ ],
64
+ "states": [
65
+ "default",
66
+ "hover",
67
+ "active",
68
+ "focus-visible",
69
+ "selected",
70
+ "disabled"
71
+ ],
72
+ "parts": [
73
+ "root",
74
+ "list",
75
+ "item",
76
+ "tab",
77
+ "start",
78
+ "label",
79
+ "end",
80
+ "dismiss",
81
+ "panel",
82
+ "scroll",
83
+ "actions"
84
+ ]
85
+ }
86
+ },
87
+ "docs": {
88
+ "tabs": {
89
+ "imports": {
90
+ "source": "import {\n provideTabsDefaults,\n SlTab,\n SlTabActions,\n SlTabEnd,\n SlTabList,\n SlTabPanel,\n SlTabPanelContent,\n SlTabs,\n SlTabStart,\n} from '@slotted/angular/tabs';",
91
+ "selector": "[slTabs], [slTabList], [slTab], [slTabStart], [slTabEnd], [slTabPanel], ng-template[slTabPanelContent], [slTabActions]",
92
+ "exportAs": "slTabs, slTabList, slTab, slTabStart, slTabEnd, slTabPanel, slTabActions"
93
+ },
94
+ "anatomy": [
95
+ {
96
+ "part": "root",
97
+ "element": "the element carrying slTabs",
98
+ "required": true,
99
+ "purpose": "The Tabs root: a grid of four columns and two rows that carries data-ui=\"tabs\", the axes (data-size, data-variant, data-track, data-orientation, data-fit), data-disabled, data-overflowing and data-activation-direction. It renders the two paging controls itself, because it observes whether the list overflows."
100
+ },
101
+ {
102
+ "part": "list",
103
+ "element": "the element carrying slTabList, with role=\"tablist\"",
104
+ "required": true,
105
+ "purpose": "The scroll container, and the single Tab stop of the list. Name it with aria-label or aria-labelledby: Tabs writes neither, because only the page knows what the set of views is for."
106
+ },
107
+ {
108
+ "part": "item",
109
+ "element": "the slTab host, with role=\"presentation\"",
110
+ "required": true,
111
+ "purpose": "One tab and its optional close button. It exists because a button cannot contain a button, and because the marker spans the tab and its close button together. A class or an attribute written on slTab lands on it."
112
+ },
113
+ {
114
+ "part": "tab",
115
+ "element": "button[role=\"tab\"], or a[role=\"tab\"] with href",
116
+ "required": true,
117
+ "purpose": "The control. It holds aria-selected, aria-controls, the generated id and data-value, which the keyboard reads. A template reaches the SlTab instance through exportAs=\"slTab\"."
118
+ },
119
+ {
120
+ "part": "start",
121
+ "element": "the element carrying slTabStart",
122
+ "required": false,
123
+ "purpose": "The element marked slTabStart, before the label: an icon, as a flex item of the tab that never shrinks and that sizes an icon to the tab’s icon step."
124
+ },
125
+ {
126
+ "part": "label",
127
+ "element": "span",
128
+ "required": true,
129
+ "purpose": "The words, in a box of their own: text-overflow cuts it when fit=\"equal\" leaves too little room, and unicode-bidi: plaintext lets a label in another script read in its own direction."
130
+ },
131
+ {
132
+ "part": "end",
133
+ "element": "the element carrying slTabEnd",
134
+ "required": false,
135
+ "purpose": "The element marked slTabEnd, after the label: a count or a status, as a flex item of the tab that never shrinks."
136
+ },
137
+ {
138
+ "part": "dismiss",
139
+ "element": "button",
140
+ "required": false,
141
+ "purpose": "The close button. It has tabindex=\"-1\", so the arrow keys move between tabs only, and it stays in the accessibility tree, so a screen reader can press it. From the keyboard, Delete closes the focused tab, which aria-keyshortcuts on the tab announces."
142
+ },
143
+ {
144
+ "part": "panel",
145
+ "element": "the element carrying slTabPanel, with role=\"tabpanel\"",
146
+ "required": true,
147
+ "purpose": "The content of one tab, with aria-labelledby pointing at its tab and tabindex=\"0\". It carries the hidden attribute while another tab is selected. The panel element always exists, so every tab’s aria-controls names an element; mount decides whether its content exists. Content written in <ng-template slTabPanelContent> is created only when mount says so."
148
+ },
149
+ {
150
+ "part": "scroll",
151
+ "element": "button",
152
+ "required": false,
153
+ "purpose": "One paging control at each end, drawn only while the list overflows. It is aria-hidden and outside the Tab sequence, because the arrow keys reach every tab and scroll it into view."
154
+ },
155
+ {
156
+ "part": "actions",
157
+ "element": "the element carrying slTabActions",
158
+ "required": false,
159
+ "purpose": "A slot at the end of the tab row, for controls that act on what the tabs show. Put a Toolbar in it: one Tab stop however many buttons it holds."
160
+ }
161
+ ],
162
+ "api": [
163
+ {
164
+ "name": "value",
165
+ "type": "string",
166
+ "defaultValue": "—",
167
+ "appliesTo": "slTabs",
168
+ "description": "The value of the selected tab. Passing it makes the selection controlled for the life of the component; without it, slTabs keeps the selection and starts from defaultValue."
169
+ },
170
+ {
171
+ "name": "defaultValue",
172
+ "type": "string",
173
+ "defaultValue": "—",
174
+ "appliesTo": "slTabs",
175
+ "description": "The value an uncontrolled slTabs starts from, read once. When it is unset, no tab is selected and no panel is shown."
176
+ },
177
+ {
178
+ "name": "activation",
179
+ "type": "'automatic' | 'manual'",
180
+ "defaultValue": "automatic",
181
+ "appliesTo": "slTabs, provideTabsDefaults",
182
+ "description": "Whether moving focus to a tab also selects it. The APG recommends automatic when panels show without a noticeable delay, and manual when a panel has to be fetched."
183
+ },
184
+ {
185
+ "name": "orientation",
186
+ "type": "'horizontal' | 'vertical'",
187
+ "defaultValue": "horizontal",
188
+ "appliesTo": "slTabs, provideTabsDefaults",
189
+ "description": "Which way the list runs, and so which arrow keys move between tabs. A horizontal list ignores Up and Down, so those keys keep scrolling the page."
190
+ },
191
+ {
192
+ "name": "size",
193
+ "type": "'sm' | 'md' | 'lg'",
194
+ "defaultValue": "md",
195
+ "appliesTo": "slTabs, provideTabsDefaults",
196
+ "description": "The control step of the list: height, type, padding and inner gap, all from the control scales the theme restates per density."
197
+ },
198
+ {
199
+ "name": "variant",
200
+ "type": "'line' | 'contained'",
201
+ "defaultValue": "line",
202
+ "appliesTo": "slTabs, provideTabsDefaults",
203
+ "description": "How the list is drawn. Both variants paint the accent marker, which keeps the selected tab visible in the high-contrast scheme, where every surface is flattened."
204
+ },
205
+ {
206
+ "name": "track",
207
+ "type": "'line' | 'none'",
208
+ "defaultValue": "line",
209
+ "appliesTo": "slTabs, provideTabsDefaults",
210
+ "description": "Whether the list draws the line its tabs stand on. none is for a list placed on a line the page already draws, such as a card header’s edge or a table’s rule, where two hairlines a pixel apart read as one smudge. The marker then sits on the item’s own edge, on the line that is there."
211
+ },
212
+ {
213
+ "name": "fit",
214
+ "type": "'auto' | 'equal'",
215
+ "defaultValue": "auto",
216
+ "appliesTo": "slTabs, provideTabsDefaults",
217
+ "description": "Whether each tab is as wide as its label or takes an equal share of the line. equal cuts a label longer than its share with an ellipsis; auto never cuts a label and scrolls the list instead."
218
+ },
219
+ {
220
+ "name": "mount",
221
+ "type": "'active' | 'lazy' | 'eager'",
222
+ "defaultValue": "active",
223
+ "appliesTo": "slTabs, provideTabsDefaults",
224
+ "description": "When a panel’s content exists: only while its tab is selected (active), from its first selection on (lazy), or from the start (eager). A panel that is not selected carries the hidden attribute. Angular creates projected content with the page; write a panel’s content in <ng-template slTabPanelContent> for mount to decide when it is created."
225
+ },
226
+ {
227
+ "name": "loop",
228
+ "type": "boolean",
229
+ "defaultValue": "true",
230
+ "appliesTo": "slTabs, provideTabsDefaults",
231
+ "description": "Whether the arrow keys wrap past the ends of the list."
232
+ },
233
+ {
234
+ "name": "disabled",
235
+ "type": "boolean",
236
+ "defaultValue": "false",
237
+ "appliesTo": "slTabs",
238
+ "description": "Disables every tab with the native attribute, which also makes the arrow keys skip them, and dims the track."
239
+ },
240
+ {
241
+ "name": "value, on slTab",
242
+ "type": "string",
243
+ "defaultValue": "—",
244
+ "appliesTo": "slTab",
245
+ "description": "What this tab selects, and what the value of slTabs holds. It reaches the DOM as data-value, which the keyboard reads."
246
+ },
247
+ {
248
+ "name": "disabled, on slTab",
249
+ "type": "boolean",
250
+ "defaultValue": "from slTabs, or false",
251
+ "appliesTo": "slTab",
252
+ "description": "Disables this tab only, so one tab can be unavailable in a working list. Unset rather than false, so the tab follows slTabs."
253
+ },
254
+ {
255
+ "name": "dismissible",
256
+ "type": "boolean",
257
+ "defaultValue": "false",
258
+ "appliesTo": "slTab",
259
+ "description": "Draws the close button and binds Delete on the tab, announced through aria-keyshortcuts."
260
+ },
261
+ {
262
+ "name": "dismissLabel",
263
+ "type": "string",
264
+ "defaultValue": "—",
265
+ "appliesTo": "slTab",
266
+ "description": "The accessible name of the close button, required whenever it is drawn. Name what closes: “Close customers.sql” rather than “Close”."
267
+ },
268
+ {
269
+ "name": "slTabStart",
270
+ "type": "directive",
271
+ "defaultValue": "—",
272
+ "appliesTo": "an element inside slTab",
273
+ "description": "Marks the content before the label, such as an icon, and places it in the start part beside the words."
274
+ },
275
+ {
276
+ "name": "slTabEnd",
277
+ "type": "directive",
278
+ "defaultValue": "—",
279
+ "appliesTo": "an element inside slTab",
280
+ "description": "Marks the content after the label, such as a badge with a count, and places it in the end part beside the words."
281
+ },
282
+ {
283
+ "name": "controls",
284
+ "type": "string",
285
+ "defaultValue": "—",
286
+ "appliesTo": "slTab",
287
+ "description": "The id of the region this tab controls when it is not a slTabPanel, such as a table the selected value filters. aria-controls names that region."
288
+ },
289
+ {
290
+ "name": "href",
291
+ "type": "string",
292
+ "defaultValue": "—",
293
+ "appliesTo": "slTab",
294
+ "description": "Renders the tab as a link. A plain click selects the tab without navigating; a click with a modifier key is left to the browser, which opens the address in a new browser tab or window."
295
+ },
296
+ {
297
+ "name": "value, on slTabPanel",
298
+ "type": "string",
299
+ "defaultValue": "—",
300
+ "appliesTo": "slTabPanel",
301
+ "description": "The tab this panel belongs to. slTabs wires the pair with ids generated from the value."
302
+ }
303
+ ],
304
+ "composition": [
305
+ {
306
+ "name": "exportAs",
307
+ "type": "slTabs | slTabList | slTab | slTabPanel | slTabActions | slTabStart | slTabEnd",
308
+ "defaultValue": "—",
309
+ "appliesTo": "every directive",
310
+ "description": "A template reaches an instance by name: #tabs=\"slTabs\" gives a page select(value, reason), the resolved axes and the ids, for a view a router changes."
311
+ },
312
+ {
313
+ "name": "the element you write it on",
314
+ "type": "any element",
315
+ "defaultValue": "—",
316
+ "appliesTo": "every directive",
317
+ "description": "The five roots are directives on your own elements, so a list can be a nav and slTabs a section. The tab control itself cannot be replaced: it holds the role, the value and the keyboard, and href covers the substitution that matters."
318
+ },
319
+ {
320
+ "name": "ng-content",
321
+ "type": "projected content",
322
+ "defaultValue": "—",
323
+ "appliesTo": "slTab, slTabPanel, slTabActions",
324
+ "description": "The label, the panel content and the actions are your own markup. Under mount=\"active\", a closed panel keeps its projected content out of the DOM, but Angular creates projected components with the page."
325
+ },
326
+ {
327
+ "name": "slTabPanelContent",
328
+ "type": "ng-template directive",
329
+ "defaultValue": "—",
330
+ "appliesTo": "a direct child of slTabPanel",
331
+ "description": "Holds a panel’s content as a template that mount instantiates: on selection and destroyed after under active, on first selection and kept under lazy, up front under eager."
332
+ },
333
+ {
334
+ "name": "provideTabsDefaults()",
335
+ "type": "{ activation, orientation, size, variant, track, fit, mount, loop }",
336
+ "defaultValue": "—",
337
+ "appliesTo": "an injector",
338
+ "description": "The eight settings an application decides once, in the bootstrap providers, on a route or on a component. A value set on one slTabs still wins."
339
+ },
340
+ {
341
+ "name": "aria-label, on slTabList",
342
+ "type": "string",
343
+ "defaultValue": "—",
344
+ "appliesTo": "slTabList",
345
+ "description": "The name of the set of views. slTabs writes no name of its own; aria-labelledby works the same way."
346
+ }
347
+ ],
348
+ "events": [
349
+ {
350
+ "name": "valueChange",
351
+ "payload": "ChangeRequest<string | undefined>",
352
+ "when": "Before the selection moves. The request carries the new value, the previous value (undefined while no tab is selected), the reason (pointer, keyboard, remove or programmatic), the originating event, and cancel(), which keeps the current tab."
353
+ },
354
+ {
355
+ "name": "tabDismiss",
356
+ "payload": "TabsDismissRequest, which also carries the value being closed",
357
+ "when": "Before a tab is closed, by Delete or by its close button. The request carries the reason (pointer or keyboard) and cancel(), which stops both the dismissal and the selection move that would follow it. Tabs removes nothing itself: remove the tab from your own data."
358
+ },
359
+ {
360
+ "name": "click, keydown, focus, on each slTab",
361
+ "payload": "the element’s own events",
362
+ "when": "When the tab’s control fires them. A listener bound on the slTab host runs after the tab’s own handler."
363
+ }
364
+ ],
365
+ "accessibility": [
366
+ "Tabs implements the WAI-ARIA APG Tabs pattern (w3.org/WAI/ARIA/apg/patterns/tabs/) and its whole keyboard table: Tab enters the list on the selected tab and leaves to the panel, the arrow keys of the list’s direction move focus and wrap at both ends, Home and End reach the first and last enabled tab, Enter and Space select under manual activation, and Delete closes a dismissible tab. A horizontal list does not listen for Up and Down, so those keys keep scrolling the page while focus is in the list.",
367
+ "After a dismissal, focus follows the pattern: the next tab, the previous one when the closed tab was last, or the list itself when no tab is left, which is why the list carries tabindex=\"-1\". The selection follows the same rule, with the reason remove.",
368
+ "The close button is outside the arrow-key sequence and inside the accessibility tree. A screen reader reaches and presses it; from the keyboard, Delete closes the focused tab, and the tab announces the key with aria-keyshortcuts. In the arrow-key sequence, close buttons would double the presses it takes to cross the list.",
369
+ "The paging controls are aria-hidden and outside the Tab sequence, because the arrow keys reach every tab and scroll it into view. Cloudscape’s guidance warns against extra Tab stops between a tab list and its panel.",
370
+ "A list that starts to overflow scrolls the selected tab into view once its paging controls are drawn, so the selected tab is not left behind the end control.",
371
+ "Each tab names its panel with aria-controls and each panel names its tab with aria-labelledby. The ids come from the value, with the characters an id cannot hold escaped rather than replaced, so two values that differ only by a space never share a panel.",
372
+ "The selected tab is never shown by colour alone: the marker is a bar the width of a thick border, which stays visible in the high-contrast scheme, where the theme paints every surface Canvas and the fill of the contained variant disappears.",
373
+ "A panel carries tabindex=\"0\", so the Tab key reaches it from the list. The pattern permits that stop even when the panel’s first content is focusable."
374
+ ]
375
+ }
376
+ },
377
+ "tokens": [
378
+ "--slotted-border-strong",
379
+ "--slotted-border-subtle",
380
+ "--slotted-border-width-thick",
381
+ "--slotted-border-width-thin",
382
+ "--slotted-control-font-family",
383
+ "--slotted-control-font-size-lg",
384
+ "--slotted-control-font-size-md",
385
+ "--slotted-control-font-size-sm",
386
+ "--slotted-control-font-weight",
387
+ "--slotted-control-gap-lg",
388
+ "--slotted-control-gap-md",
389
+ "--slotted-control-gap-sm",
390
+ "--slotted-control-height-lg",
391
+ "--slotted-control-height-md",
392
+ "--slotted-control-height-sm",
393
+ "--slotted-control-icon-size-lg",
394
+ "--slotted-control-icon-size-md",
395
+ "--slotted-control-icon-size-sm",
396
+ "--slotted-control-inner-size-lg",
397
+ "--slotted-control-inner-size-md",
398
+ "--slotted-control-inner-size-sm",
399
+ "--slotted-control-letter-spacing",
400
+ "--slotted-control-line-height",
401
+ "--slotted-control-padding-inline-lg",
402
+ "--slotted-control-padding-inline-md",
403
+ "--slotted-control-padding-inline-sm",
404
+ "--slotted-control-radius",
405
+ "--slotted-control-transition-duration",
406
+ "--slotted-control-transition-easing",
407
+ "--slotted-disabled-background",
408
+ "--slotted-disabled-border",
409
+ "--slotted-disabled-foreground",
410
+ "--slotted-duration-short",
411
+ "--slotted-easing-enter",
412
+ "--slotted-focus-ring-color",
413
+ "--slotted-focus-ring-offset",
414
+ "--slotted-focus-ring-width",
415
+ "--slotted-radius-md",
416
+ "--slotted-radius-sm",
417
+ "--slotted-radius-xs",
418
+ "--slotted-shadow-xs",
419
+ "--slotted-space-1",
420
+ "--slotted-space-2",
421
+ "--slotted-space-4",
422
+ "--slotted-space-6",
423
+ "--slotted-surface",
424
+ "--slotted-surface-sunken",
425
+ "--slotted-tabs-actions-gap",
426
+ "--slotted-tabs-active-background",
427
+ "--slotted-tabs-active-marker-color",
428
+ "--slotted-tabs-color",
429
+ "--slotted-tabs-contained-background",
430
+ "--slotted-tabs-contained-selected-background",
431
+ "--slotted-tabs-dismiss-active-background",
432
+ "--slotted-tabs-dismiss-active-color",
433
+ "--slotted-tabs-dismiss-color",
434
+ "--slotted-tabs-dismiss-hover-background",
435
+ "--slotted-tabs-dismiss-hover-color",
436
+ "--slotted-tabs-fade-size",
437
+ "--slotted-tabs-gap",
438
+ "--slotted-tabs-hover-background",
439
+ "--slotted-tabs-hover-color",
440
+ "--slotted-tabs-hover-marker-color",
441
+ "--slotted-tabs-list-gap",
442
+ "--slotted-tabs-marker-color",
443
+ "--slotted-tabs-scroll-color",
444
+ "--slotted-tabs-selected-color",
445
+ "--slotted-tabs-track-color",
446
+ "--slotted-target-comfortable",
447
+ "--slotted-target-min",
448
+ "--slotted-text",
449
+ "--slotted-text-inverse",
450
+ "--slotted-text-muted",
451
+ "--slotted-tone-accent-solid",
452
+ "--slotted-tone-accent-text",
453
+ "--slotted-tone-danger-border",
454
+ "--slotted-tone-danger-surface",
455
+ "--slotted-tone-danger-text",
456
+ "--slotted-tone-secondary-subtle-active",
457
+ "--slotted-tone-secondary-subtle-hover"
458
+ ],
459
+ "examples": [
460
+ {
461
+ "id": "playground",
462
+ "title": "Playground",
463
+ "note": "One family with every axis on it, driven by the controls below the canvas. Tab into it once: the list is a single stop, and the arrows move the selection from there.",
464
+ "language": "html",
465
+ "source": "<div slTabs defaultValue=\"summary\">\n <div slTabList aria-label=\"Order\">\n <div slTab value=\"summary\">Summary</div>\n <div slTab value=\"items\">Items</div>\n </div>\n <div slTabPanel value=\"summary\">Delivery expected on September 12.</div>\n <div slTabPanel value=\"items\">Three items.</div>\n</div>\n",
466
+ "verdict": "excerpt"
467
+ },
468
+ {
469
+ "id": "activation",
470
+ "title": "Whether focus selects",
471
+ "note": "Automatic is the APG’s recommendation for panels that are already loaded; manual moves focus and waits for Enter or Space, which is what a panel that fetches needs.",
472
+ "language": "ts",
473
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs, type TabsActivation } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst MODES: { activation: TabsActivation; caption: string }[] = [\n { activation: 'automatic', caption: 'Automatic: the arrow keys select as they move.' },\n { activation: 'manual', caption: 'Manual: the arrow keys move focus; Enter or Space selects.' },\n];\n\nconst REPORTS = [\n { value: 'revenue', label: 'Revenue', panel: 'Revenue this quarter: $412,800.00.' },\n { value: 'margin', label: 'Margin', panel: 'Gross margin this quarter: 38.4%.' },\n { value: 'returns', label: 'Returns', panel: 'Return rate this quarter: 2.1%.' },\n];\n\n@Component({\n selector: 'app-tabs-activation',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"8\">\n @for (mode of modes; track mode.activation) {\n <div slStack [gap]=\"3\">\n <span slText size=\"sm\" tone=\"muted\">{{ mode.caption }}</span>\n <div slTabs defaultValue=\"revenue\" [activation]=\"mode.activation\">\n <div slTabList aria-label=\"Quarterly reports\">\n @for (report of reports; track report.value) {\n <div slTab [value]=\"report.value\">{{ report.label }}</div>\n }\n </div>\n @for (report of reports; track report.value) {\n <div slTabPanel [value]=\"report.value\">\n <span slText size=\"sm\">{{ report.panel }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class TabsActivationExample {\n protected readonly modes = MODES;\n protected readonly reports = REPORTS;\n}\n",
474
+ "verdict": "example"
475
+ },
476
+ {
477
+ "id": "orientation",
478
+ "title": "Which way the list runs",
479
+ "note": "A horizontal list scrolls and refuses the up and down arrows, so the page keeps scrolling with focus inside it; a vertical one stacks, turns the track and the marker, and announces aria-orientation.",
480
+ "language": "html",
481
+ "source": "<div slTabs defaultValue=\"a\" orientation=\"vertical\">\n <div slTabList aria-label=\"Settings\">\n <div slTab value=\"a\">Profile</div>\n <div slTab value=\"b\">Notifications</div>\n </div>\n <div slTabPanel value=\"a\">Name and photo.</div>\n <div slTabPanel value=\"b\">Email notices.</div>\n</div>\n",
482
+ "verdict": "excerpt"
483
+ },
484
+ {
485
+ "id": "variant",
486
+ "title": "The two ways a list is drawn",
487
+ "note": "Line is a row of labels over a hairline; contained is a sunken track holding a surface per tab; and track=\"none\" keeps the labels and drops the hairline, for a list standing on a line the page already drew. All three keep the accent marker, which is what survives the high-contrast scheme after every surface flattens.",
488
+ "language": "html",
489
+ "source": "<div slTabs defaultValue=\"a\" variant=\"line\"></div>\n<div slTabs defaultValue=\"a\" variant=\"contained\"></div>\n\n<!-- Standing on a line the page already drew — a card header, a table's rule. -->\n<div slTabs defaultValue=\"a\" track=\"none\"></div>\n",
490
+ "verdict": "excerpt"
491
+ },
492
+ {
493
+ "id": "sizes",
494
+ "title": "The step the list sits at",
495
+ "note": "Height, type, padding and the inner gap all come from the control scales, so switching the toolbar to dense shrinks each step whole rather than in parts.",
496
+ "language": "ts",
497
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs, type TabsSize } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst SIZES: TabsSize[] = ['sm', 'md', 'lg'];\n\nconst VIEWS = [\n { value: 'stock', label: 'Stock', panel: '1,284 units on hand across 3 warehouses.' },\n { value: 'movements', label: 'Movements', panel: '46 movements in the last 7 days.' },\n {\n value: 'suppliers',\n label: 'Suppliers',\n panel: 'Ordered from Brightline Studio and Quill & Co.',\n },\n];\n\n@Component({\n selector: 'app-tabs-sizes',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"8\">\n @for (size of sizes; track size) {\n <div slTabs defaultValue=\"stock\" [size]=\"size\">\n <div slTabList aria-label=\"Product OAK-90\">\n @for (view of views; track view.value) {\n <div slTab [value]=\"view.value\">{{ view.label }}</div>\n }\n </div>\n @for (view of views; track view.value) {\n <div slTabPanel [value]=\"view.value\">\n <span slText size=\"sm\">{{ view.panel }}</span>\n </div>\n }\n </div>\n }\n </div>\n `,\n})\nexport class TabsSizes {\n protected readonly sizes = SIZES;\n protected readonly views = VIEWS;\n}\n",
498
+ "verdict": "example"
499
+ },
500
+ {
501
+ "id": "fit",
502
+ "title": "How the line is divided",
503
+ "note": "auto makes each tab as wide as its label and scrolls what does not fit; equal divides the line between them and is the one place a horizontal label is ever truncated.",
504
+ "language": "ts",
505
+ "source": "import { Component } from '@angular/core';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst QUEUES = [\n { value: 'incoming', label: 'Incoming', panel: '14 purchase orders due this week.' },\n { value: 'outgoing', label: 'Outgoing', panel: '32 sales orders ready to ship.' },\n {\n value: 'inspection',\n label: 'Awaiting inspection',\n panel: '3 returns wait for a quality check before restocking.',\n },\n];\n\n@Component({\n selector: 'app-tabs-fit',\n imports: [SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slTabs defaultValue=\"incoming\" fit=\"equal\" variant=\"contained\">\n <div slTabList aria-label=\"Warehouse queues\">\n @for (queue of queues; track queue.value) {\n <div slTab [value]=\"queue.value\">{{ queue.label }}</div>\n }\n </div>\n @for (queue of queues; track queue.value) {\n <div slTabPanel [value]=\"queue.value\">\n <span slText size=\"sm\">{{ queue.panel }}</span>\n </div>\n }\n </div>\n `,\n})\nexport class TabsFit {\n protected readonly queues = QUEUES;\n}\n",
506
+ "verdict": "example"
507
+ },
508
+ {
509
+ "id": "states",
510
+ "title": "Every state the family paints",
511
+ "note": "A tab that is not selected raises its ink on hover. In the line variant a neutral bar appears where the mark would go and darkens on press; in the contained variant the cell fills instead. A selected one does neither, because it is already at full strength. Disabled is the native attribute, which is also what makes the browser skip it.",
512
+ "language": "html",
513
+ "source": "<div slTabs defaultValue=\"a\">\n <div slTabList aria-label=\"Document\">\n <div slTab value=\"a\">Available</div>\n <div slTab value=\"b\" disabled>Unavailable</div>\n </div>\n <div slTabPanel value=\"a\">…</div>\n</div>\n\n<div slTabs defaultValue=\"a\" disabled></div>\n",
514
+ "verdict": "excerpt"
515
+ },
516
+ {
517
+ "id": "mount",
518
+ "title": "When a panel exists",
519
+ "note": "active builds the panel on selection and drops it after, lazy keeps it once built, eager builds every one up front. A panel holding a table or a chart is the reason the default is active.",
520
+ "language": "ts",
521
+ "source": "import { Component } from '@angular/core';\nimport { SlField, SlFieldLabel } from '@slotted/angular/field';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTab,\n SlTabList,\n SlTabPanel,\n SlTabPanelContent,\n SlTabs,\n type TabsMount,\n} from '@slotted/angular/tabs';\nimport { SlTextarea } from '@slotted/angular/textarea';\nimport { SlText } from '@slotted/angular/typography';\n\nconst MODES: { mount: TabsMount; caption: string }[] = [\n { mount: 'active', caption: 'mount=\"active\": the note is built again, empty, on return.' },\n { mount: 'lazy', caption: 'mount=\"lazy\": the note keeps what was typed.' },\n];\n\n@Component({\n selector: 'app-tabs-mount',\n imports: [\n SlField,\n SlFieldLabel,\n SlStack,\n SlTab,\n SlTabList,\n SlTabPanel,\n SlTabPanelContent,\n SlTabs,\n SlText,\n SlTextarea,\n ],\n template: `\n <div slStack [gap]=\"8\">\n @for (mode of modes; track mode.mount) {\n <div slStack [gap]=\"3\">\n <span slText size=\"sm\" tone=\"muted\">{{ mode.caption }}</span>\n <div slTabs defaultValue=\"note\" [mount]=\"mode.mount\">\n <div slTabList aria-label=\"Order SO-1187\">\n <div slTab value=\"note\">Picking note</div>\n <div slTab value=\"summary\">Summary</div>\n </div>\n <div slTabPanel value=\"note\">\n <ng-template slTabPanelContent>\n <div slField>\n <label slFieldLabel>Note for the picker</label>\n <textarea\n slTextarea\n placeholder=\"Pack the brackets separately\"\n rows=\"2\"\n ></textarea>\n </div>\n </ng-template>\n </div>\n <div slTabPanel value=\"summary\">\n <span slText size=\"sm\">3 lines, picked from zone C at Reno, NV.</span>\n </div>\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class TabsMountExample {\n protected readonly modes = MODES;\n}\n",
522
+ "verdict": "example"
523
+ },
524
+ {
525
+ "id": "dismissible",
526
+ "title": "Tabs a reader can close",
527
+ "note": "Delete closes the focused tab and the pointer closes it from the control; the family then asks for the neighbour — the following tab, or the preceding one when the closed tab was last — and removes nothing itself.",
528
+ "language": "ts",
529
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst OPEN = [\n { id: 'SO-1187', customer: 'Harbor & Pine', total: '$1,240.00' },\n { id: 'SO-1188', customer: 'Brightline Studio', total: '$318.50' },\n { id: 'SO-1190', customer: 'Northgate Labs', total: '$2,906.10' },\n { id: 'SO-1191', customer: 'Verde Kitchen', total: '$86.00' },\n];\n\n@Component({\n selector: 'app-tabs-dismissible',\n imports: [SlButton, SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n @if (orders().length === 0) {\n <div slStack [gap]=\"3\" align=\"start\">\n <span slText size=\"sm\" tone=\"muted\">No orders open.</span>\n <button slButton size=\"sm\" variant=\"outline\" (click)=\"reopen()\">Reopen orders</button>\n </div>\n } @else {\n <div\n slTabs\n [value]=\"active()\"\n (valueChange)=\"active.set($event.value ?? active())\"\n (tabDismiss)=\"close($event.value)\"\n >\n <div slTabList aria-label=\"Open orders\">\n @for (order of orders(); track order.id) {\n <div slTab dismissible [dismissLabel]=\"'Close ' + order.id\" [value]=\"order.id\">\n {{ order.id }}\n </div>\n }\n </div>\n @for (order of orders(); track order.id) {\n <div slTabPanel [value]=\"order.id\">\n <span slText size=\"sm\">{{ order.customer }}, {{ order.total }}.</span>\n </div>\n }\n </div>\n }\n `,\n})\nexport class TabsDismissible {\n protected readonly orders = signal(OPEN);\n protected readonly active = signal('SO-1188');\n\n protected close(id: string) {\n this.orders.update((open) => open.filter((order) => order.id !== id));\n }\n\n protected reopen() {\n this.orders.set(OPEN);\n this.active.set('SO-1187');\n }\n}\n",
530
+ "verdict": "example"
531
+ },
532
+ {
533
+ "id": "overflow",
534
+ "title": "A list that does not fit",
535
+ "note": "The list scrolls rather than wrapping or truncating, two paging controls appear only while there is somewhere to scroll, and the arrow keys bring each tab into view as focus reaches it.",
536
+ "language": "ts",
537
+ "source": "import { Component } from '@angular/core';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst WAREHOUSES = [\n { code: 'RNO', city: 'Reno, NV', open: 42 },\n { code: 'CMH', city: 'Columbus, OH', open: 37 },\n { code: 'SAV', city: 'Savannah, GA', open: 18 },\n { code: 'DFW', city: 'Dallas, TX', open: 51 },\n { code: 'EWR', city: 'Newark, NJ', open: 29 },\n { code: 'ONT', city: 'Ontario, CA', open: 64 },\n { code: 'JOT', city: 'Joliet, IL', open: 23 },\n { code: 'MEM', city: 'Memphis, TN', open: 46 },\n { code: 'ABE', city: 'Allentown, PA', open: 12 },\n { code: 'TIW', city: 'Tacoma, WA', open: 31 },\n { code: 'SCK', city: 'Stockton, CA', open: 9 },\n { code: 'IND', city: 'Indianapolis, IN', open: 27 },\n];\n\n@Component({\n selector: 'app-tabs-overflow',\n imports: [SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slTabs defaultValue=\"MEM\">\n <div slTabList aria-label=\"Warehouses\">\n @for (warehouse of warehouses; track warehouse.code) {\n <div slTab [value]=\"warehouse.code\">{{ warehouse.city }}</div>\n }\n </div>\n @for (warehouse of warehouses; track warehouse.code) {\n <div slTabPanel [value]=\"warehouse.code\">\n <span slText size=\"sm\"\n >{{ warehouse.code }}: {{ warehouse.open }} open orders to ship today.</span\n >\n </div>\n }\n </div>\n `,\n})\nexport class TabsOverflow {\n protected readonly warehouses = WAREHOUSES;\n}\n",
538
+ "verdict": "example"
539
+ },
540
+ {
541
+ "id": "links",
542
+ "title": "A view a router can deep-link to",
543
+ "note": "href makes the control an anchor, so the destination is real: a plain click selects, and a click carrying a modifier key is left to the browser, which opens the view in a new browser tab.",
544
+ "language": "ts",
545
+ "source": "import { Component } from '@angular/core';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst VIEWS = [\n { value: 'summary', label: 'Summary', panel: 'Harbor & Pine, $1,240.00, Net 30.' },\n { value: 'items', label: 'Items', panel: '3 lines: shelves, brackets and an assembly kit.' },\n { value: 'shipments', label: 'Shipments', panel: 'Atlas Freight, expected September 12.' },\n];\n\n@Component({\n selector: 'app-tabs-links',\n imports: [SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slTabs defaultValue=\"summary\">\n <div slTabList aria-label=\"Order SO-1187\">\n @for (view of views; track view.value) {\n <div slTab [value]=\"view.value\" [href]=\"'#order-' + view.value\">{{ view.label }}</div>\n }\n </div>\n @for (view of views; track view.value) {\n <div slTabPanel [value]=\"view.value\">\n <span slText size=\"sm\">{{ view.panel }}</span>\n </div>\n }\n </div>\n `,\n})\nexport class TabsLinks {\n protected readonly views = VIEWS;\n}\n",
546
+ "verdict": "example"
547
+ },
548
+ {
549
+ "id": "content",
550
+ "title": "Content the family did not choose",
551
+ "note": "An unbroken digest breaks inside its own tab instead of setting the list’s width, a right-to-left label reads its own way inside a page that reads the other, and a long label scrolls rather than wrapping.",
552
+ "language": "html",
553
+ "source": "<div slTabs defaultValue=\"a\">\n <div slTabList aria-label=\"Extreme content\">\n <div slTab value=\"a\">sha256:9f86d081884c7d659a2feaa0c55ad015</div>\n <div slTab value=\"b\">بيانات التسليم</div>\n </div>\n</div>\n",
554
+ "verdict": "excerpt"
555
+ },
556
+ {
557
+ "id": "composition",
558
+ "title": "Setting it once, and reaching past it",
559
+ "note": "The provider carries the seven decisions an application takes once, render substitutes every root so a list can be a real nav, and the actions slot is where a Toolbar goes.",
560
+ "language": "ts",
561
+ "source": "// One decision for every family in the application, in the bootstrap file.\nbootstrapApplication(App, {\n providers: [provideTabsDefaults({ size: 'sm', variant: 'contained' })],\n});\n\n// And in a template, the slot beside the list is where a toolbar goes:\n// <div slTabActions><div slToolbar aria-label=\"Actions\">…</div></div>\n",
562
+ "verdict": "excerpt"
563
+ },
564
+ {
565
+ "id": "keyboard",
566
+ "title": "The APG table, and where focus lands",
567
+ "note": "Tab enters on the selected tab and leaves to the panel, the arrows of the flow axis move and wrap, Home and End reach the ends, and Delete closes a dismissible tab and moves focus to its neighbour.",
568
+ "language": "ts",
569
+ "source": "import { Component, signal } from '@angular/core';\nimport type { ChangeRequest } from '@slotted/core/state';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst STEPS = [\n { value: 'picking', label: 'Picking', panel: '18 lines to pick in zone C.' },\n { value: 'packing', label: 'Packing', panel: '6 orders waiting at station 2.' },\n { value: 'loading', label: 'Loading', panel: 'Atlas Freight trailer at dock 4 until 15:30.' },\n];\n\n@Component({\n selector: 'app-tabs-keyboard',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"5\">\n <div slTabs defaultValue=\"picking\" (valueChange)=\"report($event)\">\n <div slTabList aria-label=\"Outbound shift\">\n @for (step of steps; track step.value) {\n <div slTab [value]=\"step.value\">{{ step.label }}</div>\n }\n </div>\n @for (step of steps; track step.value) {\n <div slTabPanel [value]=\"step.value\">\n <span slText size=\"sm\">{{ step.panel }}</span>\n </div>\n }\n </div>\n <span slText size=\"sm\" tone=\"muted\">{{ last() }}</span>\n </div>\n `,\n})\nexport class TabsKeyboard {\n protected readonly steps = STEPS;\n protected readonly last = signal('Nothing selected yet.');\n\n protected report(request: ChangeRequest<string | undefined>) {\n const step = STEPS.find((item) => item.value === request.value);\n this.last.set(`${step?.label} selected by ${request.reason}.`);\n }\n}\n",
570
+ "verdict": "example"
571
+ },
572
+ {
573
+ "id": "actions",
574
+ "title": "actions.ts",
575
+ "note": null,
576
+ "language": "ts",
577
+ "source": "import { Component } from '@angular/core';\nimport { SlButton, SlButtonStart } from '@slotted/angular/button';\nimport { SlGlyph } from '@slotted/angular/icon';\nimport { SlTab, SlTabActions, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlToolbar } from '@slotted/angular/toolbar';\nimport { SlText } from '@slotted/angular/typography';\n\nconst VIEWS = [\n { value: 'lines', label: 'Lines', panel: '6 lines from Quill & Co., $4,812.00.' },\n { value: 'receipts', label: 'Receipts', panel: '4 of 6 lines received at Columbus, OH.' },\n { value: 'history', label: 'History', panel: 'Approved by Marco Ilić on September 22.' },\n];\n\n@Component({\n selector: 'app-tabs-actions',\n imports: [\n SlButton,\n SlButtonStart,\n SlGlyph,\n SlTab,\n SlTabActions,\n SlTabList,\n SlTabPanel,\n SlTabs,\n SlText,\n SlToolbar,\n ],\n template: `\n <div slTabs defaultValue=\"lines\">\n <div slTabList aria-label=\"Purchase order PO-4521\">\n @for (view of views; track view.value) {\n <div slTab [value]=\"view.value\">{{ view.label }}</div>\n }\n </div>\n <div slTabActions>\n <div slToolbar aria-label=\"Purchase order actions\" size=\"sm\">\n <button slButton size=\"sm\" tone=\"secondary\" variant=\"ghost\">\n <span slButtonStart><svg slGlyph name=\"upload\"></svg></span>\n Export\n </button>\n <button slButton size=\"sm\" tone=\"secondary\" variant=\"ghost\">\n <span slButtonStart><svg slGlyph name=\"copy\"></svg></span>\n Duplicate\n </button>\n </div>\n </div>\n @for (view of views; track view.value) {\n <div slTabPanel [value]=\"view.value\">\n <span slText size=\"sm\">{{ view.panel }}</span>\n </div>\n }\n </div>\n `,\n})\nexport class TabsActionsExample {\n protected readonly views = VIEWS;\n}\n",
578
+ "verdict": "example"
579
+ },
580
+ {
581
+ "id": "basic",
582
+ "title": "basic.ts",
583
+ "note": null,
584
+ "language": "ts",
585
+ "source": "import { Component } from '@angular/core';\nimport {\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n} from '@slotted/angular/description-list';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst SECTIONS = [\n {\n value: 'summary',\n label: 'Summary',\n pairs: [\n ['Customer', 'Harbor & Pine'],\n ['Placed', 'September 8, 2026'],\n ['Payment terms', 'Net 30'],\n ['Total', '$1,240.00'],\n ],\n },\n {\n value: 'items',\n label: 'Items',\n pairs: [\n ['Oak shelf, 90 cm', '4 × $180.00'],\n ['Wall bracket, steel', '8 × $24.00'],\n ['Assembly kit', '1 × $328.00'],\n ],\n },\n {\n value: 'shipments',\n label: 'Shipments',\n pairs: [\n ['Carrier', 'Atlas Freight'],\n ['Tracking', 'AF-2210-4471'],\n ['Expected', 'September 12, 2026'],\n ],\n },\n];\n\nconst ACTIVITY = [\n 'Sep 9, 14:02 — Picked at Reno, NV',\n 'Sep 8, 16:45 — Payment approved',\n 'Sep 8, 16:41 — Order placed by Dana Whitfield',\n];\n\n@Component({\n selector: 'app-tabs-basic',\n imports: [\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n SlStack,\n SlTab,\n SlTabList,\n SlTabPanel,\n SlTabs,\n SlText,\n ],\n template: `\n <div slTabs defaultValue=\"summary\">\n <div slTabList aria-label=\"Order SO-1187\">\n @for (section of sections; track section.value) {\n <div slTab [value]=\"section.value\">{{ section.label }}</div>\n }\n <div slTab value=\"activity\">Activity</div>\n </div>\n @for (section of sections; track section.value) {\n <div slTabPanel [value]=\"section.value\">\n <div slDescriptionList>\n @for (pair of section.pairs; track pair[0]) {\n <div slDescriptionListItem>\n <dt slDescriptionListTerm>{{ pair[0] }}</dt>\n <dd slDescriptionListDescription>{{ pair[1] }}</dd>\n </div>\n }\n </div>\n </div>\n }\n <div slTabPanel value=\"activity\">\n <div slStack [gap]=\"2\">\n @for (entry of activity; track entry) {\n <span slText size=\"sm\">{{ entry }}</span>\n }\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsBasic {\n protected readonly sections = SECTIONS;\n protected readonly activity = ACTIVITY;\n}\n",
586
+ "verdict": "example"
587
+ },
588
+ {
589
+ "id": "controlled",
590
+ "title": "controlled.ts",
591
+ "note": null,
592
+ "language": "ts",
593
+ "source": "import { Component, signal } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst VIEWS = [\n { value: 'orders', label: 'Orders', panel: '12 open orders, $14,380.00 in total.' },\n {\n value: 'invoices',\n label: 'Invoices',\n panel: 'INV-20877 and INV-20902 are past due: $2,146.50.',\n },\n { value: 'payments', label: 'Payments', panel: 'Last payment: $3,200.00 on September 30.' },\n];\n\n@Component({\n selector: 'app-tabs-controlled',\n imports: [SlButton, SlInline, SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"5\">\n <div slInline [gap]=\"3\" align=\"center\" justify=\"between\">\n <span slText size=\"sm\" tone=\"muted\">2 invoices are past due.</span>\n <button slButton size=\"sm\" variant=\"outline\" (click)=\"view.set('invoices')\">\n Review invoices\n </button>\n </div>\n <div slTabs [value]=\"view()\" (valueChange)=\"view.set($event.value ?? view())\">\n <div slTabList aria-label=\"Account Harbor & Pine\">\n @for (item of views; track item.value) {\n <div slTab [value]=\"item.value\">{{ item.label }}</div>\n }\n </div>\n @for (item of views; track item.value) {\n <div slTabPanel [value]=\"item.value\">\n <span slText size=\"sm\">{{ item.panel }}</span>\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class TabsControlled {\n protected readonly views = VIEWS;\n protected readonly view = signal('orders');\n}\n",
594
+ "verdict": "example"
595
+ },
596
+ {
597
+ "id": "defaults",
598
+ "title": "defaults.ts",
599
+ "note": null,
600
+ "language": "ts",
601
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport { provideTabsDefaults, SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\n@Component({\n selector: 'app-tabs-defaults',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n providers: [provideTabsDefaults({ size: 'sm', variant: 'contained' })],\n template: `\n <div slStack [gap]=\"8\">\n <div slTabs defaultValue=\"stock\">\n <div slTabList aria-label=\"Product OAK-90\">\n <div slTab value=\"stock\">Stock</div>\n <div slTab value=\"pricing\">Pricing</div>\n </div>\n <div slTabPanel value=\"stock\">\n <span slText size=\"sm\">1,284 units on hand.</span>\n </div>\n <div slTabPanel value=\"pricing\">\n <span slText size=\"sm\">List price $180.00, cost $96.40.</span>\n </div>\n </div>\n <div slTabs defaultValue=\"open\" variant=\"line\">\n <div slTabList aria-label=\"Purchase orders\">\n <div slTab value=\"open\">Open</div>\n <div slTab value=\"received\">Received</div>\n </div>\n <div slTabPanel value=\"open\">\n <span slText size=\"sm\">3 purchase orders for OAK-90 are open.</span>\n </div>\n <div slTabPanel value=\"received\">\n <span slText size=\"sm\">Last received on September 22: 400 units.</span>\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsDefaults {}\n",
602
+ "verdict": "example"
603
+ },
604
+ {
605
+ "id": "disabled",
606
+ "title": "disabled.ts",
607
+ "note": null,
608
+ "language": "ts",
609
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\n@Component({\n selector: 'app-tabs-disabled',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"8\">\n <div slTabs defaultValue=\"summary\">\n <div slTabList aria-label=\"Order SO-1192\">\n <div slTab value=\"summary\">Summary</div>\n <div slTab value=\"items\">Items</div>\n <div slTab value=\"invoice\" disabled>Invoice</div>\n </div>\n <div slTabPanel value=\"summary\">\n <span slText size=\"sm\">Awaiting pickup. The invoice is issued once the order ships.</span>\n </div>\n <div slTabPanel value=\"items\">\n <span slText size=\"sm\">5 items from the Reno, NV warehouse.</span>\n </div>\n <div slTabPanel value=\"invoice\">\n <span slText size=\"sm\">Invoice INV-20931.</span>\n </div>\n </div>\n <div slTabs defaultValue=\"summary\" disabled>\n <div slTabList aria-label=\"Order SO-1188\">\n <div slTab value=\"summary\">Summary</div>\n <div slTab value=\"items\">Items</div>\n <div slTab value=\"invoice\">Invoice</div>\n </div>\n <div slTabPanel value=\"summary\">\n <span slText size=\"sm\">Locked while the warehouse recounts this order.</span>\n </div>\n <div slTabPanel value=\"items\">\n <span slText size=\"sm\">2 items from the Columbus, OH warehouse.</span>\n </div>\n <div slTabPanel value=\"invoice\">\n <span slText size=\"sm\">Invoice INV-20917.</span>\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsDisabled {}\n",
610
+ "verdict": "example"
611
+ },
612
+ {
613
+ "id": "filter",
614
+ "title": "filter.ts",
615
+ "note": null,
616
+ "language": "ts",
617
+ "source": "import { Component, computed, signal } from '@angular/core';\nimport { SlBadge } from '@slotted/angular/badge';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n} from '@slotted/angular/table';\nimport { SlTab, SlTabEnd, SlTabList, SlTabs } from '@slotted/angular/tabs';\n\nconst ORDERS = [\n { id: 'SO-1187', customer: 'Harbor & Pine', status: 'open', total: '$1,240.00' },\n { id: 'SO-1188', customer: 'Brightline Studio', status: 'shipped', total: '$318.50' },\n { id: 'SO-1190', customer: 'Northgate Labs', status: 'open', total: '$2,906.10' },\n { id: 'SO-1191', customer: 'Verde Kitchen', status: 'delayed', total: '$86.00' },\n { id: 'SO-1193', customer: 'Quill & Co.', status: 'shipped', total: '$540.25' },\n];\n\nconst FILTERS = [\n { value: 'all', label: 'All' },\n { value: 'open', label: 'Open' },\n { value: 'delayed', label: 'Delayed' },\n { value: 'shipped', label: 'Shipped' },\n];\n\nconst STATUS: Record<string, string> = { open: 'Open', delayed: 'Delayed', shipped: 'Shipped' };\n\nconst matching = (filter: string) =>\n filter === 'all' ? ORDERS : ORDERS.filter((order) => order.status === filter);\n\n@Component({\n selector: 'app-tabs-filter',\n imports: [\n SlBadge,\n SlStack,\n SlTab,\n SlTabEnd,\n SlTabList,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n SlTabs,\n ],\n template: `\n <div slStack [gap]=\"4\">\n <div slTabs size=\"sm\" [value]=\"filter()\" (valueChange)=\"filter.set($event.value ?? filter())\">\n <div slTabList aria-label=\"Orders by status\">\n @for (item of filters; track item.value) {\n <div slTab controls=\"orders-by-status\" [value]=\"item.value\">\n {{ item.label }}\n <span slTabEnd\n ><span slBadge showZero size=\"sm\" [count]=\"matching(item.value).length\"></span\n ></span>\n </div>\n }\n </div>\n </div>\n <div slTable id=\"orders-by-status\" [columns]=\"4\">\n <div slTableContent aria-label=\"Orders\">\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>Order</th>\n <th slTableColumnHeader>Customer</th>\n <th slTableColumnHeader>Status</th>\n <th slTableColumnHeader numeric>Total</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (order of rows(); track order.id) {\n <tr slTableRow [value]=\"order.id\">\n <th slTableRowHeader>{{ order.id }}</th>\n <td slTableCell>{{ order.customer }}</td>\n <td slTableCell>{{ status[order.status] }}</td>\n <td slTableCell numeric>{{ order.total }}</td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsFilter {\n protected readonly filters = FILTERS;\n protected readonly status = STATUS;\n protected readonly matching = matching;\n protected readonly filter = signal('all');\n protected readonly rows = computed(() => matching(this.filter()));\n}\n",
618
+ "verdict": "example"
619
+ },
620
+ {
621
+ "id": "icons",
622
+ "title": "icons.ts",
623
+ "note": null,
624
+ "language": "ts",
625
+ "source": "import { Component } from '@angular/core';\nimport { SlBadge } from '@slotted/angular/badge';\nimport { SlGlyph, SlIcon, type GlyphName } from '@slotted/angular/icon';\nimport { SlTab, SlTabEnd, SlTabList, SlTabPanel, SlTabs, SlTabStart } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst VIEWS: { value: string; label: string; icon: GlyphName; count?: number; panel: string }[] = [\n {\n value: 'overview',\n label: 'Overview',\n icon: 'file-text',\n panel: 'Harbor & Pine, customer since 2021. Net 30 terms.',\n },\n {\n value: 'orders',\n label: 'Orders',\n icon: 'inbox',\n count: 12,\n panel: '12 open orders, $14,380.00 in total.',\n },\n {\n value: 'contacts',\n label: 'Contacts',\n icon: 'person',\n count: 3,\n panel: 'Dana Whitfield, Marco Ilić and Priya Raman.',\n },\n {\n value: 'files',\n label: 'Files',\n icon: 'paperclip',\n panel: 'Signed credit application and a W-9 form.',\n },\n];\n\n@Component({\n selector: 'app-tabs-icons',\n imports: [\n SlBadge,\n SlGlyph,\n SlIcon,\n SlTab,\n SlTabEnd,\n SlTabList,\n SlTabPanel,\n SlTabs,\n SlTabStart,\n SlText,\n ],\n template: `\n <div slTabs defaultValue=\"orders\">\n <div slTabList aria-label=\"Customer Harbor & Pine\">\n @for (view of views; track view.value) {\n <div slTab [value]=\"view.value\">\n <span slTabStart\n ><span slIcon><svg slGlyph [name]=\"view.icon\"></svg></span\n ></span>\n {{ view.label }}\n @if (view.count !== undefined) {\n <span slTabEnd><span slBadge size=\"sm\" [count]=\"view.count\"></span></span>\n }\n </div>\n }\n </div>\n @for (view of views; track view.value) {\n <div slTabPanel [value]=\"view.value\">\n <span slText size=\"sm\">{{ view.panel }}</span>\n </div>\n }\n </div>\n `,\n})\nexport class TabsIcons {\n protected readonly views = VIEWS;\n}\n",
626
+ "verdict": "example"
627
+ },
628
+ {
629
+ "id": "record-header",
630
+ "title": "record-header.ts",
631
+ "note": null,
632
+ "language": "ts",
633
+ "source": "import { Component } from '@angular/core';\nimport { SlBadge } from '@slotted/angular/badge';\nimport { SlButton, SlButtonStart } from '@slotted/angular/button';\nimport {\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n} from '@slotted/angular/description-list';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlInline } from '@slotted/angular/inline';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n} from '@slotted/angular/table';\nimport { SlTab, SlTabEnd, SlTabList, SlTabPanel, SlTabs, SlTabStart } from '@slotted/angular/tabs';\nimport { SlHeading, SlText } from '@slotted/angular/typography';\n\nconst FACTS = [\n ['Customer', 'Harbor & Pine'],\n ['Placed', 'September 8, 2026'],\n ['Payment terms', 'Net 30'],\n ['Ship to', '88 Dock Street, Portland, OR'],\n ['Carrier', 'Atlas Freight'],\n ['Total', '$1,240.00'],\n];\n\nconst LINES = [\n { sku: 'OAK-90', item: 'Oak shelf, 90 cm', quantity: 4, amount: '$720.00' },\n { sku: 'BRK-ST', item: 'Wall bracket, steel', quantity: 8, amount: '$192.00' },\n { sku: 'KIT-AS', item: 'Assembly kit', quantity: 1, amount: '$328.00' },\n];\n\nconst ACTIVITY = [\n 'Sep 9, 14:02 — Picked at Reno, NV by Luis Ortega',\n 'Sep 8, 16:45 — Payment approved',\n 'Sep 8, 16:41 — Order placed by Dana Whitfield',\n];\n\n@Component({\n selector: 'app-tabs-record-header',\n imports: [\n SlBadge,\n SlButton,\n SlButtonStart,\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n SlGlyph,\n SlHeading,\n SlIcon,\n SlInline,\n SlStack,\n SlTab,\n SlTabEnd,\n SlTabList,\n SlTabPanel,\n SlTable,\n SlTableBody,\n SlTableCell,\n SlTableColumnHeader,\n SlTableContent,\n SlTableHead,\n SlTableRow,\n SlTableRowHeader,\n SlTabs,\n SlTabStart,\n SlText,\n ],\n template: `\n <div slStack [gap]=\"6\">\n <div slInline [gap]=\"4\" align=\"start\" justify=\"between\" wrap=\"wrap\">\n <div slStack [gap]=\"1\">\n <div slInline [gap]=\"3\" align=\"center\">\n <h2 slHeading size=\"xl\">Order SO-1187</h2>\n <span slBadge tone=\"warning\">Awaiting pickup</span>\n </div>\n <span slText size=\"sm\" tone=\"muted\">Harbor & Pine · Placed September 8, 2026</span>\n </div>\n <div slInline [gap]=\"2\">\n <button slButton size=\"sm\" tone=\"secondary\" variant=\"outline\">\n <span slButtonStart><svg slGlyph name=\"file-text\"></svg></span>\n Packing slip\n </button>\n <button slButton size=\"sm\">Mark shipped</button>\n </div>\n </div>\n <div slTabs defaultValue=\"overview\">\n <div slTabList aria-label=\"Order SO-1187\">\n <div slTab value=\"overview\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"file-text\"></svg></span\n ></span>\n Overview\n </div>\n <div slTab value=\"items\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"inbox\"></svg></span\n ></span>\n Items\n <span slTabEnd><span slBadge size=\"sm\" [count]=\"lines.length\"></span></span>\n </div>\n <div slTab value=\"activity\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"clock\"></svg></span\n ></span>\n Activity\n <span slTabEnd><span slBadge size=\"sm\" [count]=\"activity.length\"></span></span>\n </div>\n </div>\n <div slTabPanel value=\"overview\">\n <div slDescriptionList [columns]=\"2\">\n @for (fact of facts; track fact[0]) {\n <div slDescriptionListItem>\n <dt slDescriptionListTerm>{{ fact[0] }}</dt>\n <dd slDescriptionListDescription>{{ fact[1] }}</dd>\n </div>\n }\n </div>\n </div>\n <div slTabPanel value=\"items\">\n <div slTable [columns]=\"4\">\n <div slTableContent aria-label=\"Order lines\">\n <thead slTableHead>\n <tr slTableRow>\n <th slTableColumnHeader>SKU</th>\n <th slTableColumnHeader>Item</th>\n <th slTableColumnHeader numeric>Quantity</th>\n <th slTableColumnHeader numeric>Amount</th>\n </tr>\n </thead>\n <tbody slTableBody>\n @for (line of lines; track line.sku) {\n <tr slTableRow [value]=\"line.sku\">\n <th slTableRowHeader>{{ line.sku }}</th>\n <td slTableCell>{{ line.item }}</td>\n <td slTableCell numeric>{{ line.quantity }}</td>\n <td slTableCell numeric>{{ line.amount }}</td>\n </tr>\n }\n </tbody>\n </div>\n </div>\n </div>\n <div slTabPanel value=\"activity\">\n <div slStack [gap]=\"2\">\n @for (entry of activity; track entry) {\n <span slText size=\"sm\">{{ entry }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsRecordHeader {\n protected readonly facts = FACTS;\n protected readonly lines = LINES;\n protected readonly activity = ACTIVITY;\n}\n",
634
+ "verdict": "example"
635
+ },
636
+ {
637
+ "id": "settings",
638
+ "title": "settings.ts",
639
+ "note": null,
640
+ "language": "ts",
641
+ "source": "import { Component } from '@angular/core';\nimport { SlButton } from '@slotted/angular/button';\nimport {\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n} from '@slotted/angular/description-list';\nimport { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlSwitch } from '@slotted/angular/switch';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs, SlTabStart } from '@slotted/angular/tabs';\nimport { SlTextField, SlTextFieldInput } from '@slotted/angular/text-field';\nimport { SlHeading, SlText } from '@slotted/angular/typography';\n\nconst PLAN = [\n ['Plan', 'Operations, annual'],\n ['Seats', '24 of 30 in use'],\n ['Next invoice', 'November 1, 2026: $4,320.00'],\n];\n\n@Component({\n selector: 'app-tabs-settings',\n imports: [\n SlButton,\n SlDescriptionList,\n SlDescriptionListDescription,\n SlDescriptionListItem,\n SlDescriptionListTerm,\n SlField,\n SlFieldDescription,\n SlFieldLabel,\n SlGlyph,\n SlHeading,\n SlIcon,\n SlStack,\n SlSwitch,\n SlTab,\n SlTabList,\n SlTabPanel,\n SlTabs,\n SlTabStart,\n SlText,\n SlTextField,\n SlTextFieldInput,\n ],\n template: `\n <div slTabs defaultValue=\"workspace\" orientation=\"vertical\">\n <div slTabList aria-label=\"Settings\">\n <div slTab value=\"workspace\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"file-text\"></svg></span\n ></span>\n Workspace\n </div>\n <div slTab value=\"notifications\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"bell\"></svg></span\n ></span>\n Notifications\n </div>\n <div slTab value=\"security\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"lock\"></svg></span\n ></span>\n Security\n </div>\n <div slTab value=\"billing\">\n <span slTabStart\n ><span slIcon><svg slGlyph name=\"calendar\"></svg></span\n ></span>\n Billing\n </div>\n </div>\n <div slTabPanel value=\"workspace\">\n <div slStack [gap]=\"5\" align=\"start\">\n <h3 slHeading size=\"md\">Workspace</h3>\n <div slField>\n <label slFieldLabel>Company name</label>\n <div slTextField>\n <input slTextFieldInput defaultValue=\"Northwind Traders\" />\n </div>\n <span slFieldDescription>Printed on every invoice and packing slip.</span>\n </div>\n <div slField>\n <label slFieldLabel>Support email</label>\n <div slTextField>\n <input slTextFieldInput defaultValue=\"support@northwind.example\" type=\"email\" />\n </div>\n </div>\n <button slButton size=\"sm\">Save changes</button>\n </div>\n </div>\n <div slTabPanel value=\"notifications\">\n <div slStack [gap]=\"4\">\n <h3 slHeading size=\"md\">Notifications</h3>\n <span slSwitch defaultChecked>Low stock</span>\n <span slSwitch defaultChecked>Late pickups</span>\n <span slSwitch>Cycle count variances</span>\n </div>\n </div>\n <div slTabPanel value=\"security\">\n <div slStack [gap]=\"4\">\n <h3 slHeading size=\"md\">Security</h3>\n <span slSwitch defaultChecked>Require two-factor sign-in</span>\n <span slText size=\"sm\" tone=\"muted\">Changed by Dana Whitfield on August 14.</span>\n </div>\n </div>\n <div slTabPanel value=\"billing\">\n <div slStack [gap]=\"4\">\n <h3 slHeading size=\"md\">Billing</h3>\n <div slDescriptionList>\n @for (row of plan; track row[0]) {\n <div slDescriptionListItem>\n <dt slDescriptionListTerm>{{ row[0] }}</dt>\n <dd slDescriptionListDescription>{{ row[1] }}</dd>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n `,\n})\nexport class TabsSettings {\n protected readonly plan = PLAN;\n}\n",
642
+ "verdict": "example"
643
+ },
644
+ {
645
+ "id": "variants",
646
+ "title": "variants.ts",
647
+ "note": null,
648
+ "language": "ts",
649
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport {\n SlTab,\n SlTabList,\n SlTabPanel,\n SlTabs,\n type TabsTrack,\n type TabsVariant,\n} from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst LOOKS: { variant: TabsVariant; track: TabsTrack }[] = [\n { variant: 'line', track: 'line' },\n { variant: 'contained', track: 'line' },\n { variant: 'line', track: 'none' },\n];\n\nconst QUEUES = [\n { value: 'incoming', label: 'Incoming', panel: '14 purchase orders due this week.' },\n { value: 'outgoing', label: 'Outgoing', panel: '32 sales orders ready to ship.' },\n { value: 'returns', label: 'Returns', panel: '3 returns awaiting inspection.' },\n];\n\n@Component({\n selector: 'app-tabs-variants',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slStack [gap]=\"8\">\n @for (look of looks; track $index) {\n <div slTabs defaultValue=\"incoming\" [track]=\"look.track\" [variant]=\"look.variant\">\n <div slTabList aria-label=\"Warehouse queues\">\n @for (queue of queues; track queue.value) {\n <div slTab [value]=\"queue.value\">{{ queue.label }}</div>\n }\n </div>\n @for (queue of queues; track queue.value) {\n <div slTabPanel [value]=\"queue.value\">\n <span slText size=\"sm\">{{ queue.panel }}</span>\n </div>\n }\n </div>\n }\n </div>\n `,\n})\nexport class TabsVariants {\n protected readonly looks = LOOKS;\n protected readonly queues = QUEUES;\n}\n",
650
+ "verdict": "example"
651
+ },
652
+ {
653
+ "id": "vertical",
654
+ "title": "vertical.ts",
655
+ "note": null,
656
+ "language": "ts",
657
+ "source": "import { Component } from '@angular/core';\nimport { SlStack } from '@slotted/angular/stack';\nimport { SlTab, SlTabList, SlTabPanel, SlTabs } from '@slotted/angular/tabs';\nimport { SlText } from '@slotted/angular/typography';\n\nconst SECTIONS = [\n {\n value: 'general',\n label: 'General',\n lines: ['Code: RNO', 'Address: 1450 Terminal Way, Reno, NV 89502', 'Time zone: Pacific Time'],\n },\n {\n value: 'receiving',\n label: 'Receiving',\n lines: ['Dock hours: 06:00–14:00, Monday to Friday', 'Appointment required for full trucks'],\n },\n {\n value: 'shipping',\n label: 'Shipping',\n lines: ['Carriers: Atlas Freight, Ridgeway Parcel', 'Daily cut-off: 15:30'],\n },\n {\n value: 'storage',\n label: 'Storage',\n lines: ['Zones: A–F, 1,920 bin locations', 'Cycle count: every 30 days'],\n },\n];\n\n@Component({\n selector: 'app-tabs-vertical',\n imports: [SlStack, SlTab, SlTabList, SlTabPanel, SlTabs, SlText],\n template: `\n <div slTabs defaultValue=\"general\" orientation=\"vertical\">\n <div slTabList aria-label=\"Warehouse settings\">\n @for (section of sections; track section.value) {\n <div slTab [value]=\"section.value\">{{ section.label }}</div>\n }\n </div>\n @for (section of sections; track section.value) {\n <div slTabPanel [value]=\"section.value\">\n <div slStack [gap]=\"2\">\n @for (line of section.lines; track line) {\n <span slText size=\"sm\">{{ line }}</span>\n }\n </div>\n </div>\n }\n </div>\n `,\n})\nexport class TabsVertical {\n protected readonly sections = SECTIONS;\n}\n",
658
+ "verdict": "example"
659
+ }
660
+ ]
661
+ }