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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (793) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -2
  3. package/docs/AGENTS.snippet.md +10 -0
  4. package/docs/accordion.json +345 -0
  5. package/docs/accordion.md +207 -0
  6. package/docs/action-bar.json +421 -0
  7. package/docs/action-bar.md +364 -0
  8. package/docs/action-sheet.json +210 -0
  9. package/docs/action-sheet.md +19 -0
  10. package/docs/alert.json +407 -0
  11. package/docs/alert.md +239 -0
  12. package/docs/app-shell.examples.md +349 -0
  13. package/docs/app-shell.json +835 -0
  14. package/docs/app-shell.md +214 -0
  15. package/docs/aspect-ratio.json +159 -0
  16. package/docs/aspect-ratio.md +134 -0
  17. package/docs/attachment.json +486 -0
  18. package/docs/attachment.md +253 -0
  19. package/docs/avatar-group.json +208 -0
  20. package/docs/avatar-group.md +130 -0
  21. package/docs/avatar.json +342 -0
  22. package/docs/avatar.md +142 -0
  23. package/docs/badge.json +334 -0
  24. package/docs/badge.md +138 -0
  25. package/docs/breadcrumb.json +368 -0
  26. package/docs/breadcrumb.md +237 -0
  27. package/docs/button-group.json +158 -0
  28. package/docs/button-group.md +72 -0
  29. package/docs/button.examples.md +621 -0
  30. package/docs/button.json +977 -0
  31. package/docs/button.md +200 -0
  32. package/docs/calendar.json +592 -0
  33. package/docs/calendar.md +242 -0
  34. package/docs/card.json +283 -0
  35. package/docs/card.md +130 -0
  36. package/docs/carousel.json +560 -0
  37. package/docs/carousel.md +357 -0
  38. package/docs/cascader.json +933 -0
  39. package/docs/cascader.md +379 -0
  40. package/docs/chart.examples.md +582 -0
  41. package/docs/chart.json +1359 -0
  42. package/docs/chart.md +187 -0
  43. package/docs/checkbox-group.examples.md +612 -0
  44. package/docs/checkbox-group.json +395 -0
  45. package/docs/checkbox-group.md +106 -0
  46. package/docs/checkbox.examples.md +546 -0
  47. package/docs/checkbox.json +506 -0
  48. package/docs/checkbox.md +104 -0
  49. package/docs/code-block.json +616 -0
  50. package/docs/code-block.md +303 -0
  51. package/docs/collapsible.json +456 -0
  52. package/docs/collapsible.md +261 -0
  53. package/docs/color-picker.json +523 -0
  54. package/docs/color-picker.md +201 -0
  55. package/docs/column-manager.json +486 -0
  56. package/docs/column-manager.md +277 -0
  57. package/docs/combobox.examples.md +1732 -0
  58. package/docs/combobox.json +1250 -0
  59. package/docs/combobox.md +209 -0
  60. package/docs/command-palette.json +800 -0
  61. package/docs/command-palette.md +419 -0
  62. package/docs/container.json +156 -0
  63. package/docs/container.md +92 -0
  64. package/docs/context-menu.json +231 -0
  65. package/docs/context-menu.md +176 -0
  66. package/docs/currency-field.examples.md +321 -0
  67. package/docs/currency-field.json +649 -0
  68. package/docs/currency-field.md +128 -0
  69. package/docs/dashboard-grid.json +680 -0
  70. package/docs/dashboard-grid.md +265 -0
  71. package/docs/data-grid.examples.md +3064 -0
  72. package/docs/data-grid.json +1577 -0
  73. package/docs/data-grid.md +237 -0
  74. package/docs/data-grid.props.md +81 -0
  75. package/docs/data-list.json +685 -0
  76. package/docs/data-list.md +327 -0
  77. package/docs/date-field.json +490 -0
  78. package/docs/date-field.md +235 -0
  79. package/docs/date-picker.examples.md +1226 -0
  80. package/docs/date-picker.json +696 -0
  81. package/docs/date-picker.md +121 -0
  82. package/docs/date-range-picker.examples.md +1300 -0
  83. package/docs/date-range-picker.json +903 -0
  84. package/docs/date-range-picker.md +142 -0
  85. package/docs/datetime-field.json +665 -0
  86. package/docs/datetime-field.md +337 -0
  87. package/docs/datetime-picker.examples.md +1269 -0
  88. package/docs/datetime-picker.json +928 -0
  89. package/docs/datetime-picker.md +150 -0
  90. package/docs/datetime-range-picker.examples.md +225 -0
  91. package/docs/datetime-range-picker.json +1015 -0
  92. package/docs/datetime-range-picker.md +162 -0
  93. package/docs/description-list.json +471 -0
  94. package/docs/description-list.md +268 -0
  95. package/docs/detail-panel.json +530 -0
  96. package/docs/detail-panel.md +361 -0
  97. package/docs/dialog.examples.md +2467 -0
  98. package/docs/dialog.json +1141 -0
  99. package/docs/dialog.md +217 -0
  100. package/docs/dialog.props.md +63 -0
  101. package/docs/divider.json +148 -0
  102. package/docs/divider.md +83 -0
  103. package/docs/drawer.examples.md +1929 -0
  104. package/docs/drawer.json +753 -0
  105. package/docs/drawer.md +199 -0
  106. package/docs/entity-picker.json +946 -0
  107. package/docs/entity-picker.md +365 -0
  108. package/docs/event-calendar.examples.md +308 -0
  109. package/docs/event-calendar.json +1202 -0
  110. package/docs/event-calendar.md +201 -0
  111. package/docs/field-group.json +333 -0
  112. package/docs/field-group.md +181 -0
  113. package/docs/field.examples.md +676 -0
  114. package/docs/field.json +528 -0
  115. package/docs/field.md +127 -0
  116. package/docs/filter-bar.json +817 -0
  117. package/docs/filter-bar.md +380 -0
  118. package/docs/form.json +378 -0
  119. package/docs/form.md +235 -0
  120. package/docs/fullscreen.json +395 -0
  121. package/docs/fullscreen.md +225 -0
  122. package/docs/grid.json +176 -0
  123. package/docs/grid.md +74 -0
  124. package/docs/highlight.json +279 -0
  125. package/docs/highlight.md +210 -0
  126. package/docs/hover-card.json +254 -0
  127. package/docs/hover-card.md +213 -0
  128. package/docs/icon.json +173 -0
  129. package/docs/icon.md +101 -0
  130. package/docs/image.json +476 -0
  131. package/docs/image.md +254 -0
  132. package/docs/import-export-center.json +836 -0
  133. package/docs/import-export-center.md +345 -0
  134. package/docs/index.md +141 -0
  135. package/docs/inline-message.json +312 -0
  136. package/docs/inline-message.md +191 -0
  137. package/docs/inline.json +149 -0
  138. package/docs/inline.md +72 -0
  139. package/docs/kbd.json +350 -0
  140. package/docs/kbd.md +210 -0
  141. package/docs/link.json +264 -0
  142. package/docs/link.md +167 -0
  143. package/docs/list-item.json +463 -0
  144. package/docs/list-item.md +236 -0
  145. package/docs/list.json +321 -0
  146. package/docs/list.md +185 -0
  147. package/docs/listbox.json +807 -0
  148. package/docs/listbox.md +413 -0
  149. package/docs/loading-overlay.json +440 -0
  150. package/docs/loading-overlay.md +248 -0
  151. package/docs/markdown.json +461 -0
  152. package/docs/markdown.md +266 -0
  153. package/docs/menu.examples.md +1651 -0
  154. package/docs/menu.json +922 -0
  155. package/docs/menu.md +155 -0
  156. package/docs/menubar.json +292 -0
  157. package/docs/menubar.md +173 -0
  158. package/docs/message-scroller.json +401 -0
  159. package/docs/message-scroller.md +212 -0
  160. package/docs/message.json +862 -0
  161. package/docs/message.md +473 -0
  162. package/docs/multi-select.examples.md +1922 -0
  163. package/docs/multi-select.json +1314 -0
  164. package/docs/multi-select.md +213 -0
  165. package/docs/navigation-menu.json +529 -0
  166. package/docs/navigation-menu.md +329 -0
  167. package/docs/notification-center.json +664 -0
  168. package/docs/notification-center.md +372 -0
  169. package/docs/number-field.examples.md +1078 -0
  170. package/docs/number-field.json +668 -0
  171. package/docs/number-field.md +137 -0
  172. package/docs/otp-input.json +479 -0
  173. package/docs/otp-input.md +291 -0
  174. package/docs/page-header.json +574 -0
  175. package/docs/page-header.md +338 -0
  176. package/docs/page.json +332 -0
  177. package/docs/page.md +184 -0
  178. package/docs/pagination.json +434 -0
  179. package/docs/pagination.md +238 -0
  180. package/docs/popover.examples.md +1235 -0
  181. package/docs/popover.json +656 -0
  182. package/docs/popover.md +199 -0
  183. package/docs/progress-indicator.json +501 -0
  184. package/docs/progress-indicator.md +329 -0
  185. package/docs/prompt-composer.json +498 -0
  186. package/docs/prompt-composer.md +278 -0
  187. package/docs/prose.json +357 -0
  188. package/docs/prose.md +226 -0
  189. package/docs/radio-group.examples.md +626 -0
  190. package/docs/radio-group.json +541 -0
  191. package/docs/radio-group.md +112 -0
  192. package/docs/rating.json +1053 -0
  193. package/docs/rating.md +435 -0
  194. package/docs/result-state.json +376 -0
  195. package/docs/result-state.md +286 -0
  196. package/docs/saved-views.json +384 -0
  197. package/docs/saved-views.md +242 -0
  198. package/docs/scroll-area.json +120 -0
  199. package/docs/scroll-area.md +8 -0
  200. package/docs/section.json +344 -0
  201. package/docs/section.md +208 -0
  202. package/docs/segmented-control.json +429 -0
  203. package/docs/segmented-control.md +240 -0
  204. package/docs/select.examples.md +1214 -0
  205. package/docs/select.json +1147 -0
  206. package/docs/select.md +199 -0
  207. package/docs/side-navigation.json +632 -0
  208. package/docs/side-navigation.md +430 -0
  209. package/docs/skeleton.json +358 -0
  210. package/docs/skeleton.md +223 -0
  211. package/docs/slider.json +522 -0
  212. package/docs/slider.md +261 -0
  213. package/docs/sparkline.json +426 -0
  214. package/docs/sparkline.md +206 -0
  215. package/docs/split-button.json +361 -0
  216. package/docs/split-button.md +275 -0
  217. package/docs/splitter.json +142 -0
  218. package/docs/splitter.md +14 -0
  219. package/docs/stack.json +135 -0
  220. package/docs/stack.md +74 -0
  221. package/docs/stat-card.json +529 -0
  222. package/docs/stat-card.md +270 -0
  223. package/docs/status-indicator.json +314 -0
  224. package/docs/status-indicator.md +197 -0
  225. package/docs/stepper.json +451 -0
  226. package/docs/stepper.md +250 -0
  227. package/docs/switch.json +451 -0
  228. package/docs/switch.md +508 -0
  229. package/docs/table-of-contents.json +553 -0
  230. package/docs/table-of-contents.md +289 -0
  231. package/docs/table.examples.md +1981 -0
  232. package/docs/table.json +1059 -0
  233. package/docs/table.md +290 -0
  234. package/docs/tabs.examples.md +1370 -0
  235. package/docs/tabs.json +661 -0
  236. package/docs/tabs.md +211 -0
  237. package/docs/tag.json +813 -0
  238. package/docs/tag.md +241 -0
  239. package/docs/tags-input.json +771 -0
  240. package/docs/tags-input.md +361 -0
  241. package/docs/text-field.examples.md +821 -0
  242. package/docs/text-field.json +604 -0
  243. package/docs/text-field.md +125 -0
  244. package/docs/textarea.examples.md +612 -0
  245. package/docs/textarea.json +440 -0
  246. package/docs/textarea.md +98 -0
  247. package/docs/time-field.json +584 -0
  248. package/docs/time-field.md +291 -0
  249. package/docs/time-picker.json +679 -0
  250. package/docs/time-picker.md +315 -0
  251. package/docs/time-range-picker.examples.md +191 -0
  252. package/docs/time-range-picker.json +924 -0
  253. package/docs/time-range-picker.md +152 -0
  254. package/docs/timeline.json +839 -0
  255. package/docs/timeline.md +401 -0
  256. package/docs/toast.json +642 -0
  257. package/docs/toast.md +311 -0
  258. package/docs/toggle-group.json +417 -0
  259. package/docs/toggle-group.md +255 -0
  260. package/docs/toggle.json +326 -0
  261. package/docs/toggle.md +222 -0
  262. package/docs/toolbar.json +380 -0
  263. package/docs/toolbar.md +240 -0
  264. package/docs/tooltip.examples.md +664 -0
  265. package/docs/tooltip.json +604 -0
  266. package/docs/tooltip.md +146 -0
  267. package/docs/top-navigation.examples.md +287 -0
  268. package/docs/top-navigation.json +648 -0
  269. package/docs/top-navigation.md +138 -0
  270. package/docs/tour.json +759 -0
  271. package/docs/tour.md +337 -0
  272. package/docs/transfer.json +746 -0
  273. package/docs/transfer.md +273 -0
  274. package/docs/tree.json +918 -0
  275. package/docs/tree.md +397 -0
  276. package/docs/typography.json +317 -0
  277. package/docs/typography.md +107 -0
  278. package/docs/upload.examples.md +358 -0
  279. package/docs/upload.json +1103 -0
  280. package/docs/upload.md +166 -0
  281. package/docs/visually-hidden.json +71 -0
  282. package/docs/visually-hidden.md +42 -0
  283. package/docs/wizard.json +724 -0
  284. package/docs/wizard.md +295 -0
  285. package/fesm2022/slotted-angular-accordion.mjs +247 -0
  286. package/fesm2022/slotted-angular-accordion.mjs.map +1 -0
  287. package/fesm2022/slotted-angular-action-bar.mjs +639 -0
  288. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -0
  289. package/fesm2022/slotted-angular-action-sheet.mjs +749 -0
  290. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -0
  291. package/fesm2022/slotted-angular-alert.mjs +427 -0
  292. package/fesm2022/slotted-angular-alert.mjs.map +1 -0
  293. package/fesm2022/slotted-angular-app-shell.mjs +1334 -0
  294. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -0
  295. package/fesm2022/slotted-angular-aspect-ratio.mjs +63 -0
  296. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -0
  297. package/fesm2022/slotted-angular-attachment.mjs +595 -0
  298. package/fesm2022/slotted-angular-attachment.mjs.map +1 -0
  299. package/fesm2022/slotted-angular-avatar-group.mjs +230 -0
  300. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -0
  301. package/fesm2022/slotted-angular-avatar.mjs +330 -0
  302. package/fesm2022/slotted-angular-avatar.mjs.map +1 -0
  303. package/fesm2022/slotted-angular-badge.mjs +255 -0
  304. package/fesm2022/slotted-angular-badge.mjs.map +1 -0
  305. package/fesm2022/slotted-angular-breadcrumb.mjs +544 -0
  306. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -0
  307. package/fesm2022/slotted-angular-button-group.mjs +146 -0
  308. package/fesm2022/slotted-angular-button-group.mjs.map +1 -0
  309. package/fesm2022/slotted-angular-button.mjs +692 -0
  310. package/fesm2022/slotted-angular-button.mjs.map +1 -0
  311. package/fesm2022/slotted-angular-calendar.mjs +916 -0
  312. package/fesm2022/slotted-angular-calendar.mjs.map +1 -0
  313. package/fesm2022/slotted-angular-card.mjs +225 -0
  314. package/fesm2022/slotted-angular-card.mjs.map +1 -0
  315. package/fesm2022/slotted-angular-carousel.mjs +840 -0
  316. package/fesm2022/slotted-angular-carousel.mjs.map +1 -0
  317. package/fesm2022/slotted-angular-cascader.mjs +1839 -0
  318. package/fesm2022/slotted-angular-cascader.mjs.map +1 -0
  319. package/fesm2022/slotted-angular-chart.mjs +974 -0
  320. package/fesm2022/slotted-angular-chart.mjs.map +1 -0
  321. package/fesm2022/slotted-angular-checkbox-group.mjs +283 -0
  322. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -0
  323. package/fesm2022/slotted-angular-checkbox.mjs +468 -0
  324. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -0
  325. package/fesm2022/slotted-angular-code-block.mjs +476 -0
  326. package/fesm2022/slotted-angular-code-block.mjs.map +1 -0
  327. package/fesm2022/slotted-angular-collapsible.mjs +479 -0
  328. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -0
  329. package/fesm2022/slotted-angular-color-picker.mjs +910 -0
  330. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -0
  331. package/fesm2022/slotted-angular-column-manager.mjs +1037 -0
  332. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -0
  333. package/fesm2022/slotted-angular-combobox.mjs +1480 -0
  334. package/fesm2022/slotted-angular-combobox.mjs.map +1 -0
  335. package/fesm2022/slotted-angular-command-palette.mjs +1283 -0
  336. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -0
  337. package/fesm2022/slotted-angular-container.mjs +105 -0
  338. package/fesm2022/slotted-angular-container.mjs.map +1 -0
  339. package/fesm2022/slotted-angular-context-menu.mjs +221 -0
  340. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -0
  341. package/fesm2022/slotted-angular-currency-field.mjs +1131 -0
  342. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -0
  343. package/fesm2022/slotted-angular-dashboard-grid.mjs +1928 -0
  344. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -0
  345. package/fesm2022/slotted-angular-data-grid.mjs +6697 -0
  346. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -0
  347. package/fesm2022/slotted-angular-data-list.mjs +1418 -0
  348. package/fesm2022/slotted-angular-data-list.mjs.map +1 -0
  349. package/fesm2022/slotted-angular-date-field.mjs +772 -0
  350. package/fesm2022/slotted-angular-date-field.mjs.map +1 -0
  351. package/fesm2022/slotted-angular-date-picker.mjs +690 -0
  352. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -0
  353. package/fesm2022/slotted-angular-date-range-picker.mjs +1150 -0
  354. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -0
  355. package/fesm2022/slotted-angular-datetime-field.mjs +1058 -0
  356. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -0
  357. package/fesm2022/slotted-angular-datetime-picker.mjs +1362 -0
  358. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -0
  359. package/fesm2022/slotted-angular-datetime-range-picker.mjs +1872 -0
  360. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -0
  361. package/fesm2022/slotted-angular-description-list.mjs +545 -0
  362. package/fesm2022/slotted-angular-description-list.mjs.map +1 -0
  363. package/fesm2022/slotted-angular-detail-panel.mjs +754 -0
  364. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -0
  365. package/fesm2022/slotted-angular-dialog.mjs +980 -0
  366. package/fesm2022/slotted-angular-dialog.mjs.map +1 -0
  367. package/fesm2022/slotted-angular-divider.mjs +76 -0
  368. package/fesm2022/slotted-angular-divider.mjs.map +1 -0
  369. package/fesm2022/slotted-angular-drawer.mjs +1397 -0
  370. package/fesm2022/slotted-angular-drawer.mjs.map +1 -0
  371. package/fesm2022/slotted-angular-entity-picker.mjs +1987 -0
  372. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -0
  373. package/fesm2022/slotted-angular-event-calendar.mjs +2934 -0
  374. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -0
  375. package/fesm2022/slotted-angular-field-group.mjs +301 -0
  376. package/fesm2022/slotted-angular-field-group.mjs.map +1 -0
  377. package/fesm2022/slotted-angular-field.mjs +928 -0
  378. package/fesm2022/slotted-angular-field.mjs.map +1 -0
  379. package/fesm2022/slotted-angular-filter-bar.mjs +3107 -0
  380. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -0
  381. package/fesm2022/slotted-angular-form.mjs +592 -0
  382. package/fesm2022/slotted-angular-form.mjs.map +1 -0
  383. package/fesm2022/slotted-angular-fullscreen.mjs +314 -0
  384. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -0
  385. package/fesm2022/slotted-angular-grid.mjs +58 -0
  386. package/fesm2022/slotted-angular-grid.mjs.map +1 -0
  387. package/fesm2022/slotted-angular-highlight.mjs +123 -0
  388. package/fesm2022/slotted-angular-highlight.mjs.map +1 -0
  389. package/fesm2022/slotted-angular-hover-card.mjs +326 -0
  390. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -0
  391. package/fesm2022/slotted-angular-i18n.mjs +75 -0
  392. package/fesm2022/slotted-angular-i18n.mjs.map +1 -0
  393. package/fesm2022/slotted-angular-icon.mjs +232 -0
  394. package/fesm2022/slotted-angular-icon.mjs.map +1 -0
  395. package/fesm2022/slotted-angular-image.mjs +442 -0
  396. package/fesm2022/slotted-angular-image.mjs.map +1 -0
  397. package/fesm2022/slotted-angular-import-export-center.mjs +1792 -0
  398. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -0
  399. package/fesm2022/slotted-angular-inline-message.mjs +280 -0
  400. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -0
  401. package/fesm2022/slotted-angular-inline.mjs +52 -0
  402. package/fesm2022/slotted-angular-inline.mjs.map +1 -0
  403. package/fesm2022/slotted-angular-kbd.mjs +284 -0
  404. package/fesm2022/slotted-angular-kbd.mjs.map +1 -0
  405. package/fesm2022/slotted-angular-link.mjs +182 -0
  406. package/fesm2022/slotted-angular-link.mjs.map +1 -0
  407. package/fesm2022/slotted-angular-list-item.mjs +367 -0
  408. package/fesm2022/slotted-angular-list-item.mjs.map +1 -0
  409. package/fesm2022/slotted-angular-list.mjs +256 -0
  410. package/fesm2022/slotted-angular-list.mjs.map +1 -0
  411. package/fesm2022/slotted-angular-listbox.mjs +1274 -0
  412. package/fesm2022/slotted-angular-listbox.mjs.map +1 -0
  413. package/fesm2022/slotted-angular-loading-overlay.mjs +451 -0
  414. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -0
  415. package/fesm2022/slotted-angular-markdown.mjs +914 -0
  416. package/fesm2022/slotted-angular-markdown.mjs.map +1 -0
  417. package/fesm2022/slotted-angular-menu.mjs +1211 -0
  418. package/fesm2022/slotted-angular-menu.mjs.map +1 -0
  419. package/fesm2022/slotted-angular-menubar.mjs +230 -0
  420. package/fesm2022/slotted-angular-menubar.mjs.map +1 -0
  421. package/fesm2022/slotted-angular-message-scroller.mjs +378 -0
  422. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -0
  423. package/fesm2022/slotted-angular-message.mjs +866 -0
  424. package/fesm2022/slotted-angular-message.mjs.map +1 -0
  425. package/fesm2022/slotted-angular-multi-select.mjs +1939 -0
  426. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -0
  427. package/fesm2022/slotted-angular-navigation-menu.mjs +770 -0
  428. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -0
  429. package/fesm2022/slotted-angular-notification-center.mjs +1172 -0
  430. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -0
  431. package/fesm2022/slotted-angular-number-field.mjs +966 -0
  432. package/fesm2022/slotted-angular-number-field.mjs.map +1 -0
  433. package/fesm2022/slotted-angular-otp-input.mjs +629 -0
  434. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -0
  435. package/fesm2022/slotted-angular-page-header.mjs +788 -0
  436. package/fesm2022/slotted-angular-page-header.mjs.map +1 -0
  437. package/fesm2022/slotted-angular-page.mjs +255 -0
  438. package/fesm2022/slotted-angular-page.mjs.map +1 -0
  439. package/fesm2022/slotted-angular-pagination.mjs +562 -0
  440. package/fesm2022/slotted-angular-pagination.mjs.map +1 -0
  441. package/fesm2022/slotted-angular-popover.mjs +799 -0
  442. package/fesm2022/slotted-angular-popover.mjs.map +1 -0
  443. package/fesm2022/slotted-angular-progress-indicator.mjs +572 -0
  444. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -0
  445. package/fesm2022/slotted-angular-prompt-composer.mjs +596 -0
  446. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -0
  447. package/fesm2022/slotted-angular-prose.mjs +314 -0
  448. package/fesm2022/slotted-angular-prose.mjs.map +1 -0
  449. package/fesm2022/slotted-angular-radio-group.mjs +469 -0
  450. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -0
  451. package/fesm2022/slotted-angular-rating.mjs +1174 -0
  452. package/fesm2022/slotted-angular-rating.mjs.map +1 -0
  453. package/fesm2022/slotted-angular-result-state.mjs +330 -0
  454. package/fesm2022/slotted-angular-result-state.mjs.map +1 -0
  455. package/fesm2022/slotted-angular-saved-views.mjs +877 -0
  456. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -0
  457. package/fesm2022/slotted-angular-scroll-area.mjs +294 -0
  458. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -0
  459. package/fesm2022/slotted-angular-section.mjs +266 -0
  460. package/fesm2022/slotted-angular-section.mjs.map +1 -0
  461. package/fesm2022/slotted-angular-segmented-control.mjs +454 -0
  462. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -0
  463. package/fesm2022/slotted-angular-select.mjs +1899 -0
  464. package/fesm2022/slotted-angular-select.mjs.map +1 -0
  465. package/fesm2022/slotted-angular-side-navigation.mjs +1042 -0
  466. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -0
  467. package/fesm2022/slotted-angular-skeleton.mjs +316 -0
  468. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -0
  469. package/fesm2022/slotted-angular-slider.mjs +586 -0
  470. package/fesm2022/slotted-angular-slider.mjs.map +1 -0
  471. package/fesm2022/slotted-angular-sparkline.mjs +235 -0
  472. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -0
  473. package/fesm2022/slotted-angular-split-button.mjs +331 -0
  474. package/fesm2022/slotted-angular-split-button.mjs.map +1 -0
  475. package/fesm2022/slotted-angular-splitter.mjs +516 -0
  476. package/fesm2022/slotted-angular-splitter.mjs.map +1 -0
  477. package/fesm2022/slotted-angular-stack.mjs +48 -0
  478. package/fesm2022/slotted-angular-stack.mjs.map +1 -0
  479. package/fesm2022/slotted-angular-stat-card.mjs +478 -0
  480. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -0
  481. package/fesm2022/slotted-angular-status-indicator.mjs +155 -0
  482. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -0
  483. package/fesm2022/slotted-angular-stepper.mjs +536 -0
  484. package/fesm2022/slotted-angular-stepper.mjs.map +1 -0
  485. package/fesm2022/slotted-angular-switch.mjs +447 -0
  486. package/fesm2022/slotted-angular-switch.mjs.map +1 -0
  487. package/fesm2022/slotted-angular-table-of-contents.mjs +750 -0
  488. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -0
  489. package/fesm2022/slotted-angular-table.mjs +2518 -0
  490. package/fesm2022/slotted-angular-table.mjs.map +1 -0
  491. package/fesm2022/slotted-angular-tabs.mjs +829 -0
  492. package/fesm2022/slotted-angular-tabs.mjs.map +1 -0
  493. package/fesm2022/slotted-angular-tag.mjs +595 -0
  494. package/fesm2022/slotted-angular-tag.mjs.map +1 -0
  495. package/fesm2022/slotted-angular-tags-input.mjs +1211 -0
  496. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -0
  497. package/fesm2022/slotted-angular-text-field.mjs +674 -0
  498. package/fesm2022/slotted-angular-text-field.mjs.map +1 -0
  499. package/fesm2022/slotted-angular-textarea.mjs +275 -0
  500. package/fesm2022/slotted-angular-textarea.mjs.map +1 -0
  501. package/fesm2022/slotted-angular-theme.mjs +45 -0
  502. package/fesm2022/slotted-angular-theme.mjs.map +1 -0
  503. package/fesm2022/slotted-angular-time-field.mjs +895 -0
  504. package/fesm2022/slotted-angular-time-field.mjs.map +1 -0
  505. package/fesm2022/slotted-angular-time-picker.mjs +856 -0
  506. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -0
  507. package/fesm2022/slotted-angular-time-range-picker.mjs +1534 -0
  508. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -0
  509. package/fesm2022/slotted-angular-timeline.mjs +928 -0
  510. package/fesm2022/slotted-angular-timeline.mjs.map +1 -0
  511. package/fesm2022/slotted-angular-toast.mjs +917 -0
  512. package/fesm2022/slotted-angular-toast.mjs.map +1 -0
  513. package/fesm2022/slotted-angular-toggle-group.mjs +311 -0
  514. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -0
  515. package/fesm2022/slotted-angular-toggle.mjs +162 -0
  516. package/fesm2022/slotted-angular-toggle.mjs.map +1 -0
  517. package/fesm2022/slotted-angular-toolbar.mjs +536 -0
  518. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -0
  519. package/fesm2022/slotted-angular-tooltip.mjs +798 -0
  520. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -0
  521. package/fesm2022/slotted-angular-top-navigation.mjs +1308 -0
  522. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -0
  523. package/fesm2022/slotted-angular-tour.mjs +1330 -0
  524. package/fesm2022/slotted-angular-tour.mjs.map +1 -0
  525. package/fesm2022/slotted-angular-transfer.mjs +1406 -0
  526. package/fesm2022/slotted-angular-transfer.mjs.map +1 -0
  527. package/fesm2022/slotted-angular-tree.mjs +1448 -0
  528. package/fesm2022/slotted-angular-tree.mjs.map +1 -0
  529. package/fesm2022/slotted-angular-typography.mjs +184 -0
  530. package/fesm2022/slotted-angular-typography.mjs.map +1 -0
  531. package/fesm2022/slotted-angular-upload.mjs +1523 -0
  532. package/fesm2022/slotted-angular-upload.mjs.map +1 -0
  533. package/fesm2022/slotted-angular-visually-hidden.mjs +32 -0
  534. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -0
  535. package/fesm2022/slotted-angular-wizard.mjs +1715 -0
  536. package/fesm2022/slotted-angular-wizard.mjs.map +1 -0
  537. package/fesm2022/slotted-angular.mjs +4 -0
  538. package/fesm2022/slotted-angular.mjs.map +1 -0
  539. package/package.json +537 -3
  540. package/types/slotted-angular-accordion.d.ts +156 -0
  541. package/types/slotted-angular-accordion.d.ts.map +1 -0
  542. package/types/slotted-angular-action-bar.d.ts +291 -0
  543. package/types/slotted-angular-action-bar.d.ts.map +1 -0
  544. package/types/slotted-angular-action-sheet.d.ts +294 -0
  545. package/types/slotted-angular-action-sheet.d.ts.map +1 -0
  546. package/types/slotted-angular-alert.d.ts +214 -0
  547. package/types/slotted-angular-alert.d.ts.map +1 -0
  548. package/types/slotted-angular-app-shell.d.ts +549 -0
  549. package/types/slotted-angular-app-shell.d.ts.map +1 -0
  550. package/types/slotted-angular-aspect-ratio.d.ts +57 -0
  551. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -0
  552. package/types/slotted-angular-attachment.d.ts +294 -0
  553. package/types/slotted-angular-attachment.d.ts.map +1 -0
  554. package/types/slotted-angular-avatar-group.d.ts +119 -0
  555. package/types/slotted-angular-avatar-group.d.ts.map +1 -0
  556. package/types/slotted-angular-avatar.d.ts +202 -0
  557. package/types/slotted-angular-avatar.d.ts.map +1 -0
  558. package/types/slotted-angular-badge.d.ts +166 -0
  559. package/types/slotted-angular-badge.d.ts.map +1 -0
  560. package/types/slotted-angular-breadcrumb.d.ts +251 -0
  561. package/types/slotted-angular-breadcrumb.d.ts.map +1 -0
  562. package/types/slotted-angular-button-group.d.ts +89 -0
  563. package/types/slotted-angular-button-group.d.ts.map +1 -0
  564. package/types/slotted-angular-button.d.ts +390 -0
  565. package/types/slotted-angular-button.d.ts.map +1 -0
  566. package/types/slotted-angular-calendar.d.ts +280 -0
  567. package/types/slotted-angular-calendar.d.ts.map +1 -0
  568. package/types/slotted-angular-card.d.ts +140 -0
  569. package/types/slotted-angular-card.d.ts.map +1 -0
  570. package/types/slotted-angular-carousel.d.ts +288 -0
  571. package/types/slotted-angular-carousel.d.ts.map +1 -0
  572. package/types/slotted-angular-cascader.d.ts +351 -0
  573. package/types/slotted-angular-cascader.d.ts.map +1 -0
  574. package/types/slotted-angular-chart.d.ts +319 -0
  575. package/types/slotted-angular-chart.d.ts.map +1 -0
  576. package/types/slotted-angular-checkbox-group.d.ts +156 -0
  577. package/types/slotted-angular-checkbox-group.d.ts.map +1 -0
  578. package/types/slotted-angular-checkbox.d.ts +197 -0
  579. package/types/slotted-angular-checkbox.d.ts.map +1 -0
  580. package/types/slotted-angular-code-block.d.ts +158 -0
  581. package/types/slotted-angular-code-block.d.ts.map +1 -0
  582. package/types/slotted-angular-collapsible.d.ts +272 -0
  583. package/types/slotted-angular-collapsible.d.ts.map +1 -0
  584. package/types/slotted-angular-color-picker.d.ts +181 -0
  585. package/types/slotted-angular-color-picker.d.ts.map +1 -0
  586. package/types/slotted-angular-column-manager.d.ts +200 -0
  587. package/types/slotted-angular-column-manager.d.ts.map +1 -0
  588. package/types/slotted-angular-combobox.d.ts +449 -0
  589. package/types/slotted-angular-combobox.d.ts.map +1 -0
  590. package/types/slotted-angular-command-palette.d.ts +256 -0
  591. package/types/slotted-angular-command-palette.d.ts.map +1 -0
  592. package/types/slotted-angular-container.d.ts +84 -0
  593. package/types/slotted-angular-container.d.ts.map +1 -0
  594. package/types/slotted-angular-context-menu.d.ts +84 -0
  595. package/types/slotted-angular-context-menu.d.ts.map +1 -0
  596. package/types/slotted-angular-currency-field.d.ts +480 -0
  597. package/types/slotted-angular-currency-field.d.ts.map +1 -0
  598. package/types/slotted-angular-dashboard-grid.d.ts +341 -0
  599. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -0
  600. package/types/slotted-angular-data-grid.d.ts +1077 -0
  601. package/types/slotted-angular-data-grid.d.ts.map +1 -0
  602. package/types/slotted-angular-data-list.d.ts +272 -0
  603. package/types/slotted-angular-data-list.d.ts.map +1 -0
  604. package/types/slotted-angular-date-field.d.ts +320 -0
  605. package/types/slotted-angular-date-field.d.ts.map +1 -0
  606. package/types/slotted-angular-date-picker.d.ts +224 -0
  607. package/types/slotted-angular-date-picker.d.ts.map +1 -0
  608. package/types/slotted-angular-date-range-picker.d.ts +310 -0
  609. package/types/slotted-angular-date-range-picker.d.ts.map +1 -0
  610. package/types/slotted-angular-datetime-field.d.ts +362 -0
  611. package/types/slotted-angular-datetime-field.d.ts.map +1 -0
  612. package/types/slotted-angular-datetime-picker.d.ts +370 -0
  613. package/types/slotted-angular-datetime-picker.d.ts.map +1 -0
  614. package/types/slotted-angular-datetime-range-picker.d.ts +459 -0
  615. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -0
  616. package/types/slotted-angular-description-list.d.ts +281 -0
  617. package/types/slotted-angular-description-list.d.ts.map +1 -0
  618. package/types/slotted-angular-detail-panel.d.ts +240 -0
  619. package/types/slotted-angular-detail-panel.d.ts.map +1 -0
  620. package/types/slotted-angular-dialog.d.ts +497 -0
  621. package/types/slotted-angular-dialog.d.ts.map +1 -0
  622. package/types/slotted-angular-divider.d.ts +40 -0
  623. package/types/slotted-angular-divider.d.ts.map +1 -0
  624. package/types/slotted-angular-drawer.d.ts +532 -0
  625. package/types/slotted-angular-drawer.d.ts.map +1 -0
  626. package/types/slotted-angular-entity-picker.d.ts +338 -0
  627. package/types/slotted-angular-entity-picker.d.ts.map +1 -0
  628. package/types/slotted-angular-event-calendar.d.ts +574 -0
  629. package/types/slotted-angular-event-calendar.d.ts.map +1 -0
  630. package/types/slotted-angular-field-group.d.ts +152 -0
  631. package/types/slotted-angular-field-group.d.ts.map +1 -0
  632. package/types/slotted-angular-field.d.ts +535 -0
  633. package/types/slotted-angular-field.d.ts.map +1 -0
  634. package/types/slotted-angular-filter-bar.d.ts +573 -0
  635. package/types/slotted-angular-filter-bar.d.ts.map +1 -0
  636. package/types/slotted-angular-form.d.ts +298 -0
  637. package/types/slotted-angular-form.d.ts.map +1 -0
  638. package/types/slotted-angular-fullscreen.d.ts +145 -0
  639. package/types/slotted-angular-fullscreen.d.ts.map +1 -0
  640. package/types/slotted-angular-grid.d.ts +50 -0
  641. package/types/slotted-angular-grid.d.ts.map +1 -0
  642. package/types/slotted-angular-highlight.d.ts +93 -0
  643. package/types/slotted-angular-highlight.d.ts.map +1 -0
  644. package/types/slotted-angular-hover-card.d.ts +140 -0
  645. package/types/slotted-angular-hover-card.d.ts.map +1 -0
  646. package/types/slotted-angular-i18n.d.ts +46 -0
  647. package/types/slotted-angular-i18n.d.ts.map +1 -0
  648. package/types/slotted-angular-icon.d.ts +94 -0
  649. package/types/slotted-angular-icon.d.ts.map +1 -0
  650. package/types/slotted-angular-image.d.ts +251 -0
  651. package/types/slotted-angular-image.d.ts.map +1 -0
  652. package/types/slotted-angular-import-export-center.d.ts +351 -0
  653. package/types/slotted-angular-import-export-center.d.ts.map +1 -0
  654. package/types/slotted-angular-inline-message.d.ts +195 -0
  655. package/types/slotted-angular-inline-message.d.ts.map +1 -0
  656. package/types/slotted-angular-inline.d.ts +41 -0
  657. package/types/slotted-angular-inline.d.ts.map +1 -0
  658. package/types/slotted-angular-kbd.d.ts +174 -0
  659. package/types/slotted-angular-kbd.d.ts.map +1 -0
  660. package/types/slotted-angular-link.d.ts +94 -0
  661. package/types/slotted-angular-link.d.ts.map +1 -0
  662. package/types/slotted-angular-list-item.d.ts +210 -0
  663. package/types/slotted-angular-list-item.d.ts.map +1 -0
  664. package/types/slotted-angular-list.d.ts +176 -0
  665. package/types/slotted-angular-list.d.ts.map +1 -0
  666. package/types/slotted-angular-listbox.d.ts +470 -0
  667. package/types/slotted-angular-listbox.d.ts.map +1 -0
  668. package/types/slotted-angular-loading-overlay.d.ts +219 -0
  669. package/types/slotted-angular-loading-overlay.d.ts.map +1 -0
  670. package/types/slotted-angular-markdown.d.ts +172 -0
  671. package/types/slotted-angular-markdown.d.ts.map +1 -0
  672. package/types/slotted-angular-menu.d.ts +448 -0
  673. package/types/slotted-angular-menu.d.ts.map +1 -0
  674. package/types/slotted-angular-menubar.d.ts +90 -0
  675. package/types/slotted-angular-menubar.d.ts.map +1 -0
  676. package/types/slotted-angular-message-scroller.d.ts +151 -0
  677. package/types/slotted-angular-message-scroller.d.ts.map +1 -0
  678. package/types/slotted-angular-message.d.ts +348 -0
  679. package/types/slotted-angular-message.d.ts.map +1 -0
  680. package/types/slotted-angular-multi-select.d.ts +462 -0
  681. package/types/slotted-angular-multi-select.d.ts.map +1 -0
  682. package/types/slotted-angular-navigation-menu.d.ts +309 -0
  683. package/types/slotted-angular-navigation-menu.d.ts.map +1 -0
  684. package/types/slotted-angular-notification-center.d.ts +318 -0
  685. package/types/slotted-angular-notification-center.d.ts.map +1 -0
  686. package/types/slotted-angular-number-field.d.ts +402 -0
  687. package/types/slotted-angular-number-field.d.ts.map +1 -0
  688. package/types/slotted-angular-otp-input.d.ts +286 -0
  689. package/types/slotted-angular-otp-input.d.ts.map +1 -0
  690. package/types/slotted-angular-page-header.d.ts +334 -0
  691. package/types/slotted-angular-page-header.d.ts.map +1 -0
  692. package/types/slotted-angular-page.d.ts +141 -0
  693. package/types/slotted-angular-page.d.ts.map +1 -0
  694. package/types/slotted-angular-pagination.d.ts +213 -0
  695. package/types/slotted-angular-pagination.d.ts.map +1 -0
  696. package/types/slotted-angular-popover.d.ts +366 -0
  697. package/types/slotted-angular-popover.d.ts.map +1 -0
  698. package/types/slotted-angular-progress-indicator.d.ts +312 -0
  699. package/types/slotted-angular-progress-indicator.d.ts.map +1 -0
  700. package/types/slotted-angular-prompt-composer.d.ts +242 -0
  701. package/types/slotted-angular-prompt-composer.d.ts.map +1 -0
  702. package/types/slotted-angular-prose.d.ts +171 -0
  703. package/types/slotted-angular-prose.d.ts.map +1 -0
  704. package/types/slotted-angular-radio-group.d.ts +268 -0
  705. package/types/slotted-angular-radio-group.d.ts.map +1 -0
  706. package/types/slotted-angular-rating.d.ts +374 -0
  707. package/types/slotted-angular-rating.d.ts.map +1 -0
  708. package/types/slotted-angular-result-state.d.ts +217 -0
  709. package/types/slotted-angular-result-state.d.ts.map +1 -0
  710. package/types/slotted-angular-saved-views.d.ts +198 -0
  711. package/types/slotted-angular-saved-views.d.ts.map +1 -0
  712. package/types/slotted-angular-scroll-area.d.ts +186 -0
  713. package/types/slotted-angular-scroll-area.d.ts.map +1 -0
  714. package/types/slotted-angular-section.d.ts +143 -0
  715. package/types/slotted-angular-section.d.ts.map +1 -0
  716. package/types/slotted-angular-segmented-control.d.ts +251 -0
  717. package/types/slotted-angular-segmented-control.d.ts.map +1 -0
  718. package/types/slotted-angular-select.d.ts +507 -0
  719. package/types/slotted-angular-select.d.ts.map +1 -0
  720. package/types/slotted-angular-side-navigation.d.ts +373 -0
  721. package/types/slotted-angular-side-navigation.d.ts.map +1 -0
  722. package/types/slotted-angular-skeleton.d.ts +198 -0
  723. package/types/slotted-angular-skeleton.d.ts.map +1 -0
  724. package/types/slotted-angular-slider.d.ts +216 -0
  725. package/types/slotted-angular-slider.d.ts.map +1 -0
  726. package/types/slotted-angular-sparkline.d.ts +106 -0
  727. package/types/slotted-angular-sparkline.d.ts.map +1 -0
  728. package/types/slotted-angular-split-button.d.ts +180 -0
  729. package/types/slotted-angular-split-button.d.ts.map +1 -0
  730. package/types/slotted-angular-splitter.d.ts +206 -0
  731. package/types/slotted-angular-splitter.d.ts.map +1 -0
  732. package/types/slotted-angular-stack.d.ts +38 -0
  733. package/types/slotted-angular-stack.d.ts.map +1 -0
  734. package/types/slotted-angular-stat-card.d.ts +232 -0
  735. package/types/slotted-angular-stat-card.d.ts.map +1 -0
  736. package/types/slotted-angular-status-indicator.d.ts +106 -0
  737. package/types/slotted-angular-status-indicator.d.ts.map +1 -0
  738. package/types/slotted-angular-stepper.d.ts +198 -0
  739. package/types/slotted-angular-stepper.d.ts.map +1 -0
  740. package/types/slotted-angular-switch.d.ts +243 -0
  741. package/types/slotted-angular-switch.d.ts.map +1 -0
  742. package/types/slotted-angular-table-of-contents.d.ts +210 -0
  743. package/types/slotted-angular-table-of-contents.d.ts.map +1 -0
  744. package/types/slotted-angular-table.d.ts +888 -0
  745. package/types/slotted-angular-table.d.ts.map +1 -0
  746. package/types/slotted-angular-tabs.d.ts +340 -0
  747. package/types/slotted-angular-tabs.d.ts.map +1 -0
  748. package/types/slotted-angular-tag.d.ts +279 -0
  749. package/types/slotted-angular-tag.d.ts.map +1 -0
  750. package/types/slotted-angular-tags-input.d.ts +302 -0
  751. package/types/slotted-angular-tags-input.d.ts.map +1 -0
  752. package/types/slotted-angular-text-field.d.ts +334 -0
  753. package/types/slotted-angular-text-field.d.ts.map +1 -0
  754. package/types/slotted-angular-textarea.d.ts +150 -0
  755. package/types/slotted-angular-textarea.d.ts.map +1 -0
  756. package/types/slotted-angular-theme.d.ts +26 -0
  757. package/types/slotted-angular-theme.d.ts.map +1 -0
  758. package/types/slotted-angular-time-field.d.ts +300 -0
  759. package/types/slotted-angular-time-field.d.ts.map +1 -0
  760. package/types/slotted-angular-time-picker.d.ts +260 -0
  761. package/types/slotted-angular-time-picker.d.ts.map +1 -0
  762. package/types/slotted-angular-time-range-picker.d.ts +401 -0
  763. package/types/slotted-angular-time-range-picker.d.ts.map +1 -0
  764. package/types/slotted-angular-timeline.d.ts +329 -0
  765. package/types/slotted-angular-timeline.d.ts.map +1 -0
  766. package/types/slotted-angular-toast.d.ts +340 -0
  767. package/types/slotted-angular-toast.d.ts.map +1 -0
  768. package/types/slotted-angular-toggle-group.d.ts +167 -0
  769. package/types/slotted-angular-toggle-group.d.ts.map +1 -0
  770. package/types/slotted-angular-toggle.d.ts +106 -0
  771. package/types/slotted-angular-toggle.d.ts.map +1 -0
  772. package/types/slotted-angular-toolbar.d.ts +252 -0
  773. package/types/slotted-angular-toolbar.d.ts.map +1 -0
  774. package/types/slotted-angular-tooltip.d.ts +388 -0
  775. package/types/slotted-angular-tooltip.d.ts.map +1 -0
  776. package/types/slotted-angular-top-navigation.d.ts +442 -0
  777. package/types/slotted-angular-top-navigation.d.ts.map +1 -0
  778. package/types/slotted-angular-tour.d.ts +440 -0
  779. package/types/slotted-angular-tour.d.ts.map +1 -0
  780. package/types/slotted-angular-transfer.d.ts +296 -0
  781. package/types/slotted-angular-transfer.d.ts.map +1 -0
  782. package/types/slotted-angular-tree.d.ts +499 -0
  783. package/types/slotted-angular-tree.d.ts.map +1 -0
  784. package/types/slotted-angular-typography.d.ts +89 -0
  785. package/types/slotted-angular-typography.d.ts.map +1 -0
  786. package/types/slotted-angular-upload.d.ts +365 -0
  787. package/types/slotted-angular-upload.d.ts.map +1 -0
  788. package/types/slotted-angular-visually-hidden.d.ts +19 -0
  789. package/types/slotted-angular-visually-hidden.d.ts.map +1 -0
  790. package/types/slotted-angular-wizard.d.ts +441 -0
  791. package/types/slotted-angular-wizard.d.ts.map +1 -0
  792. package/types/slotted-angular.d.ts +3 -0
  793. package/types/slotted-angular.d.ts.map +1 -0
@@ -0,0 +1,1300 @@
1
+ <!-- index: ./index.md -->
2
+ # date-range-picker
3
+
4
+ `data-ui="date-range-picker"` · Start and end dates with a calendar popover.
5
+
6
+ ## Examples
7
+
8
+ ### Playground
9
+
10
+ Check-in and check-out in one frame, driven by the controls below the canvas. Type into either field, or press the trigger and choose two days: while the range is drawn, the band above the calendar says how many nights it holds.
11
+
12
+ Excerpt — not a complete module
13
+
14
+ ```html
15
+ <div slField>
16
+ <label slFieldLabel>Stay</label>
17
+ <div
18
+ slDateRangePicker
19
+ count="nights"
20
+ startName="checkin"
21
+ endName="checkout"
22
+ [value]="value"
23
+ (valueChange)="value = $event.value"
24
+ ></div>
25
+ </div>
26
+ ```
27
+
28
+ ### Size
29
+
30
+ The three steps of the control scale. Both fields, the dash and the trigger follow the step together, so a range in a dense table shrinks as one control.
31
+
32
+ Example
33
+
34
+ ```ts
35
+ import { Component } from '@angular/core';
36
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
37
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
38
+ import { SlStack } from '@slotted/angular/stack';
39
+ import { plainDate } from '@slotted/core/date';
40
+
41
+ @Component({
42
+ selector: 'app-date-range-picker-sizes',
43
+ imports: [SlDateRangePicker, SlField, SlFieldLabel, SlStack],
44
+ template: `
45
+ <div slStack [gap]="5">
46
+ <div slField>
47
+ <label slFieldLabel>Created between</label>
48
+ <div slDateRangePicker size="sm" [defaultValue]="created"></div>
49
+ </div>
50
+ <div slField>
51
+ <label slFieldLabel>Billing period</label>
52
+ <div slDateRangePicker size="md" [defaultValue]="billing"></div>
53
+ </div>
54
+ <div slField>
55
+ <label slFieldLabel>Lease term</label>
56
+ <div slDateRangePicker size="lg" [defaultValue]="lease"></div>
57
+ </div>
58
+ </div>
59
+ `,
60
+ })
61
+ export class DateRangePickerSizes {
62
+ protected readonly created = { start: plainDate(2026, 9, 1), end: plainDate(2026, 9, 30) };
63
+ protected readonly billing = { start: plainDate(2026, 10, 1), end: plainDate(2026, 10, 31) };
64
+ protected readonly lease = { start: plainDate(2026, 11, 1), end: plainDate(2027, 10, 31) };
65
+ }
66
+ ```
67
+
68
+ ### Variant
69
+
70
+ How much frame the control draws at rest. The two fields inside are plain, and the one frame answers hover, focus and invalid for both.
71
+
72
+ Example
73
+
74
+ ```ts
75
+ import { Component } from '@angular/core';
76
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
77
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
78
+ import { SlStack } from '@slotted/angular/stack';
79
+ import { plainDate } from '@slotted/core/date';
80
+
81
+ @Component({
82
+ selector: 'app-date-range-picker-variants',
83
+ imports: [SlDateRangePicker, SlField, SlFieldLabel, SlStack],
84
+ template: `
85
+ <div slStack [gap]="5">
86
+ <div slField>
87
+ <label slFieldLabel>Outline</label>
88
+ <div slDateRangePicker variant="outline" [defaultValue]="quarter"></div>
89
+ </div>
90
+ <div slField>
91
+ <label slFieldLabel>Subtle</label>
92
+ <div slDateRangePicker variant="subtle" [defaultValue]="quarter"></div>
93
+ </div>
94
+ <div slField>
95
+ <label slFieldLabel>Plain</label>
96
+ <div slDateRangePicker variant="plain" [defaultValue]="quarter"></div>
97
+ </div>
98
+ </div>
99
+ `,
100
+ })
101
+ export class DateRangePickerVariants {
102
+ protected readonly quarter = { start: plainDate(2026, 7, 1), end: plainDate(2026, 9, 30) };
103
+ }
104
+ ```
105
+
106
+ ### The length while the range is drawn
107
+
108
+ Open the calendar and choose a start: the band follows the pointer and the focused day, and says the length of the range the next press would make. count decides the unit: a stay counts nights and a leave request counts days, so the same two dates give 4 nights or 5 days.
109
+
110
+ Excerpt — not a complete module
111
+
112
+ ```html
113
+ <div slDateRangePicker count="nights"></div>
114
+ <div slDateRangePicker count="days"></div>
115
+ ```
116
+
117
+ ### Length limits
118
+
119
+ A stay of two to seven nights. Once a check-in is chosen, the calendar disables the days that would break the rule and the band names it; a typed range outside it marks the frame invalid. minLength and maxLength count in the unit count names.
120
+
121
+ Example
122
+
123
+ ```ts
124
+ import { Component } from '@angular/core';
125
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
126
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
127
+
128
+ @Component({
129
+ selector: 'app-date-range-picker-limits',
130
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
131
+ template: `
132
+ <div slField>
133
+ <label slFieldLabel>Forklift rental</label>
134
+ <div slDateRangePicker [minLength]="2" [maxLength]="14"></div>
135
+ <span slFieldDescription>Rentals run from 2 to 14 days.</span>
136
+ </div>
137
+ `,
138
+ })
139
+ export class DateRangePickerLimits {}
140
+ ```
141
+
142
+ ### Unavailable days
143
+
144
+ The room is taken from the 15th to the 18th. Choose a check-in before it: the calendar disables the nights past the first taken day, because a range runs without gaps. [contiguous]="false" lets a range run across an unavailable day and checks only its two ends.
145
+
146
+ Example
147
+
148
+ ```ts
149
+ import { Component } from '@angular/core';
150
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
151
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
152
+ import { compareDate, plainDate, type PlainDate } from '@slotted/core/date';
153
+
154
+ const BOOKED_FROM = plainDate(2026, 10, 14);
155
+ const BOOKED_TO = plainDate(2026, 10, 16);
156
+
157
+ const isBooked = (date: PlainDate) =>
158
+ compareDate(date, BOOKED_FROM) >= 0 && compareDate(date, BOOKED_TO) <= 0;
159
+
160
+ @Component({
161
+ selector: 'app-date-range-picker-unavailable',
162
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
163
+ template: `
164
+ <div slField>
165
+ <label slFieldLabel>Training room</label>
166
+ <div slDateRangePicker [isDateUnavailable]="isBooked"></div>
167
+ <span slFieldDescription>
168
+ Booked October 14 to 16. A booking cannot run across those days.
169
+ </span>
170
+ </div>
171
+ `,
172
+ })
173
+ export class DateRangePickerUnavailable {
174
+ protected readonly isBooked = isBooked;
175
+ }
176
+ ```
177
+
178
+ ### Presets
179
+
180
+ The stays a hotel offers by name. Each is a button with slDateRangePickerPreset and its own range; pressing one writes the value and closes the calendar, and the one equal to the value carries data-selected. The list belongs to the product.
181
+
182
+ Example
183
+
184
+ ```ts
185
+ import { Component } from '@angular/core';
186
+ import {
187
+ SlDateRangePicker,
188
+ SlDateRangePickerPreset,
189
+ SlDateRangePickerPresets,
190
+ type DateRange,
191
+ } from '@slotted/angular/date-range-picker';
192
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
193
+ import { addDays, plainDate } from '@slotted/core/date';
194
+
195
+ const TODAY = plainDate(2026, 9, 30);
196
+
197
+ const LAST_30_DAYS: DateRange = { start: addDays(TODAY, -29), end: TODAY };
198
+
199
+ const PRESETS: { label: string; range: DateRange }[] = [
200
+ { label: 'Last 7 days', range: { start: addDays(TODAY, -6), end: TODAY } },
201
+ { label: 'Last 30 days', range: LAST_30_DAYS },
202
+ { label: 'This quarter', range: { start: plainDate(2026, 7, 1), end: TODAY } },
203
+ { label: 'Last quarter', range: { start: plainDate(2026, 4, 1), end: plainDate(2026, 6, 30) } },
204
+ { label: 'Year to date', range: { start: plainDate(2026, 1, 1), end: TODAY } },
205
+ ];
206
+
207
+ @Component({
208
+ selector: 'app-date-range-picker-presets',
209
+ imports: [
210
+ SlDateRangePicker,
211
+ SlDateRangePickerPreset,
212
+ SlDateRangePickerPresets,
213
+ SlField,
214
+ SlFieldLabel,
215
+ ],
216
+ template: `
217
+ <div slField>
218
+ <label slFieldLabel>Report period</label>
219
+ <div slDateRangePicker [defaultValue]="last30Days" [max]="today">
220
+ <div slDateRangePickerPresets>
221
+ @for (preset of presets; track preset.label) {
222
+ <button [slDateRangePickerPreset]="preset.range">{{ preset.label }}</button>
223
+ }
224
+ </div>
225
+ </div>
226
+ </div>
227
+ `,
228
+ })
229
+ export class DateRangePickerPresets {
230
+ protected readonly today = TODAY;
231
+ protected readonly last30Days = LAST_30_DAYS;
232
+ protected readonly presets = PRESETS;
233
+ }
234
+ ```
235
+
236
+ ### An open end
237
+
238
+ A check-in without a check-out is a value, { start, end: null }, and the field shows it. Open the calendar over it and the first press writes the missing end. required asks for both ends.
239
+
240
+ Example
241
+
242
+ ```ts
243
+ import { Component } from '@angular/core';
244
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
245
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
246
+ import { plainDate } from '@slotted/core/date';
247
+
248
+ @Component({
249
+ selector: 'app-date-range-picker-open-end',
250
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
251
+ template: `
252
+ <div slField>
253
+ <label slFieldLabel>Price valid</label>
254
+ <div slDateRangePicker clearable [defaultValue]="validity"></div>
255
+ <span slFieldDescription>Leave the end empty for a price with no end date.</span>
256
+ </div>
257
+ `,
258
+ })
259
+ export class DateRangePickerOpenEnd {
260
+ protected readonly validity = { start: plainDate(2026, 10, 1), end: null };
261
+ }
262
+ ```
263
+
264
+ ### States
265
+
266
+ Read-only keeps the dates legible and copyable and disables the buttons; disabled disables everything and keeps the dates readable; a check-out before its check-in is invalid on the end field and on the frame, and the ends are not swapped; required reaches both fields.
267
+
268
+ Example
269
+
270
+ ```ts
271
+ import { Component } from '@angular/core';
272
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
273
+ import { SlField, SlFieldDescription, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
274
+ import { SlStack } from '@slotted/angular/stack';
275
+ import { plainDate } from '@slotted/core/date';
276
+
277
+ @Component({
278
+ selector: 'app-date-range-picker-states',
279
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldError, SlFieldLabel, SlStack],
280
+ template: `
281
+ <div slStack [gap]="5">
282
+ <div slField invalid required>
283
+ <label slFieldLabel>Campaign dates</label>
284
+ <div slDateRangePicker [defaultValue]="campaign"></div>
285
+ <span slFieldError>The end date is before the start date.</span>
286
+ </div>
287
+ <div slField readOnly>
288
+ <label slFieldLabel>Fiscal quarter</label>
289
+ <div slDateRangePicker [defaultValue]="quarter"></div>
290
+ <span slFieldDescription>Set by finance when the quarter opens.</span>
291
+ </div>
292
+ <div slField disabled>
293
+ <label slFieldLabel>Price freeze</label>
294
+ <div slDateRangePicker [defaultValue]="freeze"></div>
295
+ <span slFieldDescription>Unlocks once the pricing review is approved.</span>
296
+ </div>
297
+ </div>
298
+ `,
299
+ })
300
+ export class DateRangePickerStates {
301
+ protected readonly campaign = { start: plainDate(2026, 10, 12), end: plainDate(2026, 10, 5) };
302
+ protected readonly quarter = { start: plainDate(2026, 7, 1), end: plainDate(2026, 9, 30) };
303
+ protected readonly freeze = { start: plainDate(2026, 11, 23), end: plainDate(2026, 12, 31) };
304
+ }
305
+ ```
306
+
307
+ ### Forms
308
+
309
+ The whole range is the form control’s value, and a plain form post also sends two ISO 8601 strings under startName and endName. Choose a stay and submit.
310
+
311
+ Excerpt — not a complete module
312
+
313
+ ```html
314
+ <form [formGroup]="reservation" (ngSubmit)="reserve()">
315
+ <div slDateRangePicker formControlName="stay" startName="checkin" endName="checkout"></div>
316
+ <button type="submit">Reserve</button>
317
+ </form>
318
+ ```
319
+
320
+ ### Narrow
321
+
322
+ In a column narrower than two dates, the frame stays on one line: each date clips at its own edge and scrolls back into view when focus enters it, and the trigger keeps its place. The surface is capped by the room available, and the second month wraps under the first. On a touch screen narrower than 480 pixels, the surface is a sheet.
323
+
324
+ Example
325
+
326
+ ```ts
327
+ import { Component } from '@angular/core';
328
+ import {
329
+ SlDateRangePicker,
330
+ SlDateRangePickerPreset,
331
+ SlDateRangePickerPresets,
332
+ } from '@slotted/angular/date-range-picker';
333
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
334
+ import { addDays, plainDate } from '@slotted/core/date';
335
+
336
+ const TODAY = plainDate(2026, 9, 30);
337
+
338
+ @Component({
339
+ selector: 'app-date-range-picker-narrow',
340
+ imports: [
341
+ SlDateRangePicker,
342
+ SlDateRangePickerPreset,
343
+ SlDateRangePickerPresets,
344
+ SlField,
345
+ SlFieldLabel,
346
+ ],
347
+ template: `
348
+ <div slField>
349
+ <label slFieldLabel>Deliveries between</label>
350
+ <div slDateRangePicker [max]="today">
351
+ <div slDateRangePickerPresets>
352
+ <button [slDateRangePickerPreset]="todayOnly">Today</button>
353
+ <button [slDateRangePickerPreset]="lastWeek">Last 7 days</button>
354
+ </div>
355
+ </div>
356
+ </div>
357
+ `,
358
+ })
359
+ export class DateRangePickerNarrow {
360
+ protected readonly today = TODAY;
361
+ protected readonly todayOnly = { start: TODAY, end: TODAY };
362
+ protected readonly lastWeek = { start: addDays(TODAY, -6), end: TODAY };
363
+ }
364
+ ```
365
+
366
+ ### Composition
367
+
368
+ provideDateRangePickerDefaults sets the unit and the months for a section, and provideSlotted sets the language and every word. The instance opens, closes and focuses one end; [position] and (positionChange) control which end the next press writes.
369
+
370
+ Excerpt — not a complete module
371
+
372
+ ```html
373
+ <div
374
+ slDateRangePicker
375
+ #picker="slDateRangePicker"
376
+ [position]="position"
377
+ (positionChange)="position = $event.value"
378
+ ></div>
379
+ <button type="button" (click)="picker.openSurface()">Open</button>
380
+ ```
381
+
382
+ ### The keyboard
383
+
384
+ Alt+ArrowDown opens the calendar from either field and leaves focus there. Enter on the trigger opens it on the day of the end being edited; each arrow moves the pending end and the band says the length; Enter twice writes the range. Escape returns to the day grid first, then closes and discards a range that has only its start.
385
+
386
+ Example
387
+
388
+ ```ts
389
+ import { Component, signal } from '@angular/core';
390
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
391
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
392
+ import { plainDate } from '@slotted/core/date';
393
+ import type { ChangeRequest } from '@slotted/core/state';
394
+
395
+ @Component({
396
+ selector: 'app-date-range-picker-keyboard',
397
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
398
+ template: `
399
+ <div slField>
400
+ <label slFieldLabel>Shipping blackout</label>
401
+ <div
402
+ slDateRangePicker
403
+ [defaultValue]="blackout"
404
+ [messages]="messages"
405
+ (openChange)="record($event)"
406
+ ></div>
407
+ <span slFieldDescription>{{ last() }}</span>
408
+ </div>
409
+ `,
410
+ })
411
+ export class DateRangePickerKeyboard {
412
+ protected readonly blackout = { start: plainDate(2026, 11, 26), end: plainDate(2026, 11, 29) };
413
+ protected readonly messages = {
414
+ choose: 'Choose blackout dates',
415
+ change: 'Change blackout dates, {start} to {end}, {length}',
416
+ };
417
+ protected readonly last = signal('Focus either date and press Alt+ArrowDown.');
418
+
419
+ protected record(request: ChangeRequest<boolean>): void {
420
+ this.last.set(`${request.value ? 'Opened' : 'Closed'} by ${request.reason}.`);
421
+ }
422
+ }
423
+ ```
424
+
425
+ ### across-unavailable.ts
426
+
427
+ Example
428
+
429
+ ```ts
430
+ import { Component } from '@angular/core';
431
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
432
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
433
+ import { dayOfWeek, toISODate, type PlainDate } from '@slotted/core/date';
434
+
435
+ const HOLIDAYS = new Set(['2026-10-12', '2026-11-11', '2026-11-26', '2026-12-25']);
436
+
437
+ const isNonWorkingDay = (date: PlainDate) =>
438
+ dayOfWeek(date) === 0 || dayOfWeek(date) === 6 || HOLIDAYS.has(toISODate(date));
439
+
440
+ @Component({
441
+ selector: 'app-date-range-picker-across-unavailable',
442
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
443
+ template: `
444
+ <div slField>
445
+ <label slFieldLabel>Vacation</label>
446
+ <div slDateRangePicker [contiguous]="false" [isDateUnavailable]="isNonWorkingDay"></div>
447
+ <span slFieldDescription>
448
+ Start and end on a working day. Weekends and holidays inside the vacation are fine.
449
+ </span>
450
+ </div>
451
+ `,
452
+ })
453
+ export class DateRangePickerAcrossUnavailable {
454
+ protected readonly isNonWorkingDay = isNonWorkingDay;
455
+ }
456
+ ```
457
+
458
+ ### bounds.ts
459
+
460
+ Example
461
+
462
+ ```ts
463
+ import { Component } from '@angular/core';
464
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
465
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
466
+ import { plainDate } from '@slotted/core/date';
467
+
468
+ @Component({
469
+ selector: 'app-date-range-picker-bounds',
470
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
471
+ template: `
472
+ <div slField>
473
+ <label slFieldLabel>Shipment window</label>
474
+ <div slDateRangePicker [min]="earliest" [max]="latest"></div>
475
+ <span slFieldDescription>Carriers accept bookings from October 1 to December 31, 2026.</span>
476
+ </div>
477
+ `,
478
+ })
479
+ export class DateRangePickerBounds {
480
+ protected readonly earliest = plainDate(2026, 10, 1);
481
+ protected readonly latest = plainDate(2026, 12, 31);
482
+ }
483
+ ```
484
+
485
+ ### clearable.ts
486
+
487
+ Example
488
+
489
+ ```ts
490
+ import { Component } from '@angular/core';
491
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
492
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
493
+ import { plainDate } from '@slotted/core/date';
494
+
495
+ @Component({
496
+ selector: 'app-date-range-picker-clearable',
497
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
498
+ template: `
499
+ <div slField>
500
+ <label slFieldLabel>Order date</label>
501
+ <div slDateRangePicker clearable [defaultValue]="ordered"></div>
502
+ <span slFieldDescription>Clear the dates to list orders from any date.</span>
503
+ </div>
504
+ `,
505
+ })
506
+ export class DateRangePickerClearable {
507
+ protected readonly ordered = { start: plainDate(2026, 9, 14), end: plainDate(2026, 9, 27) };
508
+ }
509
+ ```
510
+
511
+ ### compare-periods.ts
512
+
513
+ Example
514
+
515
+ ```ts
516
+ import { Component, computed, signal } from '@angular/core';
517
+ import {
518
+ SlDateRangePicker,
519
+ SlDateRangePickerPreset,
520
+ SlDateRangePickerPresets,
521
+ type DateRange,
522
+ } from '@slotted/angular/date-range-picker';
523
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
524
+ import { SlStack } from '@slotted/angular/stack';
525
+ import { addDays, daysBetween, plainDate, stepYear } from '@slotted/core/date';
526
+
527
+ const SEPTEMBER: DateRange = { start: plainDate(2026, 9, 1), end: plainDate(2026, 9, 30) };
528
+
529
+ /** The run of the same length that ends the day before the period starts. */
530
+ const previousPeriod = (period: DateRange): DateRange | null => {
531
+ if (period.start === null || period.end === null) return null;
532
+ const days = daysBetween(period.start, period.end) + 1;
533
+ return { start: addDays(period.start, -days), end: addDays(period.start, -1) };
534
+ };
535
+
536
+ const lastYear = (period: DateRange): DateRange | null =>
537
+ period.start === null || period.end === null
538
+ ? null
539
+ : { start: stepYear(period.start, -1).date, end: stepYear(period.end, -1).date };
540
+
541
+ @Component({
542
+ selector: 'app-date-range-picker-compare-periods',
543
+ imports: [
544
+ SlDateRangePicker,
545
+ SlDateRangePickerPreset,
546
+ SlDateRangePickerPresets,
547
+ SlField,
548
+ SlFieldDescription,
549
+ SlFieldLabel,
550
+ SlStack,
551
+ ],
552
+ template: `
553
+ <div slStack [gap]="5">
554
+ <div slField>
555
+ <label slFieldLabel>Period</label>
556
+ <div slDateRangePicker [value]="period()" (valueChange)="period.set($event.value)"></div>
557
+ </div>
558
+ <div slField>
559
+ <label slFieldLabel>Compare to</label>
560
+ <div slDateRangePicker [value]="baseline()" (valueChange)="baseline.set($event.value)">
561
+ <div slDateRangePickerPresets>
562
+ @if (previous(); as range) {
563
+ <button [slDateRangePickerPreset]="range">Previous period</button>
564
+ }
565
+ @if (sameLastYear(); as range) {
566
+ <button [slDateRangePickerPreset]="range">Same period last year</button>
567
+ }
568
+ </div>
569
+ </div>
570
+ <span slFieldDescription>Shortcuts follow the period above.</span>
571
+ </div>
572
+ </div>
573
+ `,
574
+ })
575
+ export class DateRangePickerComparePeriods {
576
+ protected readonly period = signal<DateRange | null>(SEPTEMBER);
577
+ protected readonly baseline = signal<DateRange | null>(previousPeriod(SEPTEMBER));
578
+ protected readonly previous = computed(() => {
579
+ const period = this.period();
580
+ return period === null ? null : previousPeriod(period);
581
+ });
582
+ protected readonly sameLastYear = computed(() => {
583
+ const period = this.period();
584
+ return period === null ? null : lastYear(period);
585
+ });
586
+ }
587
+ ```
588
+
589
+ ### controlled.ts
590
+
591
+ Example
592
+
593
+ ```ts
594
+ import { Component, computed, signal } from '@angular/core';
595
+ import { SlButton } from '@slotted/angular/button';
596
+ import { SlDateRangePicker, type DateRange } from '@slotted/angular/date-range-picker';
597
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
598
+ import { SlInline } from '@slotted/angular/inline';
599
+ import { SlStack } from '@slotted/angular/stack';
600
+ import { endOfMonth, plainDate, startOfMonth, stepMonth, toISODate } from '@slotted/core/date';
601
+
602
+ const SEPTEMBER: DateRange = { start: plainDate(2026, 9, 1), end: plainDate(2026, 9, 30) };
603
+ const FALLBACK = plainDate(2026, 9, 1);
604
+
605
+ /** The calendar month before or after the one the range starts in. */
606
+ const shift = (range: DateRange | null, months: number): DateRange => {
607
+ const first = startOfMonth(stepMonth(range?.start ?? FALLBACK, months).date);
608
+ return { start: first, end: endOfMonth(first) };
609
+ };
610
+
611
+ @Component({
612
+ selector: 'app-date-range-picker-controlled',
613
+ imports: [
614
+ SlButton,
615
+ SlDateRangePicker,
616
+ SlField,
617
+ SlFieldDescription,
618
+ SlFieldLabel,
619
+ SlInline,
620
+ SlStack,
621
+ ],
622
+ template: `
623
+ <div slStack [gap]="4">
624
+ <div slField>
625
+ <label slFieldLabel>Statement period</label>
626
+ <div slDateRangePicker [value]="period()" (valueChange)="period.set($event.value)"></div>
627
+ <span slFieldDescription>{{ summary() }}</span>
628
+ </div>
629
+ <div slInline [gap]="2">
630
+ <button
631
+ slButton
632
+ size="sm"
633
+ tone="secondary"
634
+ variant="outline"
635
+ type="button"
636
+ (click)="move(-1)"
637
+ >
638
+ Previous month
639
+ </button>
640
+ <button
641
+ slButton
642
+ size="sm"
643
+ tone="secondary"
644
+ variant="outline"
645
+ type="button"
646
+ (click)="move(1)"
647
+ >
648
+ Next month
649
+ </button>
650
+ <button
651
+ slButton
652
+ size="sm"
653
+ tone="secondary"
654
+ variant="ghost"
655
+ type="button"
656
+ (click)="period.set(null)"
657
+ >
658
+ Clear
659
+ </button>
660
+ </div>
661
+ </div>
662
+ `,
663
+ })
664
+ export class DateRangePickerControlled {
665
+ protected readonly period = signal<DateRange | null>(SEPTEMBER);
666
+ protected readonly summary = computed(() => {
667
+ const period = this.period();
668
+ return period?.start && period.end
669
+ ? `Statement from ${toISODate(period.start)} to ${toISODate(period.end)}.`
670
+ : 'Choose both dates to run the statement.';
671
+ });
672
+
673
+ protected move(months: number): void {
674
+ this.period.set(shift(this.period(), months));
675
+ }
676
+ }
677
+ ```
678
+
679
+ ### count.ts
680
+
681
+ Example
682
+
683
+ ```ts
684
+ import { Component } from '@angular/core';
685
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
686
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
687
+ import { SlStack } from '@slotted/angular/stack';
688
+ import { plainDate } from '@slotted/core/date';
689
+
690
+ @Component({
691
+ selector: 'app-date-range-picker-count',
692
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel, SlStack],
693
+ template: `
694
+ <div slStack [gap]="5">
695
+ <div slField>
696
+ <label slFieldLabel>Hotel stay</label>
697
+ <div slDateRangePicker count="nights" [defaultValue]="trip"></div>
698
+ <span slFieldDescription>Counted in nights: October 12 to 16 is 4 nights.</span>
699
+ </div>
700
+ <div slField>
701
+ <label slFieldLabel>Trade show leave</label>
702
+ <div slDateRangePicker count="days" [defaultValue]="trip"></div>
703
+ <span slFieldDescription>Counted in days: October 12 to 16 is 5 days.</span>
704
+ </div>
705
+ </div>
706
+ `,
707
+ })
708
+ export class DateRangePickerCount {
709
+ protected readonly trip = { start: plainDate(2026, 10, 12), end: plainDate(2026, 10, 16) };
710
+ }
711
+ ```
712
+
713
+ ### defaults.ts
714
+
715
+ Example
716
+
717
+ ```ts
718
+ import { Component } from '@angular/core';
719
+ import {
720
+ provideDateRangePickerDefaults,
721
+ SlDateRangePicker,
722
+ } from '@slotted/angular/date-range-picker';
723
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
724
+ import { SlStack } from '@slotted/angular/stack';
725
+ import { plainDate } from '@slotted/core/date';
726
+
727
+ @Component({
728
+ selector: 'app-date-range-picker-defaults',
729
+ imports: [SlDateRangePicker, SlField, SlFieldLabel, SlStack],
730
+ providers: [provideDateRangePickerDefaults({ count: 'nights', months: 1, variant: 'subtle' })],
731
+ template: `
732
+ <div slStack [gap]="4">
733
+ <div slField>
734
+ <label slFieldLabel>Lisbon hotel</label>
735
+ <div slDateRangePicker [defaultValue]="lisbon"></div>
736
+ </div>
737
+ <div slField>
738
+ <label slFieldLabel>Porto hotel</label>
739
+ <div slDateRangePicker [defaultValue]="porto"></div>
740
+ </div>
741
+ </div>
742
+ `,
743
+ })
744
+ export class DateRangePickerDefaults {
745
+ protected readonly lisbon = { start: plainDate(2026, 11, 9), end: plainDate(2026, 11, 12) };
746
+ protected readonly porto = { start: plainDate(2026, 11, 12), end: plainDate(2026, 11, 14) };
747
+ }
748
+ ```
749
+
750
+ ### dock-booking.ts
751
+
752
+ Example
753
+
754
+ ```ts
755
+ import { Component, computed, signal } from '@angular/core';
756
+ import { SlDateRangePicker, type DateRange } from '@slotted/angular/date-range-picker';
757
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
758
+ import {
759
+ createDateFormat,
760
+ dayOfWeek,
761
+ plainDate,
762
+ toISODate,
763
+ type PlainDate,
764
+ } from '@slotted/core/date';
765
+
766
+ const TODAY = plainDate(2026, 9, 30);
767
+ /** Days another carrier already holds dock 4. */
768
+ const HELD = new Set(['2026-10-07', '2026-10-08', '2026-10-21', '2026-10-22', '2026-10-23']);
769
+ const words = createDateFormat({ locale: 'en-US' });
770
+
771
+ const isClosed = (date: PlainDate) =>
772
+ dayOfWeek(date) === 0 || dayOfWeek(date) === 6 || HELD.has(toISODate(date));
773
+
774
+ @Component({
775
+ selector: 'app-date-range-picker-dock-booking',
776
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
777
+ template: `
778
+ <div slField required>
779
+ <label slFieldLabel>Dock 4 unloading window</label>
780
+ <div
781
+ slDateRangePicker
782
+ [isDateUnavailable]="isClosed"
783
+ [max]="latest"
784
+ [maxLength]="3"
785
+ [min]="earliest"
786
+ [value]="slot()"
787
+ (valueChange)="slot.set($event.value)"
788
+ ></div>
789
+ <span slFieldDescription>{{ summary() }}</span>
790
+ </div>
791
+ `,
792
+ })
793
+ export class DateRangePickerDockBooking {
794
+ protected readonly isClosed = isClosed;
795
+ protected readonly earliest = plainDate(2026, 10, 1);
796
+ protected readonly latest = plainDate(2026, 11, 30);
797
+ protected readonly slot = signal<DateRange | null>(null);
798
+ protected readonly summary = computed(() => {
799
+ const slot = this.slot();
800
+ return slot?.start && slot.end
801
+ ? `Dock 4 is yours from ${words.describe(slot.start)} to ${words.describe(slot.end)}.`
802
+ : `Book 1 to 3 weekdays from October 1. Booked as of ${words.describe(TODAY)}: Oct 7–8 and Oct 21–23.`;
803
+ });
804
+ }
805
+ ```
806
+
807
+ ### first-day.ts
808
+
809
+ Example
810
+
811
+ ```ts
812
+ import { Component } from '@angular/core';
813
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
814
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
815
+ import { plainDate } from '@slotted/core/date';
816
+
817
+ @Component({
818
+ selector: 'app-date-range-picker-first-day',
819
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
820
+ template: `
821
+ <div slField>
822
+ <label slFieldLabel>Sprint 42</label>
823
+ <div slDateRangePicker weekNumbers [defaultValue]="sprint" [firstDayOfWeek]="1"></div>
824
+ <span slFieldDescription>Sprints run two ISO weeks, Monday to Friday.</span>
825
+ </div>
826
+ `,
827
+ })
828
+ export class DateRangePickerFirstDay {
829
+ protected readonly sprint = { start: plainDate(2026, 10, 5), end: plainDate(2026, 10, 16) };
830
+ }
831
+ ```
832
+
833
+ ### focus-and-open.ts
834
+
835
+ Example
836
+
837
+ ```ts
838
+ import { Component } from '@angular/core';
839
+ import { SlButton } from '@slotted/angular/button';
840
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
841
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
842
+ import { SlInline } from '@slotted/angular/inline';
843
+ import { SlStack } from '@slotted/angular/stack';
844
+ import { plainDate } from '@slotted/core/date';
845
+
846
+ @Component({
847
+ selector: 'app-date-range-picker-focus-and-open',
848
+ imports: [SlButton, SlDateRangePicker, SlField, SlFieldLabel, SlInline, SlStack],
849
+ template: `
850
+ <div slStack [gap]="4">
851
+ <div slField>
852
+ <label slFieldLabel>Contract term</label>
853
+ <div slDateRangePicker #picker="slDateRangePicker" [defaultValue]="term"></div>
854
+ </div>
855
+ <div slInline [gap]="2">
856
+ <button
857
+ slButton
858
+ size="sm"
859
+ tone="secondary"
860
+ variant="outline"
861
+ type="button"
862
+ (click)="picker.focus('end')"
863
+ >
864
+ Edit end date
865
+ </button>
866
+ <button
867
+ slButton
868
+ size="sm"
869
+ tone="secondary"
870
+ variant="outline"
871
+ type="button"
872
+ (click)="picker.openSurface()"
873
+ >
874
+ Open calendar
875
+ </button>
876
+ </div>
877
+ </div>
878
+ `,
879
+ })
880
+ export class DateRangePickerFocusAndOpen {
881
+ protected readonly term = { start: plainDate(2026, 4, 1), end: plainDate(2027, 3, 31) };
882
+ }
883
+ ```
884
+
885
+ ### footer.ts
886
+
887
+ Example
888
+
889
+ ```ts
890
+ import { Component } from '@angular/core';
891
+ import { SlButton } from '@slotted/angular/button';
892
+ import { SlDateRangePicker, SlDateRangePickerFooter } from '@slotted/angular/date-range-picker';
893
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
894
+ import { plainDate } from '@slotted/core/date';
895
+
896
+ @Component({
897
+ selector: 'app-date-range-picker-footer',
898
+ imports: [
899
+ SlButton,
900
+ SlDateRangePicker,
901
+ SlDateRangePickerFooter,
902
+ SlField,
903
+ SlFieldDescription,
904
+ SlFieldLabel,
905
+ ],
906
+ template: `
907
+ <div slField>
908
+ <label slFieldLabel>Stock count freeze</label>
909
+ <div
910
+ slDateRangePicker
911
+ #picker="slDateRangePicker"
912
+ closeOnSelect="never"
913
+ [defaultValue]="freeze"
914
+ >
915
+ <div slDateRangePickerFooter>
916
+ <button slButton size="sm" type="button" (click)="picker.closeSurface()">Done</button>
917
+ </div>
918
+ </div>
919
+ <span slFieldDescription>The calendar stays open until you press Done.</span>
920
+ </div>
921
+ `,
922
+ })
923
+ export class DateRangePickerFooter {
924
+ protected readonly freeze = { start: plainDate(2026, 10, 30), end: plainDate(2026, 11, 1) };
925
+ }
926
+ ```
927
+
928
+ ### form.ts
929
+
930
+ Example
931
+
932
+ ```ts
933
+ import { Component, computed, signal } from '@angular/core';
934
+ import { toSignal } from '@angular/core/rxjs-interop';
935
+ import { FormControl, FormGroup, ReactiveFormsModule, type ValidatorFn } from '@angular/forms';
936
+ import { SlButton } from '@slotted/angular/button';
937
+ import { SlDateRangePicker, type DateRange } from '@slotted/angular/date-range-picker';
938
+ import { SlField, SlFieldError, SlFieldLabel } from '@slotted/angular/field';
939
+ import { SlInline } from '@slotted/angular/inline';
940
+ import { SlStack } from '@slotted/angular/stack';
941
+ import { SlText } from '@slotted/angular/typography';
942
+ import { toISODate } from '@slotted/core/date';
943
+
944
+ /** Both ends present: Validators.required accepts a range with one end open. */
945
+ const bothEnds: ValidatorFn = (control) => {
946
+ const range = control.value as DateRange | null;
947
+ return range?.start && range.end ? null : { bothEnds: true };
948
+ };
949
+
950
+ @Component({
951
+ selector: 'app-date-range-picker-form',
952
+ imports: [
953
+ ReactiveFormsModule,
954
+ SlButton,
955
+ SlDateRangePicker,
956
+ SlField,
957
+ SlFieldError,
958
+ SlFieldLabel,
959
+ SlInline,
960
+ SlStack,
961
+ SlText,
962
+ ],
963
+ template: `
964
+ <form novalidate [formGroup]="form" (ngSubmit)="submit()" (reset)="clear()">
965
+ <div slStack [gap]="5">
966
+ <div slField required [invalid]="error() === '' ? undefined : true">
967
+ <label slFieldLabel>Code freeze</label>
968
+ <div
969
+ slDateRangePicker
970
+ startName="freezeStart"
971
+ endName="freezeEnd"
972
+ formControlName="freeze"
973
+ ></div>
974
+ <span slFieldError live="polite" reserve>{{ error() }}</span>
975
+ </div>
976
+ <div slInline [gap]="3" align="center">
977
+ <button slButton type="submit">Save freeze</button>
978
+ <button slButton type="reset" tone="secondary" variant="outline">Reset</button>
979
+ @if (saved(); as message) {
980
+ <span slText size="sm" tone="muted">{{ message }}</span>
981
+ }
982
+ </div>
983
+ </div>
984
+ </form>
985
+ `,
986
+ })
987
+ export class DateRangePickerForm {
988
+ protected readonly form = new FormGroup({
989
+ freeze: new FormControl<DateRange | null>(null, bothEnds),
990
+ });
991
+ private readonly value = toSignal(this.form.controls.freeze.valueChanges, {
992
+ initialValue: this.form.controls.freeze.value,
993
+ });
994
+ private readonly submitted = signal(false);
995
+ protected readonly saved = signal<string | null>(null);
996
+ protected readonly error = computed(() => {
997
+ this.value();
998
+ const control = this.form.controls.freeze;
999
+ if (control.hasError('slottedDateRangeOrder')) {
1000
+ return 'The end date must be on or after the start date.';
1001
+ }
1002
+ if (this.submitted() && control.hasError('bothEnds')) return 'Enter a start and an end date.';
1003
+ return '';
1004
+ });
1005
+
1006
+ protected submit(): void {
1007
+ this.submitted.set(true);
1008
+ const range = this.form.controls.freeze.value;
1009
+ this.saved.set(
1010
+ this.form.valid && range?.start && range.end
1011
+ ? `Freeze saved from ${toISODate(range.start)} to ${toISODate(range.end)}.`
1012
+ : null,
1013
+ );
1014
+ }
1015
+
1016
+ protected clear(): void {
1017
+ this.submitted.set(false);
1018
+ this.saved.set(null);
1019
+ }
1020
+ }
1021
+ ```
1022
+
1023
+ ### locale.ts
1024
+
1025
+ Example
1026
+
1027
+ ```ts
1028
+ import { Component } from '@angular/core';
1029
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
1030
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1031
+ import { SlStack } from '@slotted/angular/stack';
1032
+ import { plainDate } from '@slotted/core/date';
1033
+
1034
+ @Component({
1035
+ selector: 'app-date-range-picker-locale',
1036
+ imports: [SlDateRangePicker, SlField, SlFieldLabel, SlStack],
1037
+ template: `
1038
+ <div slStack [gap]="5">
1039
+ <div slField>
1040
+ <label slFieldLabel>Peak season, United States (en-US)</label>
1041
+ <div slDateRangePicker locale="en-US" [defaultValue]="season"></div>
1042
+ </div>
1043
+ <div slField>
1044
+ <label slFieldLabel>Peak season, United Kingdom (en-GB)</label>
1045
+ <div slDateRangePicker locale="en-GB" [defaultValue]="season"></div>
1046
+ </div>
1047
+ <div slField>
1048
+ <label slFieldLabel>Peak season, Germany (de-DE)</label>
1049
+ <div slDateRangePicker locale="de-DE" [defaultValue]="season"></div>
1050
+ </div>
1051
+ </div>
1052
+ `,
1053
+ })
1054
+ export class DateRangePickerLocale {
1055
+ protected readonly season = { start: plainDate(2026, 11, 2), end: plainDate(2026, 12, 23) };
1056
+ }
1057
+ ```
1058
+
1059
+ ### months.ts
1060
+
1061
+ Example
1062
+
1063
+ ```ts
1064
+ import { Component } from '@angular/core';
1065
+ import { SlDateRangePicker } from '@slotted/angular/date-range-picker';
1066
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1067
+ import { plainDate } from '@slotted/core/date';
1068
+
1069
+ @Component({
1070
+ selector: 'app-date-range-picker-months',
1071
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
1072
+ template: `
1073
+ <div slField>
1074
+ <label slFieldLabel>Promotion window</label>
1075
+ <div slDateRangePicker [defaultValue]="promotion" [months]="1"></div>
1076
+ <span slFieldDescription>Promotions run inside one month.</span>
1077
+ </div>
1078
+ `,
1079
+ })
1080
+ export class DateRangePickerMonths {
1081
+ protected readonly promotion = { start: plainDate(2026, 10, 5), end: plainDate(2026, 10, 18) };
1082
+ }
1083
+ ```
1084
+
1085
+ ### position.ts
1086
+
1087
+ Example
1088
+
1089
+ ```ts
1090
+ import { Component, computed, signal } from '@angular/core';
1091
+ import { SlDateRangePicker, type DateRange } from '@slotted/angular/date-range-picker';
1092
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1093
+ import { plainDate, toISODate } from '@slotted/core/date';
1094
+
1095
+ @Component({
1096
+ selector: 'app-date-range-picker-position',
1097
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
1098
+ template: `
1099
+ <div slField>
1100
+ <label slFieldLabel>Scissor lift rental</label>
1101
+ <div
1102
+ slDateRangePicker
1103
+ defaultPosition="end"
1104
+ [value]="rental()"
1105
+ (valueChange)="rental.set($event.value)"
1106
+ ></div>
1107
+ <span slFieldDescription>{{ summary() }}</span>
1108
+ </div>
1109
+ `,
1110
+ })
1111
+ export class DateRangePickerPosition {
1112
+ protected readonly rental = signal<DateRange | null>({
1113
+ start: plainDate(2026, 10, 5),
1114
+ end: plainDate(2026, 10, 9),
1115
+ });
1116
+ protected readonly summary = computed(() => {
1117
+ const end = this.rental()?.end;
1118
+ return end
1119
+ ? `Returns ${toISODate(end)}. Open the calendar and press a day to move the return date.`
1120
+ : 'Choose a return date.';
1121
+ });
1122
+ }
1123
+ ```
1124
+
1125
+ ### reporting-filter.ts
1126
+
1127
+ Example
1128
+
1129
+ ```ts
1130
+ import { Component, computed, signal } from '@angular/core';
1131
+ import {
1132
+ SlDateRangePicker,
1133
+ SlDateRangePickerPreset,
1134
+ SlDateRangePickerPresets,
1135
+ type DateRange,
1136
+ } from '@slotted/angular/date-range-picker';
1137
+ import { SlField, SlFieldLabel } from '@slotted/angular/field';
1138
+ import { SlGrid } from '@slotted/angular/grid';
1139
+ import { SlStack } from '@slotted/angular/stack';
1140
+ import {
1141
+ SlStatCard,
1142
+ SlStatCardComparison,
1143
+ SlStatCardDelta,
1144
+ SlStatCardFigure,
1145
+ SlStatCardHeader,
1146
+ SlStatCardLabel,
1147
+ SlStatCardPeriod,
1148
+ SlStatCardValue,
1149
+ } from '@slotted/angular/stat-card';
1150
+ import { addDays, daysBetween, plainDate, type PlainDate } from '@slotted/core/date';
1151
+
1152
+ const TODAY = plainDate(2026, 9, 30);
1153
+ const LAST_7_DAYS: DateRange = { start: addDays(TODAY, -6), end: TODAY };
1154
+ const PRESETS: { label: string; range: DateRange }[] = [
1155
+ { label: 'Last 7 days', range: LAST_7_DAYS },
1156
+ { label: 'Last 30 days', range: { start: addDays(TODAY, -29), end: TODAY } },
1157
+ { label: 'This quarter', range: { start: plainDate(2026, 7, 1), end: TODAY } },
1158
+ ];
1159
+
1160
+ /** Orders shipped on one day, from the Northwind warehouse feed. */
1161
+ const ordersOn = (date: PlainDate) => 150 + date.month * 6 + ((date.day * 37) % 50);
1162
+
1163
+ const ordersBetween = (start: PlainDate, end: PlainDate) => {
1164
+ let total = 0;
1165
+ for (let date = start; daysBetween(date, end) >= 0; date = addDays(date, 1)) {
1166
+ total += ordersOn(date);
1167
+ }
1168
+ return total;
1169
+ };
1170
+
1171
+ @Component({
1172
+ selector: 'app-date-range-picker-reporting-filter',
1173
+ imports: [
1174
+ SlDateRangePicker,
1175
+ SlDateRangePickerPreset,
1176
+ SlDateRangePickerPresets,
1177
+ SlField,
1178
+ SlFieldLabel,
1179
+ SlGrid,
1180
+ SlStack,
1181
+ SlStatCard,
1182
+ SlStatCardComparison,
1183
+ SlStatCardDelta,
1184
+ SlStatCardFigure,
1185
+ SlStatCardHeader,
1186
+ SlStatCardLabel,
1187
+ SlStatCardPeriod,
1188
+ SlStatCardValue,
1189
+ ],
1190
+ template: `
1191
+ <div slStack [gap]="5">
1192
+ <div slField size="sm">
1193
+ <label slFieldLabel>Period</label>
1194
+ <div
1195
+ slDateRangePicker
1196
+ [max]="today"
1197
+ [value]="period()"
1198
+ (valueChange)="period.set($event.value)"
1199
+ >
1200
+ <div slDateRangePickerPresets>
1201
+ @for (preset of presets; track preset.label) {
1202
+ <button [slDateRangePickerPreset]="preset.range">{{ preset.label }}</button>
1203
+ }
1204
+ </div>
1205
+ </div>
1206
+ </div>
1207
+ <div slGrid [gap]="4" minItemWidth="sm">
1208
+ <div slStatCard goodWhen="up" [delta]="figures().delta">
1209
+ <div slStatCardHeader><span slStatCardLabel>Orders shipped</span></div>
1210
+ <div slStatCardFigure>
1211
+ <span slStatCardValue [value]="figures().orders"></span>
1212
+ <span slStatCardDelta></span>
1213
+ <p slStatCardComparison>
1214
+ from {{ figures().previous.toLocaleString('en-US') }}
1215
+ <span slStatCardPeriod>previous {{ figures().days }} days</span>
1216
+ </p>
1217
+ </div>
1218
+ </div>
1219
+ <div slStatCard>
1220
+ <div slStatCardHeader><span slStatCardLabel>Orders per day</span></div>
1221
+ <div slStatCardFigure>
1222
+ <span slStatCardValue [value]="figures().perDay"></span>
1223
+ <p slStatCardComparison>
1224
+ over <span slStatCardPeriod>{{ figures().days }} days</span>
1225
+ </p>
1226
+ </div>
1227
+ </div>
1228
+ </div>
1229
+ </div>
1230
+ `,
1231
+ })
1232
+ export class DateRangePickerReportingFilter {
1233
+ protected readonly today = TODAY;
1234
+ protected readonly presets = PRESETS;
1235
+ protected readonly period = signal<DateRange | null>(LAST_7_DAYS);
1236
+ protected readonly figures = computed(() => {
1237
+ const period = this.period();
1238
+ if (!period?.start || !period.end)
1239
+ return { days: 0, orders: 0, previous: 0, delta: 0, perDay: 0 };
1240
+ const days = daysBetween(period.start, period.end) + 1;
1241
+ const orders = ordersBetween(period.start, period.end);
1242
+ const previous = ordersBetween(addDays(period.start, -days), addDays(period.start, -1));
1243
+ return {
1244
+ days,
1245
+ orders,
1246
+ previous,
1247
+ delta: previous === 0 ? 0 : (orders - previous) / previous,
1248
+ perDay: Math.round(orders / days),
1249
+ };
1250
+ });
1251
+ }
1252
+ ```
1253
+
1254
+ ### typing.ts
1255
+
1256
+ Example
1257
+
1258
+ ```ts
1259
+ import { Component, signal } from '@angular/core';
1260
+ import { SlDateRangePicker, type DateRange } from '@slotted/angular/date-range-picker';
1261
+ import { SlField, SlFieldDescription, SlFieldLabel } from '@slotted/angular/field';
1262
+ import { toISODate, type PlainDate } from '@slotted/core/date';
1263
+ import type { ChangeRequest } from '@slotted/core/state';
1264
+
1265
+ const HOW: Record<string, string> = {
1266
+ blur: 'completed when the field lost focus',
1267
+ clear: 'cleared',
1268
+ keyboard: 'typed',
1269
+ pointer: 'pressed',
1270
+ programmatic: 'set from code',
1271
+ select: 'chosen in the calendar',
1272
+ };
1273
+ const iso = (date: PlainDate | null) => (date === null ? 'open' : toISODate(date));
1274
+
1275
+ @Component({
1276
+ selector: 'app-date-range-picker-typing',
1277
+ imports: [SlDateRangePicker, SlField, SlFieldDescription, SlFieldLabel],
1278
+ template: `
1279
+ <div slField>
1280
+ <label slFieldLabel>Audit window</label>
1281
+ <div slDateRangePicker [value]="period()" (valueChange)="record($event)"></div>
1282
+ <span slFieldDescription>{{ last() }}</span>
1283
+ </div>
1284
+ `,
1285
+ })
1286
+ export class DateRangePickerTyping {
1287
+ protected readonly period = signal<DateRange | null>(null);
1288
+ protected readonly last = signal('Type both dates, or choose two days in the calendar.');
1289
+
1290
+ protected record(request: ChangeRequest<DateRange | null>): void {
1291
+ const value = request.value;
1292
+ this.period.set(value);
1293
+ this.last.set(
1294
+ value === null
1295
+ ? `No dates, ${HOW[request.reason]}.`
1296
+ : `${iso(value.start)} to ${iso(value.end)}, ${HOW[request.reason]}.`,
1297
+ );
1298
+ }
1299
+ }
1300
+ ```